xmahjongg-3.7/0000777000076400007640000000000010213403362010354 500000000000000xmahjongg-3.7/INSTALL0000664000076400007640000001644606532460520011346 00000000000000Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. xmahjongg-3.7/share/0000777000076400007640000000000010213403362011456 500000000000000xmahjongg-3.7/share/backgrounds/0000777000076400007640000000000010213403362013760 500000000000000xmahjongg-3.7/share/backgrounds/default.gif0000664000076400007640000000351106576336376016044 00000000000000GIF87a2m5Rjk)z_E+[Uz,I T m!VGo=I%q`96s04Xn35 ΄0cŽٶ࠺>Q.qmtt!wn{(_miirR;OJsBw;Q~i`o44wU2hU`QkϣOٱI29󴩶DO;l Qj>Yw5+ɔIbE(#D&pG%bqڐ7~y12o*N7GҌkV`NXRvr:NT6̼F4=4PV~ŠnI%NČeSͰh26WC\ݧ$@\r/kO'rݱ nr8֭rzt~+>83}zTxx۩F s_3w4dZ\uI;bⒾjBn4YN4$_|{YiG6v?K/h`xw$eGz^!dP|>r Df|pksı чX{xC]I$赇g߷&hx)P 2x5+_D 8A,ȔD7ӒR*`%Tvx9yEB6OKTx)Lb{ѮȾk@IK (FXw:0:+xT4/Q_;b<3Bmwc-v0. iWGx_&)G<,_$ԅG*E(h*38'RyQΚX둌 ()adxRwIGjz85qcna!gXNSF a3us?Ԡrk4ȁ kn'-de %ΐqKWzDd .K 4URzڴhx!@w {Ú1K!.WuP~Om@D&/d.R`uD8CԒJXM2Ԋ#-h3jطI&ú9qפ Kyl(‚R ʟ ~5PF fmF )S6ktۢFam|Os*;CYHD;xmahjongg-3.7/share/backgrounds/green.gif0000664000076400007640000000005006603735732015501 00000000000000GIF87a A,  ;xmahjongg-3.7/share/layouts/0000777000076400007640000000000010213403362013156 500000000000000xmahjongg-3.7/share/layouts/hare0000664000076400007640000000230507340502461013745 00000000000000# `hare' layout, from Chinese zodiac set # by Todd Michel McComb 0 2 0 0 4 0 0 6 0 0 8 0 2 0 0 2 2 0 2 4 0 2 6 0 2 8 0 2 10 0 3 20 0 3 22 0 4 2 0 4 4 0 4 6 0 4 8 0 4 10 0 4 12 0 4 18 0 5 16 0 5 20 0 5 22 0 5 24 0 6 12 0 6 14 0 6 18 0 7 10 0 7 16 0 7 20 0 7 22 0 7 24 0 7 26 0 7 28 0 8 12 0 8 14 0 8 18 0 9 16 0 9 20 0 9 22 0 9 24 0 10 2 0 10 4 0 10 6 0 10 8 0 10 10 0 10 12 0 10 18 0 11 20 0 11 22 0 12 0 0 12 2 0 12 4 0 12 6 0 12 8 0 12 10 0 14 2 0 14 4 0 14 6 0 14 8 0 0 4 1 0 6 1 2 2 1 2 4 1 2 6 1 2 8 1 3 20 1 3 22 1 4 4 1 4 6 1 4 8 1 5 16 1 5 18 1 5 20 1 5 22 1 5 24 1 6 12 1 6 14 1 7 10 1 7 16 1 7 18 1 7 20 1 7 22 1 7 24 1 7 26 1 7 28 1 8 12 1 8 14 1 9 16 1 9 18 1 9 20 1 9 22 1 9 24 1 10 4 1 10 6 1 10 8 1 11 20 1 11 22 1 12 2 1 12 4 1 12 6 1 12 8 1 14 4 1 14 6 1 0 5 2 2 4 2 2 6 2 3 21 2 4 5 2 5 16 2 5 18 2 5 20 2 5 22 2 5 24 2 7 14 2 7 16 2 7 18 2 7 20 2 7 22 2 7 24 2 9 16 2 9 18 2 9 20 2 9 22 2 9 24 2 10 5 2 11 21 2 12 4 2 12 6 2 14 5 2 2 5 3 5 18 3 5 20 3 5 22 3 7 18 3 7 20 3 7 22 3 9 18 3 9 20 3 9 22 3 12 5 3 6 19 4 6 21 4 8 19 4 8 21 4 xmahjongg-3.7/share/layouts/schoon0000664000076400007640000000220607772140121014317 000000000000001 1 0 1 3 0 9 1 0 9 3 0 8 6 0 8 8 0 0 6 0 0 8 0 0 10 0 0 12 0 0 14 0 6 0 0 6 20 0 10 5 0 10 7 0 10 15 0 3 1 0 3 3 0 2 5 0 2 7 0 2 9 0 2 11 0 2 13 0 2 15 0 4 6 0 4 8 0 4 10 0 4 12 0 4 14 0 12 12 0 12 14 0 12 10 0 12 8 0 12 6 0 5 2 0 7 2 0 5 4 0 7 4 0 6 6 0 6 8 0 6 10 0 6 12 0 6 14 0 8 10 0 8 12 0 8 14 0 9 17 0 9 19 0 11 17 0 11 19 0 1 17 0 1 19 0 3 19 0 3 17 0 5 16 0 7 16 0 7 18 0 5 18 0 10 9 0 10 11 0 10 13 0 11 1 0 11 3 0 1 9 1 1 11 1 0 13 1 11 9 1 11 11 1 12 13 1 12 7 1 0 7 1 5 7 1 7 7 1 5 9 1 7 9 1 5 11 1 7 11 1 5 13 1 7 13 1 2 6 1 2 4 1 2 2 1 4 5 1 6 5 1 8 5 1 4 3 1 6 3 1 8 3 1 3 12 1 3 10 1 3 8 1 2 18 1 2 16 1 2 14 1 4 15 1 6 15 1 8 15 1 4 17 1 6 17 1 8 17 1 9 12 1 9 10 1 9 8 1 10 18 1 10 16 1 10 14 1 10 6 1 10 4 1 10 2 1 6 4 2 6 6 2 6 8 2 6 10 2 6 12 2 6 14 2 6 16 2 4 5 2 4 7 2 4 9 2 4 11 2 4 13 2 4 15 2 8 5 2 8 7 2 8 9 2 8 11 2 8 13 2 8 15 2 5 7 3 7 7 3 5 9 3 7 9 3 5 11 3 7 11 3 5 13 3 7 13 3 6 15 3 6 5 3 6 10 4 6 12 4 6 8 4 6 11 5 6 9 5 6 10 6 # from Johannes Schőőn, schoon@pucko.hsva.de xmahjongg-3.7/share/layouts/ceremonial0000664000076400007640000000177206620343332015153 000000000000000 2 0 0 4 0 2 3 0 2 5 0 4 4 0 4 6 0 5 8 0 5 10 0 6 12 0 8 12 0 9 10 0 9 8 0 10 6 0 10 4 0 12 5 0 12 3 0 14 4 0 14 2 0 0 28 0 0 26 0 2 27 0 2 25 0 4 26 0 4 24 0 5 22 0 5 20 0 6 18 0 8 18 0 9 20 0 9 22 0 10 24 0 10 26 0 12 25 0 12 27 0 14 26 0 14 28 0 0 2 1 0 4 1 2 3 1 2 5 1 4 4 1 4 6 1 5 8 1 5 10 1 6 12 1 8 12 1 9 10 1 9 8 1 10 6 1 10 4 1 12 5 1 12 3 1 14 4 1 14 2 1 0 28 1 0 26 1 2 27 1 2 25 1 4 26 1 4 24 1 5 22 1 5 20 1 6 18 1 8 18 1 9 20 1 9 22 1 10 24 1 10 26 1 12 25 1 12 27 1 14 26 1 14 28 1 0 9 0 0 11 0 0 13 0 0 15 0 0 17 0 0 19 0 0 21 0 0 10 1 0 12 1 0 14 1 0 16 1 0 18 1 0 20 1 0 13 2 0 15 2 0 17 2 14 9 0 14 11 0 14 13 0 14 15 0 14 17 0 14 19 0 14 21 0 14 10 1 14 12 1 14 14 1 14 16 1 14 18 1 14 20 1 14 13 2 14 15 2 14 17 2 3 0 0 5 0 0 7 0 0 9 0 0 11 0 0 4 0 1 6 0 1 8 0 1 10 0 1 7 0 2 3 30 0 5 30 0 7 30 0 9 30 0 11 30 0 4 30 1 6 30 1 8 30 1 10 30 1 7 30 2 3 15 0 5 15 0 7 15 0 9 15 0 11 15 0 4 13 0 4 17 0 10 13 0 10 17 0 4 14 1 4 16 1 10 14 1 10 16 1 6 15 1 8 15 1 4 15 2 6 15 2 8 15 2 10 15 2 7 15 3 xmahjongg-3.7/share/layouts/farandole0000664000076400007640000000176406620343332014771 000000000000001 2 0 0 4 0 0 6 0 1 8 0 1 10 0 0 12 0 0 14 0 0 16 0 1 18 0 1 20 0 0 22 0 0 24 0 1 26 0 3 27 0 5 27 0 7 26 0 7 28 0 9 27 0 11 27 0 13 26 0 14 24 0 14 22 0 13 20 0 13 18 0 14 16 0 14 14 0 14 12 0 13 10 0 13 8 0 14 6 0 14 4 0 13 2 0 11 1 0 9 1 0 7 0 0 7 2 0 5 1 0 3 1 0 1 2 1 0 4 1 0 6 1 1 8 1 1 10 1 0 12 1 0 14 1 0 16 1 1 18 1 1 20 1 0 22 1 0 24 1 1 26 1 3 27 1 5 27 1 7 26 1 7 28 1 9 27 1 11 27 1 13 26 1 14 24 1 14 22 1 13 20 1 13 18 1 14 16 1 14 14 1 14 12 1 13 10 1 13 8 1 14 6 1 14 4 1 13 2 1 11 1 1 9 1 1 7 0 1 7 2 1 5 1 1 3 1 1 2 5 0 2 23 0 12 5 0 12 23 0 7 9 0 7 19 0 4 12 0 4 10 0 5 8 0 5 6 0 6 4 0 8 4 0 9 6 0 9 8 0 10 10 0 10 12 0 4 16 0 4 18 0 5 20 0 5 22 0 6 24 0 8 24 0 9 22 0 9 20 0 10 18 0 10 16 0 7 11 0 7 13 0 7 15 0 7 17 0 4 12 1 4 10 1 5 8 1 5 6 1 6 4 1 8 4 1 9 6 1 9 8 1 10 10 1 10 12 1 4 16 1 4 18 1 5 20 1 5 22 1 6 24 1 8 24 1 9 22 1 9 20 1 10 18 1 10 16 1 7 11 1 7 13 1 7 15 1 7 17 1 5 8 2 4 10 2 4 12 2 4 16 2 4 18 2 5 20 2 9 20 2 10 18 2 10 16 2 10 12 2 10 10 2 9 8 2 7 13 2 7 15 2 xmahjongg-3.7/share/layouts/horse0000664000076400007640000000233007340502461014144 00000000000000# `horse' layout, from Chinese zodiac set # by Todd Michel McComb 0 28 0 1 18 0 1 20 0 1 22 0 1 26 0 2 24 0 3 2 0 3 4 0 3 14 0 3 16 0 3 20 0 3 22 0 4 12 0 5 0 0 5 4 0 5 6 0 5 8 0 5 10 0 5 14 0 5 16 0 5 18 0 5 20 0 5 22 0 5 24 0 6 12 0 7 0 0 7 2 0 7 4 0 7 6 0 7 8 0 7 10 0 7 14 0 7 16 0 7 18 0 7 20 0 7 22 0 7 24 0 8 12 0 9 0 0 9 4 0 9 6 0 9 8 0 9 10 0 9 14 0 9 16 0 9 18 0 9 20 0 9 22 0 9 24 0 10 12 0 11 2 0 11 4 0 11 14 0 11 16 0 11 20 0 11 22 0 12 24 0 13 18 0 13 20 0 13 22 0 13 26 0 14 28 0 1 18 1 1 20 1 1 22 1 2 24 1 3 2 1 3 14 1 3 16 1 3 20 1 3 22 1 4 12 1 5 0 1 5 4 1 5 14 1 5 16 1 5 18 1 5 20 1 5 22 1 6 8 1 6 10 1 6 12 1 7 0 1 7 2 1 7 4 1 7 14 1 7 16 1 7 18 1 7 20 1 7 22 1 7 24 1 8 8 1 8 10 1 8 12 1 9 0 1 9 4 1 9 14 1 9 16 1 9 18 1 9 20 1 9 22 1 10 12 1 11 2 1 11 14 1 11 16 1 11 20 1 11 22 1 12 24 1 13 18 1 13 20 1 13 22 1 1 19 2 3 14 2 3 16 2 3 20 2 3 22 2 5 14 2 5 16 2 5 18 2 5 20 2 5 22 2 6 12 2 7 14 2 7 16 2 7 18 2 7 20 2 7 22 2 8 12 2 9 14 2 9 16 2 9 18 2 9 20 2 9 22 2 11 14 2 11 16 2 11 20 2 11 22 2 13 19 2 6 16 3 6 18 3 6 20 3 8 16 3 8 18 3 8 20 3 xmahjongg-3.7/share/layouts/rat0000664000076400007640000000230007340502461013607 00000000000000# `rat' layout, from Chinese zodiac set # by Todd Michel McComb 0 0 0 0 2 0 0 4 0 0 6 0 0 20 0 0 22 0 0 24 0 0 26 0 2 0 0 2 2 0 2 4 0 2 6 0 2 8 0 2 11 0 2 13 0 2 15 0 2 18 0 2 20 0 2 22 0 2 24 0 2 26 0 4 0 0 4 2 0 4 4 0 4 8 0 4 10 0 4 12 0 4 14 0 4 16 0 4 18 0 4 22 0 4 24 0 4 26 0 6 0 0 6 2 0 6 4 0 6 6 0 6 8 0 6 10 0 6 12 0 6 14 0 6 16 0 6 18 0 6 20 0 6 22 0 6 24 0 6 26 0 8 10 0 8 12 0 8 14 0 8 16 0 10 11 0 10 13 0 10 15 0 12 6 0 12 8 0 12 10 0 12 12 0 12 14 0 12 16 0 12 18 0 12 20 0 14 12 0 14 14 0 0 2 1 0 4 1 0 22 1 0 24 1 2 0 1 2 2 1 2 4 1 2 6 1 2 8 1 2 11 1 2 13 1 2 15 1 2 18 1 2 20 1 2 22 1 2 24 1 2 26 1 4 0 1 4 2 1 4 4 1 4 8 1 4 10 1 4 12 1 4 14 1 4 16 1 4 18 1 4 22 1 4 24 1 4 26 1 6 2 1 6 4 1 6 6 1 6 10 1 6 12 1 6 14 1 6 16 1 6 20 1 6 22 1 6 24 1 8 10 1 8 12 1 8 14 1 8 16 1 10 11 1 10 13 1 10 15 1 12 12 1 12 14 1 14 13 1 2 2 2 2 4 2 2 22 2 2 24 2 3 0 2 3 26 2 4 2 2 4 4 2 4 10 2 4 12 2 4 14 2 4 16 2 4 22 2 4 24 2 6 3 2 6 10 2 6 12 2 6 14 2 6 16 2 6 23 2 8 10 2 8 12 2 8 14 2 8 16 2 3 3 3 3 23 3 5 12 3 5 14 3 7 12 3 7 14 3 6 13 4 xmahjongg-3.7/share/layouts/tiger0000664000076400007640000000231607340502462014143 00000000000000# `tiger' layout, from Chinese zodiac set # by Todd Michel McComb 0 0 0 0 2 0 1 4 0 1 6 0 1 8 0 1 20 0 1 22 0 1 24 0 1 26 0 1 28 0 2 0 0 2 2 0 3 8 0 3 10 0 3 18 0 3 20 0 4 12 0 4 14 0 4 16 0 5 8 0 5 10 0 5 18 0 6 4 0 6 6 0 6 12 0 6 14 0 6 16 0 6 24 0 6 28 0 7 8 0 7 10 0 7 18 0 7 20 0 8 4 0 8 6 0 8 12 0 8 14 0 8 16 0 8 22 0 8 26 0 9 8 0 9 10 0 9 18 0 10 12 0 10 14 0 10 16 0 11 8 0 11 10 0 11 18 0 11 20 0 12 0 0 12 2 0 13 4 0 13 6 0 13 8 0 13 20 0 13 22 0 13 24 0 13 26 0 13 28 0 14 0 0 14 2 0 0 0 1 0 2 1 1 4 1 1 6 1 1 20 1 1 22 1 1 24 1 1 26 1 1 28 1 2 0 1 2 2 1 3 8 1 3 18 1 3 20 1 4 10 1 4 12 1 4 14 1 4 16 1 5 8 1 5 18 1 6 6 1 6 10 1 6 12 1 6 14 1 6 16 1 6 24 1 6 28 1 7 4 1 7 8 1 7 18 1 7 20 1 8 6 1 8 10 1 8 12 1 8 14 1 8 16 1 8 22 1 8 26 1 9 8 1 9 18 1 10 10 1 10 12 1 10 14 1 10 16 1 11 8 1 11 18 1 11 20 1 12 0 1 12 2 1 13 4 1 13 6 1 13 20 1 13 22 1 13 24 1 13 26 1 13 28 1 14 0 1 14 2 1 5 8 2 5 10 2 5 12 2 5 14 2 5 16 2 5 18 2 7 8 2 7 10 2 7 12 2 7 14 2 7 16 2 7 18 2 9 8 2 9 10 2 9 12 2 9 14 2 9 16 2 9 18 2 5 12 3 5 18 3 7 10 3 7 16 3 9 8 3 9 14 3 xmahjongg-3.7/share/layouts/ram0000664000076400007640000000226407340502461013611 00000000000000# `ram' layout, from Chinese zodiac set # by Todd Michel McComb 0 3 0 0 5 0 0 7 0 0 21 0 0 23 0 0 25 0 2 0 0 2 2 0 2 4 0 2 6 0 2 8 0 2 10 0 2 12 0 2 14 0 2 16 0 2 18 0 2 20 0 2 22 0 2 24 0 2 26 0 2 28 0 4 0 0 4 2 0 4 4 0 4 6 0 4 8 0 4 12 0 4 14 0 4 16 0 4 20 0 4 22 0 4 24 0 4 26 0 4 28 0 6 0 0 6 2 0 6 6 0 6 8 0 6 11 0 6 14 0 6 17 0 6 20 0 6 22 0 6 26 0 6 28 0 8 0 0 8 2 0 8 4 0 8 6 0 8 8 0 8 12 0 8 14 0 8 16 0 8 20 0 8 22 0 8 24 0 8 26 0 8 28 0 10 2 0 10 4 0 10 6 0 10 13 0 10 15 0 10 22 0 10 24 0 10 26 0 12 13 0 12 15 0 14 14 0 0 4 1 0 6 1 0 22 1 0 24 1 2 2 1 2 4 1 2 6 1 2 8 1 2 10 1 2 12 1 2 14 1 2 16 1 2 18 1 2 20 1 2 22 1 2 24 1 2 26 1 4 1 1 4 3 1 4 5 1 4 7 1 4 12 1 4 14 1 4 16 1 4 21 1 4 23 1 4 25 1 4 27 1 6 1 1 6 7 1 6 11 1 6 14 1 6 17 1 6 21 1 6 27 1 8 1 1 8 3 1 8 5 1 8 7 1 8 13 1 8 15 1 8 21 1 8 23 1 8 25 1 8 27 1 10 3 1 10 5 1 10 14 1 10 23 1 10 25 1 12 14 1 14 14 1 2 3 2 2 5 2 2 14 2 2 23 2 2 25 2 4 2 2 4 4 2 4 6 2 4 13 2 4 15 2 4 22 2 4 24 2 4 26 2 8 2 2 8 4 2 8 6 2 8 14 2 8 22 2 8 24 2 8 26 2 4 4 3 4 14 3 4 24 3 xmahjongg-3.7/share/layouts/dragon0000664000076400007640000000654207340502461014307 00000000000000Kyodai 3.0 Old Dragon 0000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000001010000000100000000000000000101010000000000000000010000000010000000000100000101000100010000000000000000000000000000000000000001010000000101000010100001000100000000010000000000000000010000000000001000010010100001010100000001000000000000000000010000000000000000000000000101010100010101000000100000000010000000000100000001000000000000000001010101000001000000000000000001010000000000000000010100000000000000000000000000010000000000000000001000000000010100000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000010100000000000000000000000001010100000000000000000100000000100000000001000000100001000100000000000000000000000000000000000000010100000001010000101000010001000000000000000000000000000100000000000010000100101000010101000000010000000000000000000100000000000000000000000001010101000101010000001000000000100000000001000000010000000000000000000101010000010000000000000000010100000000000000000101000000000000000000000000000100000000000000000010000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001010000000000000000000000000001010000000000000000000000000000000000000010000000000000000000000100000000000000000000001000100000000000000001000000100000000000000001000000000000000000000000001000000000000000100000010100000000000000000000000000000000000000000000000000000000010100100101000000000000000000000000000000000000000000000000000100000101000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 xmahjongg-3.7/share/layouts/wedges0000664000076400007640000000400206620343334014302 00000000000000# # wedges layout for xmahjongg # 0 24 0 0 22 0 0 20 0 2 22 0 6 26 0 0 18 0 2 20 0 8 26 0 0 16 0 2 18 0 4 20 0 8 24 0 10 26 0 0 14 0 2 16 0 4 18 0 10 24 0 12 26 0 0 12 0 2 14 0 4 16 0 6 18 0 10 22 0 12 24 0 0 10 0 2 12 0 4 14 0 6 16 0 12 22 0 0 8 0 2 10 0 4 12 0 6 14 0 8 16 0 12 20 0 0 6 0 2 8 0 4 10 0 6 12 0 8 14 0 0 4 0 2 6 0 4 8 0 6 10 0 8 12 0 10 14 0 12 14 0 14 16 0 14 14 0 14 12 0 6 2 0 8 4 0 10 6 0 12 8 0 8 2 0 10 4 0 12 6 0 10 2 0 12 4 0 12 2 0 0 22 1 0 20 1 0 18 1 2 20 1 8 26 1 0 16 1 2 18 1 10 26 1 0 14 1 2 16 1 4 18 1 10 24 1 12 26 1 0 12 1 2 14 1 4 16 1 12 24 1 0 10 1 2 12 1 4 14 1 6 16 1 12 22 1 0 8 1 2 10 1 4 12 1 6 14 1 0 6 1 2 8 1 4 10 1 6 12 1 8 14 1 14 15 1 14 13 1 8 2 1 10 4 1 12 6 1 10 2 1 12 4 1 12 2 1 0 20 2 0 18 2 2 20 2 0 16 2 2 18 2 10 26 2 0 14 2 2 16 2 4 18 2 12 26 2 0 12 2 2 14 2 4 16 2 12 24 2 0 10 2 2 12 2 4 14 2 6 16 2 0 8 2 2 10 2 4 12 2 6 14 2 14 14 2 10 2 2 12 4 2 12 2 2 0 18 3 0 16 3 2 18 3 0 14 3 2 16 3 12 26 3 0 12 3 2 14 3 4 16 3 0 10 3 2 12 3 4 14 3 12 2 3 0 16 4 0 14 4 2 16 4 0 12 4 2 14 4 0 14 5 xmahjongg-3.7/share/layouts/monkey0000664000076400007640000000233207340502461014330 00000000000000# `monkey' layout, from Chinese zodiac set # by Todd Michel McComb 0 0 0 0 2 0 0 4 0 0 6 0 0 18 0 0 20 0 0 28 0 2 0 0 2 6 0 2 8 0 2 10 0 2 16 0 2 18 0 2 26 0 2 28 0 4 0 0 4 2 0 4 10 0 4 12 0 4 14 0 4 16 0 4 26 0 6 8 0 6 10 0 6 12 0 6 14 0 6 16 0 6 18 0 6 20 0 6 26 0 7 6 0 8 8 0 8 10 0 8 12 0 8 14 0 8 16 0 8 20 0 8 22 0 8 26 0 10 0 0 10 2 0 10 10 0 10 14 0 10 22 0 10 26 0 12 2 0 12 8 0 12 10 0 12 14 0 12 18 0 12 22 0 12 24 0 12 26 0 14 2 0 14 4 0 14 6 0 14 8 0 14 14 0 14 16 0 14 18 0 0 2 1 0 4 1 1 0 1 1 6 1 1 18 1 1 28 1 2 8 1 2 10 1 2 16 1 3 0 1 3 26 1 4 10 1 4 12 1 4 14 1 4 16 1 5 26 1 6 8 1 6 10 1 6 12 1 6 14 1 6 16 1 6 18 1 7 20 1 7 26 1 8 8 1 8 10 1 8 12 1 8 14 1 8 16 1 9 22 1 9 26 1 10 10 1 11 2 1 11 14 1 11 22 1 11 26 1 12 10 1 12 24 1 13 2 1 13 8 1 14 4 1 14 6 1 14 15 1 14 17 1 0 3 2 2 0 2 4 10 2 4 12 2 4 14 2 4 16 2 4 26 2 6 9 2 6 11 2 6 13 2 6 15 2 6 17 2 6 26 2 8 10 2 8 12 2 8 14 2 8 16 2 8 26 2 10 22 2 10 26 2 12 2 2 14 5 2 14 16 2 4 10 3 4 12 3 4 14 3 4 16 3 5 26 3 6 10 3 6 12 3 6 14 3 6 16 3 7 26 3 8 10 3 8 12 3 8 14 3 8 16 3 9 26 3 6 26 4 8 26 4 xmahjongg-3.7/share/layouts/rooster0000664000076400007640000000232107340502461014521 00000000000000# `rooster' layout, from Chinese zodiac set # by Todd Michel McComb 0 0 0 0 13 0 0 15 0 0 17 0 0 19 0 0 21 0 0 24 0 0 26 0 0 28 0 2 1 0 2 3 0 2 12 0 2 14 0 2 16 0 2 18 0 2 24 0 4 2 0 4 4 0 4 6 0 4 8 0 4 10 0 4 12 0 4 14 0 4 16 0 4 22 0 4 24 0 4 26 0 4 28 0 5 20 0 6 0 0 6 2 0 6 4 0 6 8 0 6 10 0 6 12 0 6 14 0 6 16 0 6 18 0 6 22 0 6 24 0 6 28 0 7 20 0 8 3 0 8 10 0 8 12 0 8 14 0 8 16 0 8 18 0 8 22 0 8 24 0 9 26 0 10 10 0 10 12 0 10 16 0 10 18 0 11 26 0 11 28 0 12 8 0 12 10 0 12 16 0 12 18 0 14 4 0 14 6 0 14 8 0 14 18 0 14 20 0 0 14 1 0 16 1 0 18 1 0 20 1 0 25 1 0 27 1 2 2 1 2 13 1 2 15 1 2 17 1 2 24 1 4 2 1 4 4 1 4 10 1 4 12 1 4 14 1 4 16 1 4 22 1 4 24 1 5 8 1 5 28 1 6 2 1 6 4 1 6 10 1 6 12 1 6 14 1 6 16 1 6 18 1 6 20 1 6 22 1 6 24 1 8 10 1 8 12 1 8 14 1 8 16 1 8 18 1 8 22 1 8 24 1 10 26 1 12 9 1 12 17 1 14 5 1 14 7 1 14 19 1 0 15 2 0 17 2 0 19 2 2 14 2 2 16 2 3 24 2 4 2 2 4 4 2 4 12 2 4 14 2 5 10 2 5 16 2 5 22 2 5 24 2 6 2 2 6 4 2 6 12 2 6 14 2 7 10 2 7 16 2 7 18 2 7 22 2 7 24 2 8 12 2 8 14 2 14 6 2 5 3 3 5 12 3 5 14 3 6 16 3 6 23 3 7 12 3 7 14 3 6 13 4 xmahjongg-3.7/share/layouts/dog0000664000076400007640000000231607340502461013601 00000000000000# `dog' layout, from Chinese zodiac set # by Todd Michel McComb 0 10 0 0 12 0 0 14 0 0 16 0 0 18 0 2 2 0 2 4 0 2 6 0 2 8 0 2 10 0 2 12 0 2 14 0 2 16 0 2 18 0 2 20 0 2 22 0 2 24 0 2 26 0 4 0 0 4 2 0 4 4 0 4 8 0 4 10 0 4 14 0 4 18 0 4 20 0 4 24 0 4 26 0 4 28 0 6 0 0 6 2 0 6 4 0 6 8 0 6 10 0 6 12 0 6 14 0 6 16 0 6 18 0 6 20 0 6 24 0 6 26 0 6 28 0 8 2 0 8 4 0 8 10 0 8 12 0 8 16 0 8 18 0 8 24 0 8 26 0 10 2 0 10 4 0 10 10 0 10 12 0 10 14 0 10 16 0 10 18 0 10 24 0 10 26 0 12 14 0 14 12 0 14 14 0 0 10 1 0 12 1 0 14 1 0 16 1 0 18 1 2 3 1 2 5 1 2 10 1 2 12 1 2 14 1 2 16 1 2 18 1 2 23 1 2 25 1 3 8 1 3 20 1 4 1 1 4 3 1 4 10 1 4 14 1 4 18 1 4 25 1 4 27 1 5 8 1 5 20 1 6 1 1 6 3 1 6 10 1 6 12 1 6 14 1 6 16 1 6 18 1 6 25 1 6 27 1 8 3 1 8 10 1 8 12 1 8 16 1 8 18 1 8 25 1 10 3 1 10 10 1 10 12 1 10 14 1 10 16 1 10 18 1 10 25 1 0 13 2 0 15 2 2 4 2 2 10 2 2 12 2 2 14 2 2 16 2 2 18 2 2 24 2 4 2 2 4 8 2 4 10 2 4 14 2 4 18 2 4 20 2 4 26 2 6 2 2 6 10 2 6 12 2 6 14 2 6 16 2 6 18 2 6 26 2 8 11 2 8 17 2 10 11 2 10 13 2 10 15 2 10 17 2 2 11 3 2 13 3 2 15 3 2 17 3 4 9 3 4 19 3 xmahjongg-3.7/share/layouts/snake0000664000076400007640000000235607340502462014136 00000000000000# `snake' layout, from Chinese zodiac set # by Todd Michel McComb 0 7 0 0 9 0 0 19 0 0 21 0 2 4 0 2 6 0 2 8 0 2 10 0 2 12 0 2 16 0 2 18 0 2 20 0 2 22 0 2 24 0 4 3 0 4 5 0 4 10 0 4 12 0 4 16 0 4 18 0 4 22 0 4 24 0 6 0 0 6 2 0 6 4 0 6 10 0 6 12 0 6 16 0 6 18 0 6 22 0 6 24 0 8 0 0 8 2 0 8 8 0 8 10 0 8 12 0 8 16 0 8 18 0 8 22 0 8 24 0 9 26 0 9 28 0 10 8 0 10 10 0 10 12 0 10 14 0 10 16 0 10 18 0 10 22 0 10 24 0 12 8 0 12 10 0 12 12 0 12 14 0 12 16 0 12 18 0 14 10 0 14 12 0 14 14 0 14 16 0 0 7 1 0 9 1 0 19 1 0 21 1 2 4 1 2 6 1 2 8 1 2 10 1 2 12 1 2 16 1 2 18 1 2 20 1 2 22 1 2 24 1 4 3 1 4 5 1 4 10 1 4 12 1 4 16 1 4 18 1 4 22 1 4 24 1 6 0 1 6 2 1 6 4 1 6 10 1 6 12 1 6 16 1 6 18 1 6 22 1 6 24 1 8 0 1 8 2 1 8 8 1 8 10 1 8 12 1 8 16 1 8 18 1 8 22 1 8 24 1 9 26 1 10 8 1 10 10 1 10 12 1 10 14 1 10 16 1 10 18 1 10 22 1 10 24 1 12 8 1 12 10 1 12 12 1 12 14 1 12 16 1 12 18 1 14 11 1 14 13 1 14 15 1 4 11 2 4 17 2 6 11 2 6 17 2 7 1 2 8 11 2 8 17 2 10 8 2 10 10 2 10 12 2 10 14 2 10 16 2 10 18 2 12 8 2 12 10 2 12 12 2 12 14 2 12 16 2 12 18 2 14 12 2 14 14 2 11 9 3 11 11 3 11 13 3 11 15 3 11 17 3 xmahjongg-3.7/share/layouts/boar0000664000076400007640000000214007340502461013746 00000000000000# `boar' layout, from Chinese zodiac set # by Todd Michel McComb 0 14 0 2 0 0 2 2 0 2 4 0 2 10 0 2 12 0 2 14 0 2 16 0 2 18 0 2 24 0 2 26 0 2 28 0 4 0 0 4 4 0 4 12 0 4 14 0 4 16 0 4 24 0 4 28 0 6 0 0 6 10 0 6 12 0 6 14 0 6 16 0 6 18 0 6 28 0 8 0 0 8 2 0 8 6 0 8 8 0 8 10 0 8 12 0 8 14 0 8 16 0 8 18 0 8 20 0 8 22 0 8 26 0 8 28 0 10 0 0 10 2 0 10 4 0 10 6 0 10 8 0 10 12 0 10 14 0 10 16 0 10 20 0 10 22 0 10 24 0 10 26 0 10 28 0 12 2 0 12 4 0 12 6 0 12 10 0 12 12 0 12 14 0 12 16 0 12 18 0 12 22 0 12 24 0 12 26 0 14 13 0 14 15 0 2 1 1 2 3 1 2 12 1 2 14 1 2 16 1 2 25 1 2 27 1 4 12 1 4 14 1 4 16 1 5 0 1 5 28 1 6 10 1 6 12 1 6 14 1 6 16 1 6 18 1 7 0 1 7 28 1 8 10 1 8 12 1 8 14 1 8 16 1 8 18 1 10 1 1 10 3 1 10 5 1 10 7 1 10 12 1 10 14 1 10 16 1 10 21 1 10 23 1 10 25 1 10 27 1 12 3 1 12 5 1 12 12 1 12 14 1 12 16 1 12 23 1 12 25 1 14 14 1 2 2 2 2 13 2 2 15 2 2 26 2 4 13 2 4 15 2 6 0 2 6 11 2 6 13 2 6 15 2 6 17 2 6 28 2 8 11 2 8 13 2 8 15 2 8 17 2 10 2 2 10 4 2 10 6 2 10 13 2 10 15 2 10 22 2 10 24 2 10 26 2 12 4 2 12 13 2 12 15 2 12 24 2 2 14 3 4 14 3 6 13 3 6 15 3 8 13 3 8 15 3 10 14 3 12 14 3 xmahjongg-3.7/share/layouts/arrow0000664000076400007640000000174306620343331014164 00000000000000# row col lev 1 0 0 3 0 0 5 0 0 7 0 0 9 0 0 11 0 0 13 0 0 1 2 0 1 4 0 1 6 0 1 8 0 1 10 0 1 12 0 3 12 0 5 12 0 7 12 0 9 12 0 11 12 0 13 12 0 13 2 0 13 4 0 13 6 0 13 8 0 13 10 0 2 0 1 4 0 1 6 0 1 8 0 1 10 0 1 12 0 1 1 2 1 1 4 1 1 6 1 1 8 1 1 10 1 2 12 1 4 12 1 6 12 1 8 12 1 10 12 1 12 12 1 13 2 1 13 4 1 13 6 1 13 8 1 13 10 1 3 0 2 5 0 2 7 0 2 9 0 2 11 0 2 3 12 2 5 12 2 9 12 2 11 12 2 1 3 2 1 5 2 1 7 2 1 9 2 13 3 2 13 5 2 13 7 2 13 9 2 4 3 0 6 3 0 8 3 0 10 3 0 10 5 0 10 7 0 10 9 0 8 9 0 6 9 0 4 9 0 4 7 0 4 5 0 4 5 1 4 7 1 5 9 1 7 9 1 9 9 1 10 7 1 10 5 1 9 3 1 7 3 1 5 3 1 7 6 0 5 14 0 7 14 0 9 14 0 6 16 0 8 16 0 6 14 1 8 14 1 7 18 0 7 20 0 7 22 0 7 24 0 7 26 0 7 28 0 7 30 0 7 16 1 7 18 1 7 20 1 7 22 1 7 24 1 7 26 1 7 28 1 7 30 1 7 13 2 7 15 2 7 17 2 7 19 2 7 21 2 7 23 2 7 25 2 7 27 2 5 21 0 5 23 0 5 25 0 3 21 0 9 21 0 9 23 0 9 25 0 11 21 0 5 21 1 5 23 1 5 25 1 3 21 1 9 21 1 9 23 1 9 25 1 11 21 1 0 19 0 1 21 0 2 23 0 3 25 0 4 27 0 5 29 0 9 29 0 10 27 0 11 25 0 12 23 0 13 21 0 14 19 0 xmahjongg-3.7/share/layouts/deepwell0000664000076400007640000000171406620343332014632 000000000000000 2 0 0 4 0 0 6 0 0 8 0 0 10 0 0 12 0 2 0 0 4 0 0 6 0 0 8 0 0 10 0 0 12 0 0 2 14 0 4 14 0 6 14 0 8 14 0 10 14 0 12 14 0 14 2 0 14 4 0 14 6 0 14 8 0 14 10 0 14 12 0 2 2 0 2 4 0 2 6 0 2 8 0 2 10 0 2 12 0 4 2 0 4 12 0 6 2 0 6 12 0 8 2 0 8 12 0 10 2 0 10 12 0 12 2 0 12 4 0 12 6 0 12 8 0 12 10 0 12 12 0 4 4 0 4 6 0 4 8 0 4 10 0 6 4 0 6 10 0 8 4 0 8 10 0 10 4 0 10 6 0 10 8 0 10 10 0 2 2 1 2 4 1 2 6 1 2 8 1 2 10 1 2 12 1 4 2 1 4 12 1 6 2 1 6 12 1 8 2 1 8 12 1 10 2 1 10 12 1 12 2 1 12 4 1 12 6 1 12 8 1 12 10 1 12 12 1 4 4 1 4 6 1 4 8 1 4 10 1 6 4 1 6 10 1 8 4 1 8 10 1 10 4 1 10 6 1 10 8 1 10 10 1 2 2 2 2 4 2 2 6 2 2 8 2 2 10 2 2 12 2 4 2 2 4 12 2 6 2 2 6 12 2 8 2 2 8 12 2 10 2 2 10 12 2 12 2 2 12 4 2 12 6 2 12 8 2 12 10 2 12 12 2 4 4 2 4 6 2 4 8 2 4 10 2 6 4 2 6 10 2 8 4 2 8 10 2 10 4 2 10 6 2 10 8 2 10 10 2 4 4 3 4 6 3 4 8 3 4 10 3 6 4 3 6 10 3 8 4 3 8 10 3 10 4 3 10 6 3 10 8 3 10 10 3 4 4 4 4 6 4 4 8 4 4 10 4 6 4 4 6 10 4 8 4 4 8 10 4 10 4 4 10 6 4 10 8 4 10 10 4 xmahjongg-3.7/share/layouts/default0000664000076400007640000000354106620343332014455 00000000000000# # default layout for Xmahjongg # # row col lev #-----------------------------------------------------------------------------# 0 2 0 0 4 0 0 6 0 0 8 0 0 10 0 0 12 0 0 14 0 0 16 0 0 18 0 0 20 0 0 22 0 0 24 0 2 6 0 2 8 0 2 10 0 2 12 0 2 14 0 2 16 0 2 18 0 2 20 0 4 4 0 4 6 0 4 8 0 4 10 0 4 12 0 4 14 0 4 16 0 4 18 0 4 20 0 4 22 0 6 2 0 6 4 0 6 6 0 6 8 0 6 10 0 6 12 0 6 14 0 6 16 0 6 18 0 6 20 0 6 22 0 6 24 0 7 0 0 7 26 0 7 28 0 8 2 0 8 4 0 8 6 0 8 8 0 8 10 0 8 12 0 8 14 0 8 16 0 8 18 0 8 20 0 8 22 0 8 24 0 10 4 0 10 6 0 10 8 0 10 10 0 10 12 0 10 14 0 10 16 0 10 18 0 10 20 0 10 22 0 12 6 0 12 8 0 12 10 0 12 12 0 12 14 0 12 16 0 12 18 0 12 20 0 14 2 0 14 4 0 14 6 0 14 8 0 14 10 0 14 12 0 14 14 0 14 16 0 14 18 0 14 20 0 14 22 0 14 24 0 #-----------------------------------------------------------------------------# 2 8 1 2 10 1 2 12 1 2 14 1 2 16 1 2 18 1 4 8 1 4 10 1 4 12 1 4 14 1 4 16 1 4 18 1 6 8 1 6 10 1 6 12 1 6 14 1 6 16 1 6 18 1 8 8 1 8 10 1 8 12 1 8 14 1 8 16 1 8 18 1 10 8 1 10 10 1 10 12 1 10 14 1 10 16 1 10 18 1 12 8 1 12 10 1 12 12 1 12 14 1 12 16 1 12 18 1 #-----------------------------------------------------------------------------# 4 10 2 4 12 2 4 14 2 4 16 2 6 10 2 6 12 2 6 14 2 6 16 2 8 10 2 8 12 2 8 14 2 8 16 2 10 10 2 10 12 2 10 14 2 10 16 2 #-----------------------------------------------------------------------------# 6 12 3 6 14 3 8 12 3 8 14 3 #-----------------------------------------------------------------------------# 7 13 4 xmahjongg-3.7/share/layouts/theater0000664000076400007640000000176006620343333014467 00000000000000# row col lev 0 22 2 2 24 2 12 22 2 10 24 2 0 2 2 2 0 2 12 2 2 10 0 2 0 4 2 2 2 2 4 0 2 12 4 2 10 2 2 8 0 2 0 20 2 2 22 2 4 24 2 12 20 2 10 22 2 8 24 2 0 0 1 12 0 1 0 24 1 12 24 1 0 22 1 2 24 1 12 22 1 10 24 1 0 2 1 2 0 1 12 2 1 10 0 1 0 4 1 2 2 1 4 0 1 12 4 1 10 2 1 8 0 1 0 20 1 2 22 1 4 24 1 12 20 1 10 22 1 8 24 1 0 18 1 2 20 1 4 22 1 6 24 1 8 22 1 10 20 1 12 18 1 0 6 1 2 4 1 4 2 1 6 0 1 12 6 1 10 4 1 8 2 1 0 0 0 12 0 0 0 24 0 12 24 0 0 22 0 2 24 0 12 22 0 10 24 0 0 2 0 2 0 0 12 2 0 10 0 0 0 4 0 2 2 0 4 0 0 12 4 0 10 2 0 8 0 0 0 20 0 2 22 0 4 24 0 12 20 0 10 22 0 8 24 0 0 18 0 2 20 0 4 22 0 6 24 0 8 22 0 10 20 0 12 18 0 0 6 0 2 4 0 4 2 0 6 0 0 12 6 0 10 4 0 8 2 0 0 8 0 2 6 0 4 4 0 6 2 0 12 8 0 10 6 0 8 4 0 0 16 0 2 18 0 4 20 0 6 22 0 8 20 0 10 18 0 12 16 0 2 10 0 2 12 0 2 14 0 4 12 0 6 10 0 6 12 0 6 14 0 8 12 0 10 10 0 10 12 0 10 14 0 2 12 1 6 12 1 10 12 1 0 12 0 4 8 0 4 10 0 4 10 1 4 12 1 4 14 0 4 14 1 4 16 0 6 6 0 6 8 0 6 16 0 6 18 0 8 8 0 8 10 0 8 10 1 8 12 1 8 14 0 8 14 1 8 16 0 12 12 0 xmahjongg-3.7/share/layouts/papillon0000664000076400007640000000201206620343333014640 00000000000000# row col lev 6 0 0 8 0 0 10 0 0 5 2 0 7 2 0 9 2 0 11 2 0 2 4 0 4 4 0 6 4 0 8 4 0 10 4 0 12 4 0 14 4 0 3 6 0 13 6 0 4 8 0 12 8 0 3 10 0 5 10 0 11 10 0 13 10 0 2 12 0 6 12 0 10 12 0 14 12 0 1 14 0 7 14 0 9 14 0 15 14 0 0 16 0 8 16 0 16 16 0 1 18 0 7 18 0 9 18 0 15 18 0 2 20 0 6 20 0 10 20 0 14 20 0 3 22 0 5 22 0 11 22 0 13 22 0 4 24 0 12 24 0 3 26 0 13 26 0 2 28 0 4 28 0 6 28 0 8 28 0 10 28 0 12 28 0 14 28 0 5 30 0 7 30 0 9 30 0 11 30 0 6 32 0 8 32 0 10 32 0 6 0 1 8 0 1 10 0 1 5 2 1 7 2 1 9 2 1 11 2 1 2 4 1 4 4 1 6 4 1 8 4 1 10 4 1 12 4 1 14 4 1 3 6 1 13 6 1 4 8 1 12 8 1 3 10 1 5 10 1 11 10 1 13 10 1 2 12 1 6 12 1 10 12 1 14 12 1 1 14 1 7 14 1 9 14 1 15 14 1 0 16 1 8 16 1 16 16 1 1 18 1 7 18 1 9 18 1 15 18 1 2 20 1 6 20 1 10 20 1 14 20 1 3 22 1 5 22 1 11 22 1 13 22 1 4 24 1 12 24 1 3 26 1 13 26 1 2 28 1 4 28 1 6 28 1 8 28 1 10 28 1 12 28 1 14 28 1 5 30 1 7 30 1 9 30 1 11 30 1 6 32 1 8 32 1 10 32 1 7 1 2 9 1 2 7 3 2 9 3 2 3 5 2 4 9 2 13 5 2 12 9 2 8 15 2 8 17 2 4 23 2 12 23 2 3 27 2 13 27 2 7 29 2 9 29 2 7 31 2 9 31 2 xmahjongg-3.7/share/layouts/hourglass0000664000076400007640000000174706620343333015047 00000000000000# row col lev 0 0 0 0 2 0 0 4 0 0 6 0 0 8 0 0 10 0 0 12 0 0 14 0 0 16 0 0 18 0 0 20 0 0 22 0 0 24 0 14 0 0 14 2 0 14 4 0 14 6 0 14 8 0 14 10 0 14 12 0 14 14 0 14 16 0 14 18 0 14 20 0 14 22 0 14 24 0 2 0 0 4 0 0 6 0 0 8 0 0 10 0 0 12 0 0 2 12 0 4 12 0 6 12 0 8 12 0 10 12 0 12 12 0 2 24 0 4 24 0 6 24 0 8 24 0 10 24 0 12 24 0 1 0 1 3 0 1 5 0 1 7 0 1 9 0 1 11 0 1 13 0 1 1 24 1 3 24 1 5 24 1 7 24 1 9 24 1 11 24 1 13 24 1 2 0 2 4 0 2 6 0 2 8 0 2 10 0 2 12 0 2 3 0 3 5 0 3 7 0 3 9 0 3 11 0 3 4 0 4 6 0 4 8 0 4 10 0 4 2 24 2 4 24 2 6 24 2 8 24 2 10 24 2 12 24 2 3 24 3 5 24 3 7 24 3 9 24 3 11 24 3 4 24 4 6 24 4 8 24 4 10 24 4 3 2 0 5 2 0 7 2 0 9 2 0 11 2 0 4 4 0 6 4 0 8 4 0 10 4 0 5 6 0 7 6 0 9 6 0 6 8 0 8 8 0 7 10 0 7 14 0 6 16 0 8 16 0 5 18 0 7 18 0 9 18 0 4 20 0 6 20 0 8 20 0 10 20 0 3 22 0 5 22 0 7 22 0 9 22 0 11 22 0 4 2 1 6 2 1 8 2 1 10 2 1 5 4 1 7 4 1 9 4 1 6 6 1 8 6 1 7 8 1 7 10 1 7 14 1 7 16 1 6 18 1 8 18 1 5 20 1 7 20 1 9 20 1 4 22 1 6 22 1 8 22 1 10 22 1 1 12 1 3 12 1 13 12 1 11 12 1 xmahjongg-3.7/share/layouts/arena0000664000076400007640000000176306620343331014122 00000000000000# row col lev 0 0 4 12 0 4 0 24 4 12 24 4 0 0 3 12 0 3 0 24 3 12 24 3 0 22 3 2 24 3 12 22 3 10 24 3 0 2 3 2 0 3 12 2 3 10 0 3 0 0 2 12 0 2 0 24 2 12 24 2 0 22 2 2 24 2 12 22 2 10 24 2 0 2 2 2 0 2 12 2 2 10 0 2 0 4 2 2 2 2 4 0 2 12 4 2 10 2 2 8 0 2 0 20 2 2 22 2 4 24 2 12 20 2 10 22 2 8 24 2 0 0 1 12 0 1 0 24 1 12 24 1 0 22 1 2 24 1 12 22 1 10 24 1 0 2 1 2 0 1 12 2 1 10 0 1 0 4 1 2 2 1 4 0 1 12 4 1 10 2 1 8 0 1 0 20 1 2 22 1 4 24 1 12 20 1 10 22 1 8 24 1 0 18 1 2 20 1 4 22 1 6 24 1 8 22 1 10 20 1 12 18 1 0 6 1 2 4 1 4 2 1 6 0 1 12 6 1 10 4 1 8 2 1 0 0 0 12 0 0 0 24 0 12 24 0 0 22 0 2 24 0 12 22 0 10 24 0 0 2 0 2 0 0 12 2 0 10 0 0 0 4 0 2 2 0 4 0 0 12 4 0 10 2 0 8 0 0 0 20 0 2 22 0 4 24 0 12 20 0 10 22 0 8 24 0 0 18 0 2 20 0 4 22 0 6 24 0 8 22 0 10 20 0 12 18 0 0 6 0 2 4 0 4 2 0 6 0 0 12 6 0 10 4 0 8 2 0 0 8 0 2 6 0 4 4 0 6 2 0 12 8 0 10 6 0 8 4 0 0 16 0 2 18 0 4 20 0 6 22 0 8 20 0 10 18 0 12 16 0 2 10 0 2 12 0 2 14 0 4 12 0 6 10 0 6 12 0 6 14 0 8 12 0 10 10 0 10 12 0 10 14 0 2 12 1 6 12 1 10 12 1 xmahjongg-3.7/share/layouts/ox0000664000076400007640000000232307340502461013454 00000000000000# `ox' layout, from Chinese zodiac set # by Todd Michel McComb 0 4 0 0 6 0 0 24 0 0 26 0 2 4 0 2 6 0 2 8 0 2 10 0 2 20 0 2 22 0 2 24 0 2 26 0 3 14 0 4 1 0 4 6 0 4 8 0 4 10 0 4 12 0 4 16 0 4 18 0 4 20 0 4 22 0 4 24 0 5 14 0 6 2 0 6 4 0 6 6 0 6 8 0 6 10 0 6 12 0 6 16 0 6 18 0 6 20 0 6 22 0 6 24 0 7 0 0 7 14 0 7 26 0 8 2 0 8 4 0 8 6 0 8 8 0 8 10 0 8 12 0 8 16 0 8 18 0 8 20 0 8 22 0 8 24 0 9 14 0 10 1 0 10 6 0 10 8 0 10 10 0 10 12 0 10 16 0 10 18 0 10 20 0 10 22 0 10 24 0 11 14 0 12 4 0 12 6 0 12 8 0 12 10 0 12 20 0 12 22 0 12 24 0 12 26 0 14 4 0 14 6 0 14 24 0 14 26 0 1 5 1 1 25 1 4 8 1 4 10 1 4 12 1 4 14 1 4 16 1 4 18 1 4 20 1 4 22 1 6 2 1 6 4 1 6 6 1 6 8 1 6 10 1 6 12 1 6 14 1 6 16 1 6 18 1 6 20 1 6 22 1 6 24 1 8 2 1 8 4 1 8 6 1 8 8 1 8 10 1 8 12 1 8 14 1 8 16 1 8 18 1 8 20 1 8 22 1 8 24 1 10 8 1 10 10 1 10 12 1 10 14 1 10 16 1 10 18 1 10 20 1 10 22 1 13 5 1 13 25 1 4 14 2 4 16 2 4 18 2 6 10 2 6 12 2 6 14 2 6 16 2 6 18 2 6 20 2 6 22 2 7 2 2 8 10 2 8 12 2 8 14 2 8 16 2 8 18 2 8 20 2 8 22 2 10 14 2 10 16 2 10 18 2 6 14 3 6 16 3 6 18 3 8 14 3 8 16 3 8 18 3 xmahjongg-3.7/share/layouts/bridge0000664000076400007640000000516206620343331014265 00000000000000# # bridge layout for Xmahjongg # #-----------------------------------------------------------------------------# 0 1 0 2 1 0 4 1 0 6 1 0 8 1 0 10 1 0 12 1 0 14 1 0 0 1 1 2 1 1 4 1 1 6 1 1 8 1 1 10 1 1 12 1 1 14 1 1 0 1 2 2 1 2 4 1 2 6 1 2 8 1 2 10 1 2 12 1 2 14 1 2 0 1 3 2 1 3 4 1 3 6 1 3 8 1 3 10 1 3 12 1 3 14 1 3 #-----------------------------------------------------------------------------# 0 27 0 2 27 0 4 27 0 6 27 0 8 27 0 10 27 0 12 27 0 14 27 0 0 27 1 2 27 1 4 27 1 6 27 1 8 27 1 10 27 1 12 27 1 14 27 1 0 27 2 2 27 2 4 27 2 6 27 2 8 27 2 10 27 2 12 27 2 14 27 2 0 27 3 2 27 3 4 27 3 6 27 3 8 27 3 10 27 3 12 27 3 14 27 3 #-----------------------------------------------------------------------------# 2 3 0 4 3 0 6 3 0 8 3 0 10 3 0 12 3 0 2 3 1 4 3 1 6 3 1 8 3 1 10 3 1 12 3 1 2 3 2 4 3 2 6 3 2 8 3 2 10 3 2 12 3 2 #-----------------------------------------------------------------------------# 2 25 0 4 25 0 6 25 0 8 25 0 10 25 0 12 25 0 2 25 1 4 25 1 6 25 1 8 25 1 10 25 1 12 25 1 2 25 2 4 25 2 6 25 2 8 25 2 10 25 2 12 25 2 #-----------------------------------------------------------------------------# 4 5 0 6 5 0 8 5 0 10 5 0 4 5 1 6 5 1 8 5 1 10 5 1 #-----------------------------------------------------------------------------# 4 23 0 6 23 0 8 23 0 10 23 0 4 23 1 6 23 1 8 23 1 10 23 1 #-----------------------------------------------------------------------------# 6 7 0 8 7 0 #-----------------------------------------------------------------------------# 6 21 0 8 21 0 #-----------------------------------------------------------------------------# 7 9 0 7 11 0 7 13 0 7 15 0 7 17 0 7 19 0 #-----------------------------------------------------------------------------# 7 10 1 7 12 1 7 14 1 7 16 1 7 18 1 #-----------------------------------------------------------------------------# 7 11 2 7 13 2 7 15 2 7 17 2 #-----------------------------------------------------------------------------# 7 12 3 7 14 3 7 16 3 #-----------------------------------------------------------------------------# 7 13 4 7 15 4 #-----------------------------------------------------------------------------# 7 14 5 #-----------------------------------------------------------------------------# 5 13 0 5 15 0 9 14 0 xmahjongg-3.7/share/tiles/0000777000076400007640000000000010213403362012576 500000000000000xmahjongg-3.7/share/tiles/thin.gif0000664000076400007640000004661507027227225014174 00000000000000GIF89aDD/OOpwdi̠R-Up֥**pjZH=p##! NETSCAPE2.0! base-bamboo!,DD0Ik[F`($yel@omױwGń1hPv<3nof2VV7<)v>\{/0~=WM^.!|yvspmifc_gRÌT%`ɓΖљSl ];*AM4Hp*\a kHE18ǏNI #!base-character!,DD0Ik[V`($yel@omױwGń1hPv<3nof2VV7<)v>\{/0~=WM^.!|yvspmifc_gRÌT%`ɓΖљSl ];*AM4Hp*\a kHE18ǏNI #!base-dot!,DD0Ik[f`($yel@omױwGń1hPv<3nof2VV7<)v>\{/0~=WM^.!|yvspmifc_gRÌT%`ɓΖљSl ];*AM4Hp*\a kHE18ǏNI #! base-dragon!,DD0Ik[v`($yel@omױwGń1hPv<3nof2VV7<)v>\{/0~=WM^.!|yvspmifc_gRÌT%`ɓΖљSl ];*AM4Hp*\a kHE18ǏNI #! base-flower!,DD0 8{ 5THih,0tm@(w9l+Q!<2.X՚Dش ٛ^n6X;>3~FSsM78E_Uf6)'%~{xuqnkgoZ˔\-hћ֞١[teC2IU@AuD\pÇ#JHb  ȱGA۸ɓ^rK +#!obscured!,DD0 8{ 5TIih,0tm@(w9l+Q!<2.X՚Dش ٛ^n6X;>3~FSsM78E_Uf6)'%~{xuqnkgoZ˔\-hћ֞١[t eC2IU@AuD\pÇ#JHb  ȱGA۸ɓ^rK +#! base-season!,DD0 8{ 5TJih,0tm@(w9l+Q!<2.X՚Dش ٛ^n6X;>3~FSsM78E_Uf6)'%~{xuqnkgoZ˔\-hћ֞١[t eC2IU@AuD\pÇ#JHb  ȱGA۸ɓ^rK +#! base-wind!,DD0 8{ 5TKih,0tm@(w9l+Q!<2.X՚Dش ٛ^n6X;>3~FSsM78E_Uf6)'%~{xuqnkgoZ˔\-hћ֞١[t eC2IU@AuD\pÇ#JHb  ȱGA۸ɓ^rK +#!selected!,DD0 8{ 5TLih,0tm@(w9l+Q!<2.X՚Dش ٛ^n6X;>3~FSsM78E_Uf6)'%~{xuqnkgoZ˔\-hћ֞١[t eC2IU@AuD\pÇ#JHb  ȱGA۸ɓ^rK +#!season-1!,@@PI8ͻ`(dihV @C)1'B/VqISfDF7G*]Aa8s<I [~x012w5{7VdQa?PzWYZYj*if7A\Ygvv`neaal:ns~nLu}/AL6@;SZ~K^SݪٓKW}kQńI,P;)!9AM#Ǐ hH4R^muJ0M$-&ʙ.W7FĻIt'M2`y2e%ʉP(m`tR2=EN`$[+Qzbݻx!season-2!,@@` dihlp,tmxw+Pjљ"@lu|RHO%M~"Cƀl‰2uNSd(Mh]:(Sg_ .7; $ũ FnAa,{:l7,UT2%)a6/HK֯ÈkF2dBH[,L$2ˎ?y9)>n zew,M4ר!c1$;;vϬ9.{wͯ;Ҝ/G1)'ν!season-3!,@@` dihlp,tmx|pH,HD!#Xls+]nశ:bqFdFyZjuRk@ual|JrxBfp{}=Joq:"h6QVYnN9PZ$ŝvDQc%f~Wz?kqS\.) nܰr׌R s%b|+ 6d(b- c|x#ɏ9r%%Ɨ&GDRE'L2(У.[Zg&Cn.HիX !season-4!,@@ dihlp,tmj*遞 r)P2]@sEVKdvWRw*ꊊdliS֊KyOM]FS_ygY~\u[}n\ANF_O_e?uW;lL;nu}le•h4awk(P|3@kݼl/'Ž&`e:κQr'+aӆt :1<)""P0 cDq-$GDJH/fI3qں)1̜?YO q$hJ#ab*JͪЮ`îYdӖE,["Ժ+mܵlͶśw]{coھwE?kq߿ wdF%`9i԰=cv75Iݢg֤+w.ȓ!flower-1!,@@` dihlp,tmxN7<7 >8ĢrXElG-%EVEF]/~bm܋WwD:cuxoQ8Z[x_vtk6Rppnr#;t`dF$3gcCe&~1hiP&iSɸIvͣN? ;%0+t'Q,.$D *-Ԑ\`?l.Mhq=(vzkYdx$Uϴu39uo|Rz}3 AeWBrmCB:( #1/20<U-+*01.loŝɾjóҾ&F༭ӖDٲK8 FEU̘K;rDxПEVG"dH`4C>eHsȢo,YO+YJ~HådIPxRRʠfKB(T{[ٷ BVq3dL^Q ,D!7uŠf+"(QȂU2*EUrlCQ7. ^ Ḫtqh0\GT͚vO#́RRN" m-$nͺ?]!o}RLonu+l¾w{p5WBM?: նJ<  vhhWćp'p7wE4h8"j Fc8 zٶ"$|%-]#"sΜ !ƴؑK[D g9%yc3uDԧ;Kɴc~"̫8&gSYǖ3[&Uk{Яa3r Y Lx?|"V 1U0*qe{m1:_!gƝI~whCD{E8]~Ƞ `vQއ J(pht*ryRwЈ}zFH_&-(TS2 cC~9$!ih*!dragon-1!,@@0I8ͻ`(dihl뾰8N M)5++!Hi|KN)6bc~׉v+MV؂kqEsthp6OnoIw^(x>E2iJ4|Oyl`d9!4b}pĺKǥ Zl&r~% #K6c%uw-\)/3[uo0irL-^D*=ir(B*VKڨT{&|U+ PNCh(fC5oӼDrŞY<ᴪػNw=,ʘ3k̹ϠC_!dragon-2!,@@ dihlp,tmx|]0$*mL$e2RiJ"ܚ4li, T~F}wYtCZ%WxA|H(^S:l%$?(>Yz<);YI+#$$@^Tp~(QX[ACZS&`E^"c|t\ø"Ծdmr-.50TȏaBA6R$NxǏ CII!!dragon-3!,@@ڋ޼ Hi>@B,m- < UKJ*$`dIԪڃj ?#Ny]˿ 67 OuvX8eX(hׅiHH9ɕi詶69J @V*) {Kʋ˧{lE*j8< mW[\wl}ș-m-M`~,^~\<[N=N<~AOA .CPCԍXO'G,kFnZ 'e8Õ+C< rAdР3r$:4)=65ԩTZC!wind-1!,@@` dihlp,tmx08 w=#KJe-) eZXTE~Y5ix]v+7X:IKx6l'~~mqd(~"}?d`i}vL|z&kU"'}%P$*kXYLZ+r|7#%1'jt6ƶb0t:E(- 4>!Ѧ9GF\F?Z Ads1RlBAt4i&Y4g/_]sbH [4Gw[T:k!'e:$fOO"󡬘 crXJݻx˷߿ L!!wind-2!,@@` dihlp,tmx@O4 Ec.Up& Py2BV4m-[HThbUFrfb~-e}3\642^^e*Uw%w=|/,_&os&T^u_>fUnQDgU+rӊ'&˳M"eߋ(đ+ty6h^q$QP n)W@)kW[M,C^J[R'}5D)VrRbDz҅B Xjʵׯ`Êu!wind-3!,@@` dihlp,tmx@',"2-''e:Qtظ^eU&Ab_pLjv>Oe{_sf~) N'i*("dy% 'n&rSʳ #y"ʭ'|߸&ֵvǣ(xgO?c"28PBA|!i /r$ҩR6^  #?9t2PQx->Q8#MY\ 4yэE1|ȁ墦*LBJիX!wind-4!,@@` dihlp,tmxP 0#aq{>f}NuPjf*89ڎ] h>p E~x9WPyz|#~yLcPfsHmkr3wR0;=4/0**ƶSM>M'K&$$[(&%#= 'p"՘qDKlIC"JGn[uPX>}$%ytRk,`w掛ܙgLK9 @јlیk ձx,a("҄U4jR0zM Х`&oˆ+^̸ǐ#K!dot-1!,@@` dihlp,tmxH#2`lzKacJ _Пt4Z*p@c6'\.fmǓp"]RK~ iv^B:| HMI~#a#J9uQ-(b%V0(4h8<(c!dot-2!,@@` dihlp,tmx~|ľ{K)bȨQr:ucyeuq-B&gN[n--<-p|^77coh){5tI~T%W|S(A0tOU}'l}xD>ɵnмSvUI>\Ry^b瞜z#gRĹE<ө6Svxwh{9O(v|>uLhUsH+=z,ipoq^^A[udTU~lTV=m\Y$\F&= KwAz+hh"lD V.{8=oÔ{2l>d xlg5@JS Q7 hR\K=@jԧVz5ҩV{T h^ QUpUv-ܴVF4k\mśWjٺk:ֱL]jY Ng9zYG鹴ӨS!dot-4!,@@` dihlp,tmxo ;;.6g4Q+6|x[WPC&IOw ~p3PjZNum*z~0+zQ`T@fAr4 ( 3&A)ˤҒ֎#٘Vx}}MvW}|lqI\!(*\ȰÇ#JrTcae(7F#{8ƣRr"_v vRb0QG4\26tbys3nDoȵK#͞LTqjTSl9tS]VV-"Bvʎym,)q>t0O̹ϠCMC!dot-5!,@@` dihlp,tmx@',2''-k#p<`pu {1 `nwm6k-v'{eo)T{{dzg7*x6g^b(gp{wǓXq$tCϟQ̿OJ?%SG>/==ydP@CHx5t8.>)Fa]JCYHy QW@ʤUYT`Qi8q> Ckj*ݜǐ#KL˘3k̙F!dot-6!,@@` dihlp,tmx@O4 2GPsR]VSq9t ۳\6eqդzwu(uJaadx7n'fFZf{am)p|PhmySO/YX~ؿBۓ4=٭=1 ӆ})|'  j#?L=48SŅQJ>|JdW{*^d^LLjۂцXݼz{Y=vR8-+j`&H[{B3k̹gf!!dot-7!,@@` dihlp,tmx<` )?rƥNhƞ^4ɤ̭z]ϰx|Z1; :Zf>x;-`kdU(o2`<[<&Pe;R=@])eJn=϶Uο'³nv_h@bDhYtWjNdjPkb5n"3 <_oHeh1\yz{M}paYe0{kS`Y7p6x|rv^@m"@rt:j]dbsfGi]O҉TE3FDC>[;i'O<MA(T. #9H‹ , 21|H0]2\EA0 !̟23Ҕ;5AƧ1g)ИPDDr֗]$㱏@B 䖈n=RdJBEWǐ#KLr⾋7Aw@P;{5ҰO Ap)h=K77*SA[ teUxtW{gWy.^c^ +do6w#/o|m'jF]_%Lg88ZlIdfTه ($h#!bamboo-1!,@@ dihlp,tmxH#[&&t'l˨ /n7].R"G0Gs:|Kdoh~ydfF#rFq\B{="i}l]`=`iioip=Ҷfoqɂ{BǍYԻS˖ښ8a=.D!;""M ]E yH 7b\d=*IX@Ÿsfu/q>k2H>Oy2բ5S> U,ذRJ=[3*۷pʝKݻxS!bamboo-2!,@@` dihlp,tmx@@RO4  L|(&ii&IWR1Usbv4?}3uzx./-+)&U{({XNqƊȇʄ}s!!bamboo-3!,@@` dihlp,tmx@O4 Ec083@Yr>ymn 9 |v:C; X~5v{y01/-+(V|g,|YW~z'lUw$\st"A@·OOӯ&;׹*:ۋ޽`h)Q!bamboo-4!,@@` dihlp,tmx|ﻀcd$4)PLFFgj&U,@\+߰ڤ;ӝ?Ip.Oz*+qPW,[I])i~^r&GfP-=Ux}ΥдeCvϤ<>hŸJ̝/;ße:.ʰ#JHŋY!bamboo-5!,@@` dihlp,tmx~|@/H, H8 e$+ai%+Ӳ|`YCw{3oxV2LT[ThO`y0/Hp'D_&AEz^$+-*ʕ͚~~ܒi)9؅OڞN\ {7ƒEPĄbjX,#^8Ri(S \ɲ˗0cT!bamboo-6!,@@` dihlp,tmx@O4 7i6OΧ):)|CQjoW 3om-65Je}j+Lxp5{%$W}I"@ATaNRIM`^cskuÒ[#MaѼQΣ7ө~Ǹ97@IReSxkTyB^>ر$/dFi-cq減8sɳϟ@!bamboo-7!,@@` dihlp,tmx@8 Md2F6C1vŎ $V.el˷:k~30Rt2nU_n(XH`Ywa)ix^_';eHGBJIıQɭ˶mPСz*8Sio늻Ǒ҇KkDX͝rJWf/{A2m!AgC*Z,ӄ%ƃ#A|͛8sY(!bamboo-8!,@@` dihlp,tmx|ph#L82b":άTJKl+j/:u[,%{|{~nIN)N}'Gy$uPXk&nF4_(q*5+WGkEǨɫ7K$-0("݌g#ߵD30-)©KiaC!0Z6zRˡlIpqԃX;jjdAneYThΜhR1i*[C>YR$DAJuM%:S/s*O6MmS֎^tv-ؔ i4˷߿ Lp!bamboo-9!,@@` dihlp,tmx@O4MG2yZNHPlڢֺZ7e)kH ,(p w}sb0V^eQ/%,Nۚ,B3b"YmRܸä4[Q2+PE2ӧPJJV! character-2!,@@` dihlp,tmx@.GdJɬzXQQ|:l$Eqӣk:\{|E~qV^Oikxc-flya;1=Xx'Q("#O_$d"&Ҳ#ͽ߱=ԽFWAWcXS #r+`iE=d/ͶgnDˣGE,Dnn7isk8 k.uJEBI\ONWTk5^]M*ٳhӪ]˶! character-5!,@@` dihlp,tmx @ncM&phQGǙ1g *%sJuLN8:^'jKrr9m{[}GdE$4t'eg}_:Hu'hoW&vo)|Pin"HiR\Q[Ra@mT#Y{9*7?2k&.{+("@-+Hh/[v4/>u s(bDxb;bpHu7|H >+/Z$f}?¬m AVD3&~F;e߀,-Μ {iFXI?ZS_OHVExC{.e3޸8#8WnEǐ#KL! character-6!,@@` dihlp,tmxO ?jzH),PdDAUZno:cuq-5\ynRyEx#oUkg"Wu5la%lvPUu*Rq)x{IF-sniC'+|~0~ã)ǵ(?y—")T-*{&`_*A}] @ 9ĖCI|簢lx$xqa{(g1"~9j,wf.}r,A]ր mO%-r+#6Z]Y+Օ:h#~Mng˷߿ ! character-7!,@@` dihlp,tmx@8qT2fTtMUs+V?Q_4_cTnMiaڎyBZe6A?zBuA&[0a{S}Z,LR%nsxt^w5o3T"~'i-c½*'ѹ+p)߻%"=>@lX9VN``|H=|:7FƚVj4RcFdfpu)wLs MBTYQ9UIP!O_8J]&2Eڢ8yPֲhӪ]˶۷pC! character-8!,@@` dihlp,tmx@憎Pd#drҬz&/h>}IoĶ04j͂C>TUbercwU}stw,^(W'dN&W}R`'Vz1Li];4laT[3c:B+%.=ļig/,*G'?"JK`|w_ ITWaÄPx^B`e3o6k<'w)p$pxe ͖-O lIiRF6r `΄ӭ@zu:<*;e!qx˷߿! character-9!,@@` dihlp,tmx; ?ݪx?TTdEE""ڥ ݂%e͇βҌބ jjlvdF!ؿ؇ VNeeG]& JBB))@BZ11h($c11cJ9%),cB9EG89)-! xmahjongg border=10! xmahjonggshadow=0!{,@@{{īœƿ̥ʤПҪ؞֑鍺ޔ h sLC<0"ŋ,bXO#G?R )!ɒ Opʉ*_ )͚ņs罞>;t Р XʴӧPJ]ZNʵkիiJ,ӯX5v+ڰֶ/t; ޹| K8pΊ81j;n ^XMkY2沕]<5DϤjԭMv6m՚ޅ}۩޲ss+_μɏKJҡk\qGν8!}I]AXqvf8`q5bw3BcV2_~x>8Ba?K2܎)rTg`"rd_'h tiߙi]i]frhr`h@qJs#^9hi^>Z~y(2(&J('*\}:&F)t Brj@kي 0R71ȫ΢޵f"mr+.fJ'k:u睊id;Xx먼X\z̞ jzۜ q +j߬{;r2{\20o <ߪ\L\@պ/K|0?q,[s pHKucm"s*OZGpW]e>=pޯ/8v\&nmo.~o܍x]k\慖g=G+-92-.θ ty%ߜww^k)LK}n]3g_ ʊn)^Sm?ԁ[#Sfָf}+`K?π#@ #`X6jG;^XA3[ Z0wsА.4C*эshQǂ*sQiFY[3٨_i;n~3h7WrpWܙ^`lmvtn՛;p h>QYOny">.~ ƚofx =y1`Mc~˻-s&e; 9;nlcy)9yi;ɷu"'IVۜٺvBUU3Й=?dv'sg?@g>mn#}ks{5oӼ&㛾^.=>u>>XG^}Dnx7Ov·}E{Ͽq6NB+{׻Uoo^@7<j8_y?wswctW~'ZGtv'u|uVnxl|| w!"g{mQȷqw|eѧeG1(}w}VP  {wwGt<0gfPxry(HkX&?WsmB}YFqbxlWE2XIhzh PHzq z,5. ({z 8'EX|Dx-9B}4؆bGg|>pȁXq~痉:sLh~8VPB(XywlxS؄m։P0͈؅FGl7yaxx"Hjgoxt1Q ~h{quxHhXxA|#x6k?C9#F8*`HGW@,xXjP.iɐs~qX6i}By9mtxPV WVֈɐ(7w(ۈWTX9kWtxx|Ȇp Hu~XsW/Ș}yNj@H}kِVw8mQ;Xgٖ`!jgcȕo56iq9fvCHx؆ٜ9p&ǐ)Yvن~)gewظ#kؗtˁx!ptoց}ʗ#)% I؋&y Ǔ9蘕zDyG IiK(ˑm^vV*X;IɚF91Jx;#kKq˜kl;<;kD 7<F۸%Xgۼ;'f PUL5k 3ܑ8tṞlwYlגyS P+{lܻ7LULaPW:y\6-zNG<73Zg|hI-,Yf`\ʊ۱j*̱ŒK ̉.ۋ9«Ìʍ˓X/̧đĸ۹Ѭ 8<˻4qiyZUt\&ʑyXr,V-yHIȗeBK e7Os{9l͝ wkw-U#Cxaʧl*= }ʎ/Y* xҶ<+%>zlyg9΍䋹o0,^!맒;u~<(lܱ^ɍBMH~蕌.=Xv{I"*Pgԫb xd.߱Jqk c rޞn~viQ+߹~nՊȿq~ܖ+l+"a1]5㔛)<@ TN ]o6 ;nh~;t0>Mrn,*Xv|؆Nށ~Ʌj/ MnOömS_{ K>zA˽ۮ/+{Jܨ˾bf=_;Aީ2O?VW`}x޲|ȿP*V|,(/z: ڹ⤾yߕooAܨ#q?#`0HXhX(@ 0p(99)HIȨyYiyi00;`{@;ˠ0*JxJZj  l8ꌠam]},Z|@J ʞn)= z Oh?)߈ASӻw 2 H!YI=XA㿃 uYJd"4iށ<Ѭyf< JTt7&:D\ "ΥE "eV-Fl*"l)’W::2Jwݪxq5ܻmޡTVjp2.ɷYb :}JF0<ߣ䚟|!hMB=P>Y(! hͩ3={ uKR< 93;>W>YrS:{T'_jEUNEaTYh` Vrr!a]ւz&7H%,(He]Y;J5(Zg*IEha>ua!@]2%qݐѨ2Kyb%d?[w&&(uΥgniA>NgykyF{|XdCۛ ן!TR.`Y ^xꪞY#V+[#5ꌉvJZ +_j ) UNc /2Hfzڦ¶lA%-2;iia>;ZJuՕb]FyA6;H:LjRQ4-Z+uɣAɥPʖ:pb!\fЪ }Σj`ȴޛbt>KsZ^ v˲⊴x1{8P >8r7xa"+QnyT/ĜO/+_1:2ȩNKΑ22ˬ3!8 ;XD"Ң"3 7*$^_xn6V?*{,fg_V;#RݐO.MgO}KWnꥹkSΘ65^Nǰ@\p # ,^6p]NR5X:uDZvlCNwCt(< xI1U#^$* KzNϼeP{%Jc ؾ6lbDq m~ylmkeOFOJ@2;' "N):YJ6$H) l ȣy h.O"ءZL ?$j2M+bD5V\bTa!ijak -Z?Em'/FI67z*HxZiYm?'m\,vʓ[8Q@=!N4䉏딄HR۬Gm@a(sEqMaSH¬!{O0 Lv+S9җЄ:[6Xfg;:ϫqTINlzULYѶV\y 4rgLjd5w^^yh1 Ѕ-HF?ФZ $BlkJtj.4Gl:ךpƒ-b :sߩ\u%^qJNZf KhJִj4sQnfajWW޲sv"TUhXwS_*zsԋ?WZEBsr/z8Ц檷hg{\'IV2f궸}1f/?X}NtR*'la?Cэϝ/mLNuSw+[UUIKl xלY֕}Z1VYBp+S;sog;z}WheP_dT\1K qDPa*W]cƟPu ib%9GM$:trިژ7îux'RV6ccW[w}m\?L|mӞ$&D߽{CkF6 n\ 4k-4oeoK 8E[RFO-6'9gpJXqP QzWF`cKRۨe)_:%k_ tӌ'^Kp-*!?Yviuz5U|܆{s&I#Vѝtoxkm/^{/d'Npx:wJ{x~KljA_wy@\]*p?K[/JιNS/~^I|7=|;9?k+#rK֯dv?D ,؛vjrkzvnonxDhށjgGFnz|ր`0a0P%Aby yyykF/?% SbzU'b' z~'aik5Rd*')>RdEȃ!'\!G9aMZx9O}H%2ڥeW)?twhW^I7c^fV(nw5BуMYnhws+u og~Hsep{ UbPXP7Uyg0/p$k0(i qȀ@9uLVk7FbkÈ[A8dCK qHmWY5e(^8m?QLڅX>ce騈dOsH&qvVGD7g (臄WZz'HwIhY1Ʌx hz 7 ?Љzz&GUP*.8Ye5y؁>v%rxSlJrc#3IÔC('S$tBV}}5!~Tfr}_w[fW 7w#_dztwteȈ`xygŗ$z`YUsA!Ғ.%Pz3!'KvzK[72#xIgAywtFHlVeS|P'ΗZvGKabhudugn!nephpqve_xx֞a{כ 8HyIgIF6e!#Od)ɓ>9QP &Zr?ѧ`}y.j1چkCkBlS'eBV>֝)h6O`vG 7_ bVfY{û55ѻwEt*a۵ՋWkjr|@ ¾p %(v!}`%AR+;Ed֌.rR8I r- ø'²9 l=y˜;615d,c)Tk`_]'|+ eG uVe#nK˵4h Ȉc덕.UܡaTss&VVz۵>.߂BDFH@㶚Q"a݀\,Փ 55>m2~ |{q^|P?Su. x|->| Mm`mNʏZr2N55 Ol0~M^2"NnNN^^뷮f~)Onw+EN,+MO@Ծ`62~9R/@qC^#v3%BuD%noNN+ND/OXEF޸M[P|?\Ȝ~&_Ě~&DK.^n9;;?=EF0߇w8>M?@+OWJVN_\NZ >qqx p*sm_"Dhա|ރ0RGƌ.t@OPrx"!m__2Fʬ/ʄr4lҒP-sˢfBoomOڿܟrǑ?Qg%k:  ːŸϧݑ۽֡A0@Gl:HQ"ċ-NDO_L#B"I#9`/0KxKW1eyL9gvdi';*iRv<mizҚޫD=+*(An-YjyҵgWVpd]c^{xDSl]ʘ i32Mkϵ9ubGShMCkw٧9۾mZp yAHɐ/Njί7Ń{;|鴴͋Gzw5]|WywaE:DT9T5`kYTQ""F 78N4,1WMcݍ1xb/xH>E8DF>wx8BQYeIznkaiefxhh@iYe`jfqxv֞IwI(`8f$`o(a)MY^Z$E(5)C6Y*s~~ivZ+^uk)bj>&eA:Ѷ,."zf&P2Vu+gB-l;%b;ﰁ{%{/ /:<0 {0J0¶WM]GTC.DSNw{ %.褏b靧~_z1Yn{y?nr.|O+7;ox'/=[o?9k8觯8oߛ__%nk8?.p|.A jPu ?Ѐ$ On,_7d0!nH@! gB ~@חD#.}M| D)"؃DN0q< 4#(1qVc(E=uF?f4<YGEOt$#(IH.<#&ArҎyd&ŸO 2,SIt`ECҒG,q)D]2eK:<(kIe+t0KiF<%z.b3f8MSӜ/yML;YC?Ӛt,Ky1?O}VS<(9 ^&|(@Y(P=aE!LԡhDCP.4-,)J9Y|EWN5ͨSvt(=meNӦ5*Q9ӣ괃M]j"jѢթ>UH"^}jÚդnL%PUJCm*;RӯjuײGNXzX]k_[X"#;Ӹuk+3{ٮrVPEfcYPuki;2VG]A;xִ#mYZ{oqC6VEpy[P$ϭdaVUuزunv]Nw̴.x=+V yA}Z엹o{Zmia`b;7s_ Vp^jLiÛ=r;c71 '/Nres_^h/:fKga-ts)3e/~v}lhS־vm^s۸6i-qzuu{~w-oTϲҵ_q<<?j{kZ݌_#ʼnG81q{8k%79P.S6yq>LsGyq7=OwyU>uW}|W^ַrA `Nר~iWrN=+Alˎ+b'?7~򂇼/k|?Ћ%ѓo_˞7N{}~O=Y>GAO䓽zw١x`Gş0W֧Dz_}bz2W67.X/'GyWрh[M!Gx2"8$X&H"x#HS)*#[+r* X)Rs?B$ÄN&#@O1F8S\^Z?(8,ThD&P[xQ82iZ8%цv,t}H+]xuxt臃{"83 Hh(0)| rhhvh{0B$>(@UW>^: (74Eg28[h؋ØLj(%،{<l"Ϙ (H(~بp't X{Ș[S#Ҏ(&w҈8() %( Ȑ%HH*!*!+C >#I*桒5Œ&y H6iTok1a2MIJRLy\>Nؕ)TyKyURB9iɓ[–b" h Y XosyGiMG‘.e#('N$41-y܈4b_ IM%R 8I ؄i4yV3#ɋɛ戎pITpùgٜȝ ԩ:#y%IyӒv2@8ȗyi"9 )JY(:C葱.)؟yё&1љE sI&j2*8( 0J28J7"Jߩ+Ui9\)eL* Q;]٣Q: '0Jz$0'W*q\ʕf^rkzGwʢy`8FZzSz 9y!*9jz$JIau!J%#!a1+zْg/ѫF饎 6J J^b9J5ʣI-zZJ!'Z  hZ.qc:IY @w¯{I򹨋Zz}I*%*6:*9.9ڡ [   ڲ>8@S.&:<^2엳^j&ZZ抴XZ)> 3LۛNkP[:4rYd 욦8Je am{j+9ȀU:/ y!HZxc[ 5 5ZKkʱ ɷ:A&k<³◳a$ںr۳+ Cʸқy UJ[j;[ okgK;[+ ;-7'b~,k'x[;˻+;$ 빼ʱ[(q ܑ+;(## S y "ЅYӫ=uj])¬<ĺlҔ,M`( l6 J 10͍ԙ0mڼ͗|7΃nZq $- ͫ<;;ǣbmq'-Pk(={%Vɣכmʂ9٤٧ٱٯ<){0Ѥٸڴ0z Ӈ׍EBV\Fm5TN} PmR 3[kEp|֗ʵy-Iآ :١(9׬P  ]؆֞5\I՛ߣ]*֎ ڗlN;}᧠.})m?ة=|.q,L8=*!3˜>źB㷝5=#K M]܍M>K>*^ՍY\ԍ=p,Dk]*.~lwN";'M}H} n}ь \]ɘm0NK*.ݹ1{^ὔ-'ޮ>u9_*n,ȬۻM۝`iU} N~ ~m^WY}\ƗM=ͪlR! ^z-.n\؈ଞk-#oy=4DIcYY#1=3o* @ AADlɜ\?P.KZ]m]sgݏ]Hm-oa1gos<>Om~"ќ/ ~a$ێY8.=>o/-/ӱ8nؐK@B-QB3NpQm~ȭܲ_kZ )LDv/̀@ 88 0`(@XI`(iȹ) J IHiYx (++i z K[;+*lP<K̛Yb퀝mmjLxrrB"mHnn^?iq#(ߺhȟBGl5]9.5 ō$J3IbG)-$֐F$#ΌQڱwP@P A6ZҤJx"TO[piS\WPU4#K.ʚ={%1`#Ƣ2zQ5 w̽d5[dn)Ob;ܙ睡E%-ly*[lmk׸hҼ-kڴQ6[\ŃWW\qMq0a抒3&͇nF&^'ieKrPL!n18ϟ*nd#^iT S8U Z1U_)hdIh]BI( ^ȥ]%w$6 KcYcHeAXgܐDnh/ơ/MV0sVBo)wBvy%yt jZ6gufَ|$!9]{j@IȳRul֗}n,A]'SN!jT j*B…bR xBex_` ua |w*XX%@#fUJ $G*Li.,jRZO0-m ^fcMcKZl8FHnZ )-G|/4#ZPJGR:j{ݝ|͡ӧ<-$*e`* K+z\;"Z=pЊP` ͢MC-B)l[7]dvCmfq rSMOLTȼN[7#qy8F*WУ)<,tNh*fy/.23nw|:%8zN#頯+=>4#`UG7~دHPZԡ5׋˫_kRE,J_D+|̶"s2lIB"1B ΏrR槎`Ԧsŭ`nME9.-᷊!>P +Ra0Yz '>!o_'Fagy r|]&Śgqcaxqa>h4~: f@aM.t3yG&p' dɠmf&&hpyfK*a rF6'[DP`Ds׃td q!2Bk^^3.9Q`ԉFxBbx$ %FRaυD8ݱ\dh;u`I(0V!R$"S_K3B\lڿxD6V,c ڢ-&[hy7B3 hN`+7ey U>Ë&\Lt+LǼJTF_7ּjvbNA֯mݣ`XZ YBφmB;Z6Q0q${<(A YN0AR4H$IQeRpTdKƖ~!i]KDOa62mڮpov[*s8涪dT5UrE}^|YFW'M5e%Xl#,`WCjF8=,W%V$*t M _, nH\]gQz@-JŸf ЌZm8 !ۇrY(>b^ɣ7od0%Kk$Y Z z1&N mE@u*FD|57ug N|X-}ff_D ,$]0 ͱ5L1'Ѹē&ja }(9!WXҚ]lYIشlxڶ8!ϵ6'?mWR^2 Ds -{Gνnf|y\62L+nDbLȡ^FD/qar_"U1#vqӝF@Ep{Bia,x$bJ5om偳;g 'ơoŽĽ>q-8w[4x!'uQw62Y\wݖ1\gPw3~bض|w-U[w 9-f.?п/=;RF}`h ϐ+ hh|MՄ׊ʈљtaiOK`6j jxI`lQ8][4U :Eוu,Rיv$vsFvPe7%rwbIL、geoa95nUy'r*>c[0Ǖ?P2p0ps6zp Gg8H]p/]2{lc69P5hcSyUAkW|p|ė '\ ݰwt/vM v!?VMPVIpjdujHX~[j`:a`\'E*a0b0BSa(s|uj6;7rƉiԉ[7clhe.w Sy`+XYgRXNG ax0F*Yd'+o!lDgyrphgk#hJ":5Kx`{wqUUJK_&&Dr(C~$% jiv7HZ``{(dPE ݷj} g%~!]`؈/)'03I7ioFbgfFB xOX֊򊲘t7),3ҋYg>ňb'*7j+NxE%@yuv)xSxv;38Eee8)w|i#'T(T) ѧ )bSPV}?7ICB})x %y,i␛p? I!Y:(^D;hXudDyGL oW1tEx(uywIȋ\yxèQ>D> ˘fy "dւ2I֘\!fRS'>SQ@=>P?qƘ%&s: BZʰ L!gʔC0}G1sVj(@(0tW UPIР) yH R* YZ)a*9Ә&DIil7v?*HY3J9M=ZFQ0S2UnՓj1 UzRh,3٘wnO wIf$Ħ"ڡ:6@{!ڄ_: w>^#_/M''eUbHƆ%ΚH E`pٚp$ɥ*)!i"6]ZZ I/) g*[ԪcZƤٚ TzWZʶ슮o_ۣyx};8K~pY{B&Xˋ(Q9#Y5݁.~Z.(JlIlZ{NҨ" '[) +oY+:Ir:?jZ@`C|"@gg"z#(K^#h9d|f} ٣2~}֤ICY@))Wu 늶U(OWyԫ_l-5rXG\]~D}:T'Ze}ƚ٭- %{}Nɡ艾ϋVڝ҉qῳzуeIS.A(UP9 *o1`+fkYS+AN \5l K+*L,ݵWۻ^VdÊekz &8FNn$}PٷI $nLw_ NɎ ?dF)T3񧙿C="{}tK!{1؟X (2*!#.B Cz2Z$+ҜхZ":aN"~ OfU e kjW0MAu\ K!$uefUZ=SGat ęY.XHfl rPQv΢Z-FiN2́ڝ<\TѢ }O:(ҋzȢkm<2156R:":J@%H@/lι 6p0.Q-=pdpSr.^Sn.d_n* +V(n.Wf]p^״ ppjq^q1BؿәZ<2_pX췢RkѢߎF k^3Qٺ<1_(2=2_XT ;'KEΑ]"ȷ(6YzPhR"\±0LnB2Qd5̡ )?\TS>hKaj7$#u[G9n*]k0}24qd>M eh&>e }#xLUH-ɾAdJmNgJ$KM9ᩦ2}y6~ g`-g9JZkƥ=WB9TCH*l V/ah&j1EJh$izٴ yk8Zr[z';i&/vQvHTg`G_+_GꬅO: Dž.b FKYihU;Z9tiVXV*ǼYW[M~).VzS ב\q+HmkVi JQQW,/)ڱV%-+ }l+[U@,}i3 '9wdNvV絨YhMv8g,p%Aꈐ1N e1M ڌ+Vcg]Z֣0ۛjK*M-%?9\ڦ ºW_9^Yz0{G1Eszʷ1ɛ5x].ȽS3|OYT+uu7dS,c;8jXcQ,XAQ6;28|A+ٶH.2|ffP\RY؝t@e~=ቢqlV̑}mټ%V? Q/<:omY{qm{:5!a>%ek{Mu딷}sRװ\t4WG߹t_EWOw^9zMq6=W ;w}Yq|ՓHww3˸l[jQ9)En5 |u1ߖPNGmg_y޴OmJh<5]yY6o}fslb"jB?livpCOW?큿l{\׾Աono{}_>Q仍pQoERqW{#g`xh\NOt;q*q z0 &[APr)8G{77)ṠrFE<7>x*'>\LJHhJ]|0eݕ$vi}hu'vO!ȅߧWw}c(Jh~~miMmh,e`qugdw  [[C;wDxxSAV83#oBbZ ubG' eq>(zЊ+-rq*Um⋷{Te8kgְ2gs!SFUЅQfAU~؅o}fDž؇dghvnq~X}z~u~Yhg~;4vNط~'#~Hh}TX\#Sg9WP/VY!Izbȁp29Qz3f0ȋr-؋-1l8rI'd7IqCHlwE4(͗]Qy8sxuNfi}z%w`V_gtt9whjwǏZ)98G9`N;M)yHi~. sELiA7I-)#[!IrdқsFX"BI9kɧқK9 Й3Y(ʕly4]č^eed9 i 9vG]7PuyvCy vzPO'sy q̩9xzkdј jgXu0Ihp0JpF%P hz@*>J-J 1ZKj 'II QJin4`1%SAz>UCmUЄ2R6DF|y!x\(6d\}yIv(wʎ:l)ؗgڐcJsosGB:pq#8SYiO: ڞڠJZڟɺM:$ʊjZ W\XٜVʝ):ՑIʝHsC'a=UmJhrڪ k7i KvN'v l j ʚ&몃W&ZʲSZ F։ y0F:< =m@K,4?ֳۧqH;Llگ`tCl[wZH2j]S;Xk^7:sَml ڐQ;g+zRX4Y;++OOfѫc&:۞fKf۟+k;V뱱K^A۹R{ڻ{|k>+7 ˛KAӫڪyمTh+;KB/ V{;yK˿jj&+{ lf[l=2MAD@-B>NPR=1]|XFH7b}dMf}?Qlnmph=[]v,{ i]}փ-x]z}{`،]؋2=@ٖ֘ٛӝ ه-ٟѤ} }ڔڬ}ٚ٢=خ] p۱۬ ܴ]ٛM}]mέۭ-ݍ}-ڽȝܟۙ ʹ{-{@mvmݒz==]}߶l=~~ ^-:!#%=K.ַ '(]m437?8:;D.I5HNR^S}VXT< 0=>..$N9n(FA.pYn^l~x>Dre._^v.~|>ԋnLi.N wn隮{Nm鉮ۏ>꿍yzN[ԫ~۸~~Nө 렮þ> Ȏ잾>nNخ^N쪮.cnv.Q NN@oN // !Oͮ*?nJ pJ /13579?/IOKM/O+WOYo.o'O;-?^/i=ojm/oAUZ?x/¾ep_=y~M|?iv/!}_~/䥿OhltY ۴}?ܺor0}ԯ-9_O5?]OGXh'x( IYi(yxiY(jzIJx K+8[{ˊ k,<[<|lL,Jl MIp흭=N^j(_N_=i$"Ϡ!bhϡ5$X]:,r쨑GuG+iʔBc9n%Ln3Ν<{A?=3H:*t!ѧT*ĴVWEnkVdJفhn];ԭڨʥ Wݷt'՚ߪ~ZFdb\*T2foѤK>:j7ontմknu샳m=n?n[8l⼍#Z[zyסKgNyw߷?聫/{O>|}oq{Wo_=-h}En]nڭ7&b*b.h"@}x:b3֨ߍncE6F>")$Ce*J$^餖brlM&@~I$Ysm$Uʉ%Ffzȧ`YI)蜄(og. S"蠐(u^]Ri*:ꖥZߦi*(ƚᕺvz(7y@jb1I¡~̆b&;VkbKحkjfԖkﺿ\p? _o "g<2k1&1,p2L36Cܰ|;A%=ܺ{m2-P+tT{,f ,^=S"߂]Cݵڐ5bzk7l'Mocws"xa89ƚ2Ќ^.6)9oxrSsԎMrpnx1{뀳;?~ʑ ;U#,5/n=K=~ θ>O}=>ֽ3<_z>髨o~2Y}#_H2u# ? D;%0c\. uBtސ?z+^? PtC!D9uφ)!j@ukך&R*{^V7\W"qׯou;"(/ocC*}YX'4~"ؑ3a:wl0H@ڑM?q- Hnr*)IMхT`!B7bQ3DrQ?y9 " eL]|0(0\ 8G)Fs >bUƙr&S}RgyT/7s}l6HIVru@J-:MNȡFZZB{34$DQ,nƄE%:*0r*XAɩb21]SZS&tL@4*qZM.j(Qq*RF}RUozD}*'OVլtCgO ,LSUj0hRR}5"`#YТejVˊ")%EaX~꒡,,#Y WVPCXVv]kdQJծʄlyQH|nAEH(.~xmk(ܴflnJ];FN}Њsb/'+HWr6n>z<ȼ'aj.m|_:҃|}HΕ!}VZ„:i*aֹ"u), w džn! 0qgNgl_NJckq+RjR dZ*rId#Y9,B1-׾D]|eu_e,biwunl:<7[9Zt _ѩ.;,?ү2R#@cw4+㩞_[EMW%\#{] ;32]}="5aɕj^LmIzrU٘S^==oޖ4'YlQon8d]l~;ݳb{MI͵lr(ԣW㺼n+㌍n<9qDPr.`nMsEs|z+R `[>vk[vJOR87?ss{_!^9ٛ\Q}8 tK~yW>F2C-}"0Ay/ޠגW?}>vȻ=e/cN\]J%@zPBʣ6*ǘ~ xoZ[k{^ZYYyJkk(_[ dYXgjrt"+kF_玈,vw" "<"k*숑IzVjmj5ܳJZ&ڒ ]vӻ>e%ë{#+M"DE:Wʋ<ҴN_|”'b[X׋8 I~Zxc pK ˶Ix @Ȅq[ 9|{KrXj˶Yiyf +XuwGȑJePu˂ɮ k顠 lرJlSfWkLZ5I,iſ~cq ]qnT>mݮv|wx=fX>*r&:菎 螞|ө=׷ YɕVV;M))ľHlpBOQ(>޼N˾"bP%'nHxy> @Xn "vjɞf 1}N3 <,.jvߛjny۝7lM_$P\e#͋Ot\Ͼj ;"̩T_䴮j_a~)∡AلV8*怖4[o4UJYEqH޵r%( 'zyYdIՓ8Qޏ{*tyRSUfIk'r]G*H)zb%bN*:lzjz 2$Ȳ96kH&蒳<[.xN:Zb8n⛞&:eѤlf@6%st'afr1{, /}I|J@\ G>L0UrŬ j|h&8뱯%"A;5댿;ⴉ5\S `*vdتRg6([ͭٮ@Z|`ۺeaJ<1*Ϣ@[6x+#L :o2MKTx2O $ȯpe!(/k֋Lk[>"c"!"zbt3"J˭_zS}}HbK!~=~3?P 7Ry)nt˜t69m'Oԓ ۇIr~rX:2y~գTP!i 5gʉHp&KX "T.l(7Jgh%8ds0/^!>(k룖j(--N Ff<#RX]{ȨAI)bBE8ˍxtI3Md~K"p^Wtm `iJQzk'/ p~q@M4MG%$SH_.#"fД &eKR S3iMQjt,H/CPh(4T (@(̜y hDK5QͭS"!I֯fVĊUVaզZ=VzӭTT>TIc_QPm;@mlPX2o "#ڀC rc.o(/טs2'\MMjj [jleؑ.9ڴ*7*'Wb J%P[VMYH;;TUĀ^%DWגb-k{yV{l*K5k^Z4gHJ}.ج >ؼ=J3s6wTL :yM]jbHxUc3C?rɰ>.C2L>.g^Uw]fpژUND7R(0tJvXZRBugަyohRtah4\"H#q\1t.b+wbPgq=醶MD)רf܌= c#nk56xMjO[5;VIj_ `9udQ_F~Q--im{춽oĎ۽Fa~ <~t]hW'Ӆ:C fBVIѭ6xP[kXB0[IaͧXsc\=X:#;5媕A/%o:{~CD:g<8%$?ߢKv 0m [ #C _;.g 7몸ÄL)xC0rqj M4SO[|XCTz;I$Tq~ĽSuo>|L8 ؁j("V`jեpjZ&^{>k?1m ,mI ozHwp'$ r 8pwpr"6r&P[zs2zu0(U>~taz~2}Sy,]]aGB]9%eBdv=)NAM}UZ*اa{'_!rvbȎ&wvx<"Uy ivqXd×i{}90ZDd8ICy '0 )$W&y{er3)|Sy1*y-N'E93?{mYL|SћXjuT^ȍEXɜ8ӕr7`9(__N9bYi.Ønva(XSr4ُ 1BZ o;[sq8-{~: 96+S QB#}Gp&*׷9t FgG2uUDu5rJAfy iFRiIwqvcSvE=ƐTxoyBR\`^*%ЂZ[N3X]lYYQ $g* Ǚ899 ѧ |F@ h/(rRB9q&QSiRe;ͩMtFZwRHJL*V=ng($\㥟z++bo'6Ԫn93Yvz~C@2᭔ʚaPɩ{,uAZo7i '} 0*j/ǰGB;10z[[f[u&cT\fBZ4ieI7s8N:7rwɮ$Bg, gwyٴYKNkjYZ@sHB9/=@2eՅ{ I y秙72LSZĢʳ\Pl)KBi^ £>ʜy;^紬J˸`)v qWy᪺ƻ:E Fbd {5fWIjX" `S jH'p뙑 (:O1';|iFr2?SDȞ[ +}kX};ۻ۹2*ߘDx$vkvꃨg5Đ`**˴Jw24ɵø?7lPwҠ} !:jH[[Z[Lk %Qhȱ~ 2Hk:Y=[8Ǣy:\ ܅k ̱OȦ97 fD<g> =(l'6;³½Ö62H|"\L3F̋ˮ˺b7*[˖`Q`S#j]l/z:6:/ȋoܷX<>f6tleL1EO, : Ѝ,U";ɣ[G-sT0ɢlnJzrYY;w26҇Bҍ^ӋeA fҁ`[yJ'q [Q@KҐ"+keL ڑcJdAC2(&SkcY6|gM˕f0Y0iכwː:DLD'%}˷WN֩f?O"Y5=؀9w (뭙hY }p 㛮 Ũ۪ۜӧE M%pЙʙwƇ͡/F>xW,HiJ)8ҭ$ݸ?s4 ߝLcs-`sm]1=r\WDݕ#r' LAP3߾h۶nH}G*%ׁD``mJ-g ny9)?۬6JԾM+g|2>ͅ؜ :=71l9Y>߾G|FU`Mlm]t!/PhvAՂSqnw4]3@G~琵!"NN % #~ @ no ꨮo~@ꩾ i`NiM达a-Kfc07쪳xrU}T^:(َrՇn.acRU]Ֆ6m28Xnٞ͝Q脂 M1Th%Q 05AS ""?$$*^+o~aϴadxpr.>6鬖p*6(| ilB_=^jmjTrWF>Fpόs^ 3OcPO L y/./0/{ n/?(_ l$?l .Zܹ_|XoR/W~EFַM_Ц9IMteqtX G_ ni>İ׏-FFWX(f)hy9IyhJ9IZHxʘ*I+;k {+7`y8\82M!x`VzƩVܰQ}\a”\r^e\bp衡#My9uR ml qV[㣣n|W۹5珝RQ x3]I XU! *tO"Ŗ⊣8`qx!H"_7FU->^XLƥ 'V9aw4}]R%s@҇`bY gi%B^fn9s榜jgy`jN/"~ap駃vnniPVxi*gyfy*ҙ櫁ƪ)֩ᬰJ&b@lpzy.b!*`BV׶jmF{n*n|Z7/t2wiod2, Bpp <2OLq)#+poLpgq{q"0@r|. 3J2r͎܌:s!TBoL4*F]q,\2Q#=&_t%s51[ bLv ; /{]n'vsmw~ xg/x pxщ7Nyo>+9yɎzߥzꢯsoͲ^y;ߎ{#~z.y[N<OyOμ?=򘳾|O_{ν]~ࣴOߏGo,sЀ l @9pDH ς? ,!G(K 5BGa.fH ڰ)8awЀ@ " TH@'z H&ZX('zRcx%~;6k#hG1h ǘ."AnHA2ld IR2_Ot+ O'CٹɀB4 %jQVTh:̂~Ԛ!MHY҆ӣMDGR4+JgJP9yQhԟ=PMR-RFFRSiRjQ)S2uWEL*V&0-+[V2_աWͻtOSЊ+> KT&i=Z:׋vBdzY:ܔlb Oƚm,i+΢VD-giRV5Tk;ۖ6VkߪaemX\ɝm^Xjs]^uaknV %nw[]^WeozO^WxS [Wŕw |ok5]pQ?ػ!\S ت 歃/LjXp0yIjb3\ )h1=5d2\Gd202|!#52L'$U3cYj2X,ysnݬ:SUs @ zЄ.siD+z@F4 C9ҔV4]Lғִ|O[9mS:՟F5=Wg:ֲ4k [Ѻ޵WG:؅67 c',ih7zt/}m$g[ێnm۟emivnmǛv}orCnkS+t 7#ӟ/>կtXӵ{}D;#Avpc{Nw۝s;nukLxG O; KC9̇񠧼^'br'};zƿ`źUHLIq1Iǿ|OGE}[Ӈy?.q?ُ>~L'翦׿x{hx|~W觀w}RP~X~Xj$6D"&SX!,؄B5‰a 8Ȋ!re3A9Ҳ3zHH99G7:M/zWL$IǠa9d* ZޱEazjZ ^* rXY qi Y PqЩʂ1/ꨄꪫ 1; =ꓔpڢZ:X6-tת꒬z`ZjȬ鈼_Y JJ:~ *sZpaӚ^JmȬѠ͒!msxI`&fZ 1!+hYz#K [5z ';: 6 2> ;.;6PjhVzj٪;;t4;JT}jzX+ ZC۴ppl렲|Ұ)KZ)- /)˱kRAk-˴72(k[(Yؚۺڸh)C1ʹJ R{[ {[g[t*Kir ~M"|y )kk;{и龪! kʿl{8۽ۋ0oPбл,!, 묍+QK\1,3L5l7<¡ {wl*K|oj"Ҿ+!(/2)1z rýLƪ*ܹjS,^<`cgw|KIɘ[:l"l ( $%L$+ -,S 6`ʧlpP{Q@<|ۥY바lUiKƏ ٧ۛ$cr &{" %K_ GZy@Hǹ|l.לyl=il LχΑ`bτ,ɗМY )o8mlkmH5`ךʬʦl f:PL-v  M6] D8 "\Ѣ| oȠk2ռ0]]keܚptaem -I Ѕ]–|^M !͆#])}٭ * ,-hC`ˠx>ԫ{C*QͭէrԨ{ שU Y7ϸ|蜣,? a\n}ÍM݃ 潵=],lȴ,ݭMI\= a* Им]ЃmŪєm!-َ=ْ]٥ʙ}Қ]%m\ Yӵ|}m֊̴]yʏM@^ME ^GDܿl0ѽEՍv<~`fN=bkޓco^cx= ߽I^|<-*ع<]Ѕ}d`lmjh!n)#~Ȑ+.. M MᲝ<>]BN,亽A.~T] 匙ɾЍυެq[mט]nT,a^N֝-6$|~^pЊ~ N-- ؔܢ؂.Pэ퍥~Pʪop&i*Aڥ5/­7>@=B́ۯNL.^F=H" 2MQ.SU\BZR?NbJOqGMa\~enݴAz~9t{=( ^ -@_/>ǖRjQû8*o&mҫo]67Xӿn\~*OOk1/ N?2T?ϬiğoNoMȰlh|q3 ')'$$oo$''lmlno** +,-((-o,++$.劲۽zz뭿 ըgA )XatjPĭG%J @q32HAc˗(rk &̕/<7 ESLv@w%hͣ* i*+ZVSF`Æ*K54K4yel΋zmLqC Uڽe=5yf'^*$ 3hwây` tA^c}5eR~qD! $VxcJZmRTiκkS~kvb`X"=0AYwcdCgA.݊lW"z6"҂Ca>d0Ff^mGpqy\rPk{blݵ*]3=!2?2d6 ä-Ӡz Ѧz3ukIh00K%{4[[JkU-]/4[ Z۱؅l%YsoZ]9u w4.׆[/YCGB J_NuN $lJ8˜)@Ǽ>,9NC0\2/(p]鹼 ]*]H*4}*4BwBJEPM}PeX-Gz]9xM6@mrE.2L;HAhqKb}Ђ ǽ0rd;Pnvs# ɂw((>5=%<2LyYy`2le5ͪ3S+ #WAUӮRIhҐP4r}A$忲tJv6LBĒw ت`m eBp' C 5]%I0b6H*k+6O:@NFD8&avԹ1Y&Qx"o;)A&Ų4BdS*~̧Jϡ|$C5CgI[(CI2|> >퓐$$9MBʒkIRQnRH4Ȋ3r(4)xs+$7tM%SFBH*-2^aX} (TST6ST)[Hm|9DDQp"s9_nY"K@S-3]ͮ ((#'J~&zX<47{KDrLogтhZr|CHAJґ4o8QIIT)GJa+Vui%i!)ފ ]B$//@Ɣ{\e:IοZ uŖIЪ.ܭ 78M#z%W05ꋢGS۝;ȓ=\ eH܀e)4B"tԪ6j,\ǒ+OΧ*D F$ejbC.HK-(ɪ9pMt: x#$rJA44G$!bIiI.=t\4xoJ귮R [Vpa {)Vxb2v6=bU6IfDcAXЊT=mFղVԞDSmz- *CYF@[m 齗R$JX2KY|u_dh|3D3ڕwK+I1_.!y迉ѕbC 3\>`뢺c9>Nq=Ɵ-N&L1YSbtzW  XzC/ 玝= cwT*&mGy?f63x%7MqrDȽkɻ'e-K@=2Ih뺙RFvYJFpD,c,0耵(Q|Ghw?54E[Pxsd+S@R8?" 8?x<(Eǃ4WlYA8I{s㗍َ%7FweX2sB28{ŏV{bC gTg=WYUwM:ɑdN@ %'' 1l"^`Y顓5:P? uA9 $D ,hKA)gI5ZI]$o_xf`Y(@(o'Uo&u p ڍQp 3||N29G%fKؖh2X{مrr&iiiMhbk.Ujn7Wqg ؔPkّ?H١&/1 UtE'bZO]~_$+˓ 8i4pFgWc@[ىym=5finCqI ewhHVoVȨq$Jjr鍢 ozy'ZZڧyt認YWY8$%$GK`UCi3p_ Ƭ [% l{JdsC돊#Ug0 ȺYhEq%ďyHܪ^‹ClT!;Œ#L9ϻJ̷Q`Ax!չd`xapЅ6r ky/ek ,,t,?þJ˺雼B͙Ľj6"vV\E ] +xQD&s2 -~Y70Iҥ(b1)z2g<8oJGQV3Hu*# д8*?3]`f7h!%c0!L.L]AE ҵ~4"Ӻۛ۾ԑO{;+=E Ť(M:MUۙݳ4jeu[-:Z_j\9D0'`L'Őν[~~'))+w^JF,ѭMe= تE0?t": w*oŵ΁kLӵ ;469>^JvӶ\^" EiJIVP>/ ^ԙ&V F#QtiEԈ42tD&I'р`BLv,c0 a)aY8T]رLHo 4*=# 5ڄPzx MQcofFƕst np,03l4ʰBqtF^HJ8#) *%z΢-%ϚBA4G"NrV˾Jij P}[4kN & l=f)<ņ:7N;!^쑹ܭH{aH7UZ~NzW= $7zL@>!~ر6 r0&<쪥jy o52Py\3nHho?nUAOButMH^CI"Q.~f g85: ?䳿?oFO;79 q>MSo퓹XoͲ_pVC4BCB%tb9i_?J9Cȁo57纥/ ׀ cSC(CXcXF0IYٹprBXb PҚzY9KpٺȚ)kz )IKi\+@dMJ&<ܹk|L\TdfFXn~>߯ =Lz׏?*ǐB~ E|ċq8k#GRN %I:ХI|*'fP/wsSNoCVGG;5^8<ڦSmVj XMb E 'Zo*yTUz*Wl%Awp aXK߬x y+8I EO+XPx.ĤCOe'լ[6:K9Kۆݼ{mB*xLkqƻ" vXoCL|`]SRurJ_9<ъYs.y1ELPbр ҁ E ~UV1f\DQmXP4SL$ex:u-T!]+~)wU#Q/vcb!HV _ixyեWhV\@nYVJLTNL ~8` f&a">&edqV{rz 'iFj莏 I"=[n" %rrAMu3*1ޥŠɜTc~!6' aޮ-$n*|&* ֟Eȴzbli4f;EEؓAVZDc"I dnۯHnW}xp>'Tb"6U. haʯ ׸qgZˉn"f`v.@ag8𳁂"jl1 ׉nU tЖ^2['~Äg49zTs]w*lẠɾiO9r3_ǵZ4LΤ-T7x=C|#lEbҜHe+>zy˭_j gcTL.1\f;鏜5J~ٯp%{w21irɁOgM0>31oǶ+ #?ȿoدKKS0u*]dS|GzzCͮq Cs(xkakL7jvenD(Nx' +35sy"۝g{I ]I VF>P*O{RCJH$OvXw"6d!2Uxd2 \a3H;o*gfNш," k"Qb3Y$%&<yzSKjƀ$:݂"3K8<9';$GMN̞9FCvK4nJG/R #Ui(oI_%X+qh80֌tb'H؂~1q'XIQ>U<ii450 6 YUfBٴϸU5YpWq6خV2txVoab/МHݢ4+U3Qcq4g0#B.xչ= SCT-1H9Ɂ+_70ʩj-n9 ffCنlB8CzHBg܅,9vQ8h06\9~ y/{-FLமL5hغ?]U N_x6ȁ뤉$9sȒ)'8a9Yq:hxS cA'Č;HrxH?r+{ W{[Hs1N(t_yȕ` 4t6bayai}Au[(Rcؗi ~9A]I&599OLDEęE/IyeX.=镠wٌBL 6v97ț(VyɹUr[ cٓG?IzX;uԇ5B5~sٝa艁KΡЁJY 9lPU|tF雞wF WiWTj{' 研(C[tJ-(>ٝ%ebd 6o mzixzpJ|:~) ڠD}բR EZhFjpPVnj窑}لFXbz:JWrȬVGo6ho8[vtz᪨ yAaJ~H8g1zoگkZ:9D 5I/Z $zc+jApJ @9*G{3wڝ\j#fxGrh [wAIedr*(溴%ִJ˯N{ɘTX Zۨ\k^`+XQ~O+bf+.Xi'`pr \j2^蘱Dyy+!k tijh{Zhd}zN۴M;[˸ZڹgK[{ۺۀk;˴;˻2̛ +PKkԋۻ{{l ŧ拾 +R{kH۾+Z[̿&+L\L @)+-), P&5l72lp8?3@L5B\IG4O PlŲ0QWLLNIZ aLc[lg,Hli\ohl jLuM-GD@H2mM8Q-BԖWY [6aMc] em=MPk-mV .(Muwz=ry"ׂ= ]o}#؋׀M}/ (-ٓ=֖mؓM1՗ؙآMڇmڛ٩؜ԕ=ڪٰ}ڃڮמٲڴۥۭ۝ɚ-}ںֵɭ ֭ܦzՖuݣpޱ}ܸ]ۨ ޶=M}m}ޮM2 ߫^ >N^Y ".$~&N-R r=4N6~8:7B>׍13>];?KSnUٽG_m=L>1}Yf~h~O\jl^n.b>sm/灮v@dރpՏ).t^N`A-wn9.]Mg;ԬnMoqϰ>=~iø}Wže^.;~빮^5~ޞNngqv=2 ļN^ /O o̎O"L/.(5셎;_D,.B0꼜 ODJP:_RLNT? b>^1_F؟jOl\p_M_wo9oAC<كm؉brԏoݚiȝ)̥ooޫiOom?O_oO/Oկ׏OOoѯ _;xmahjongg-3.7/share/tiles/thick.gif0000664000076400007640000004770206620343340014325 00000000000000GIF89aHHdi̠R-Up֥**pjZH=p##/OOwp! NETSCAPE2.0! xmahjonggborder=8!season-1!,@@H0I8ͻ`(rh6@!)}d:-{`AQ&'?&d=c^Q0ocPⅠl 1; J o-s/N\I~Y7HrOQR Qb~"a^/9 TQ_nnXf]YYd2fzkvfDm~u' 9D.83KRvCVKբы C{y}OucIx| sy w) g ? CL"ŋu(Qc]izH(=X-%ȕ&G\56{s&K*|~ 1do N ]sP*-\ ELXڕ)IqZ"۷pʭ!season-2!,@@H0I8ͻ`$ИEFeQe^o\7+cXdi+11LS5,<ʆԬ۷p;Db<nlzt ]-Ƅaφ20NȓH!season-3!,@@80I8ͻ`(dihlK0>1 Շ=@`m Ȥ-Je)FLzjmT<ҮnBs7 dXcez%n2nWY"u Pq9>AV6!8Bxg zprt^,x9K Nyfml?b'SY;DнՖ˫~k>Eգ_'y2$ Ã5Tp"} s,&HQ?{獌H1%ʗ+#=bNȮϟ@H!season-4!,@@I8ͻ`(diZ솨A+_:Ӌ{0o+\rTnGJs(iJjb%,YOUJ+qƎM^6|פ;,yKm{^pLz1>6O}?OU/eG+\<+^em\UX$Qg~[@l#0[ͬ\ѨzPU*Azr3ЕRŻ( HQ[$1d)z'BėF@]dE#Q:)0Ȕ/K PlhFA a( M̦PnUTVź*Wz+kح\vEvYkC\mֶgZCչzeko۷~U v`Fƛ8e̠#63ḗ)cݡcΔ 7-۸s!flower-1!,@@0I8ͻ`(dihJ , j<-; .,M級n%dE$FM+URe SSg8M5-o/Ofd[&B``^b{+d}PT6s#WrS3Un!XY@YuC9f >/ + dA}4 Z јuV1+`f;f ,!㨩8!1KV/đB/=wzMH'$<8YTBOÜ(c\BiJA$B ه+֭fv=.B.@mه0(tPj^eCtKOQpvc] egU[ONMە\ۄPZB- H )PK\OJ,[mϸUflss?272=:nl8F,~q{i r(hV ql07s50h(,hb!flower-3!,@@I8ͻ`(dihlp,tm߸8Γ/4/APLRQɑ;ɩxdiv͛h15j}-`q\xHPu`FS }Nedz||pbVBbZDkz pq>]~!qdͷUqmؑ+nےn,pp/ܓ41&4Zmײ$,[Z4ؐGK$Q e1ca + UZCӥ 3; ɳS^b!ȣ(qgOIVZ"M[z̧Qq  ʝKw7l /QҠ)oas]56c)?vd3$;^@mST,fGAKi}DnW9#ViXfD!dragon-1!,@@ڋ޼H*0! ڱœ05urȎdEg8ɜ`f˃iT0d̘0%Ur\j(6ӷ&ЧF(hאcR7FxiJ*Gyp";K@ܤ*d́Bg9 l2xm5(#J5"].(q n<·E%})#'#fl)Ox0Q?2# ]zZ&vs+Zoc3J*Xw,'2hB0h(SEΐ$*R%vIyD㧧Z+tuж8B8WěyAX 4յBGkČ;~ 9ɔ+/(!dragon-2!,@@` dihlp,tmx|9$*mLA R)J"ܚ4li, T~F}wYtCZ%WxA|H(^S:l%$?(>Yz<);YI+#$$@^Tp~(QX[ACZS&`E^"c|t\ø"Ծdmr-.50TȏaBA6R$NxǏ CII!!dragon-3!,@@ڋ޼Hi>@C,m- < UKJ*$`dIԪڃj ?#Ny]˿ 67 OuvX8eX(hׅiHH9ɕi詶69J @V*) {Kʋ˧{lE*j8< mW[\wl}ș-m-M`~,^~\<[N=N<~AOA .CPCԍXO'G,kFnZ 'e8Õ+C< rAdР3r$:4)=65ԩTZC!wind-1!,@@PI8ͻ`(dih0k,+Mi^cs퀙bmH Cl> Uɴ|Yt['T8&);{ݰmy/~TPYmtf~<lwj[Ezvpm|@[HIJE;RrPJs,d([%Q$GFANWb,[R"tH a3EoK9iE8:#dKGZ%򟨐BWIٳhӪ]˶۷pʝK!wind-2!,@@!dihlp,tmx@O4 Ec.1p& x2r24m-[HThbUFrfb~-e }3\642^^e*Uw%w=|/,_&os &T^u_>fUnQDgU+rӊ'&˳M"eߋ(đ+ty6h^q$QP dn)W@)kW[M,C^J[R'}5D)VrRbDz҅B Xjʵׯ`Êu!wind-3!,@@0I8ͻ`(r@icjn 9ލ:= 9n%4=@,/d~R)v^85yD@A}u L~za xgV}Z; a }dǠʺ^ylj`OrrBfKp ojd?M xKLFZqO *FH ' NNl6!,J(hcPϊ?LhR✚ɳϟ@H!wind-4!,@@I8ͻ`(dihPk .]\8 .^ U@hJ&"47YN= f^Bh13=q<|jzc8vwp][qb#g~B +-$ t t tC= .=; KƳ -lS$kG? SGmSUrOV:u’lq2f+Uv䊓YgKG l9 0a͐uTkو[;հp!:(!dhN( aLe%mܺx˷߿ f!dot-1! ,@@"dihlp,tmxH#RalzK`J _Пt4Z*p@a] '8fmǓp"]RK~ iv^B:| HMI~#a#J9uQ-(b%V0(4h8<(c!dot-2!,@@0I8ͻ`d d):di pmW A!dcHج:'kXvu w13;9nu;)n\usl7=e~ikzrx}mT}ke`,}&V;j^v=p1&DĹ:aFJφb O:CvNv%ؗx T+3H:ON[Ig#Nzȇ8A;u׿Vt^%䤏?ZS'+cC9yNܸH*]TD!dot-3! ,@@"dihlp,tmx@Ӿ߮$\]Ryr'4][/8%z><ө6Svxwh{9O(v|>uLhUsH+=z,ipoq^^A[udTU~lTV=m\Y$\F&=KwAz+hPh"lD V.{8=oÔ{2l>d xlg @JS Q7 hR\K+p@jԧVz5ҩV{TXh: QUpUv-ܴVF4k\mśWjٺk:ֱL]jY Ng9zYG鹴ӨS!dot-4!,@@ "dihlp,tmxo ;;.6g4Q+6,x[W0B&IOw ~p3PjZNum*z~0+zQ`T@fAr4(3&A)ˤҒ֎#٘Vx}}MvW}|lqI\!(*\ȰÇ#JrTcae(7F#{8ƣRr"_v vRb0QG4\26tbys3nDoȵK#͞LTqjTSl9tS]VV-"Bvʎym,)q>t0O̹ϠCMC!dot-5!,@@ "dihlp,tmx@',2''-k#p*`pu W1 `nwm6k-v'{eo)T{{dzg7*x6g^b(gp{wǓXq$tCϟQ̿OJ?%SG>/==ydP@CHx5t8.>)Fa]JCYHy QW@ʤUYT`Qi8q> Ckj*ݜǐ#KL˘3k̙F!dot-6!,@@ "dihlp,tmx@O4 2GPsR]VSq9P ۳\6eqդzwu(uJaadx7n'fFZf{am)p|PhmySO/YX~ؿBۓ4=٭=1ӆ})|' A j#Ѐ?L=48SŅQJ>|JdW{*^d^LLjۂцXݼz{Y=vR8-+j`&H[{B3k̹gf!!dot-7! ,@@"dihlp,tmx<` @)?rƥNhƞ^4ɤ̭z]ϰx|Z1; ::fx;-`kdU(o2`<[<&Pe;R=@])eJn=϶Uο'³nv_heDhYPWjNdjPkb5%! <;oHeh1\yz{M}paYe0{kS`Y7p6x|rv^@m"@rt:j]dbsfGi]O҉TE3FDC>[;i'O*͂A(T. #9H‹ , 21|0]2\EA0 !̟23XҔ;5A1g)ИUPDDr֗]$㱏@B 䖈n=RdJBEWǐ#KLr⾋7Aw[@P;{5ҰO Ap)h=K7 7*SA[ teUxtW{gWy.^c^ do6w#/o|m'jF]_%Lg88ZlIdfTه ($h#!bamboo-1!,@@PI8ͻ`(dihV´<p%dǦ,f5k9N(ƚc2zF+T+wfOub~6aLp2tok-Ym\M{rP-PYY_Y`|~-¦V_ǺaϹrk2}IīC軆ʊݨݱyẓ =8Dq /Rx3b9" T)4h@nrdmQ Բ.Kb8o!?YT4KT*ԨB Z2(ׯ`ÊKٳh3D!bamboo-2!,@@0I8ͻ`(dih@ 0Jslmz+(agL斓DS{! TpSRf0VQ9F='EpkkH>a v}zwtmc!bamboo-3!,@@0I8ͻ`(dih@ۮJsֵz#@W w<-mf7$N zNn6’3T}Hw,_ :>~FqlWlIrGnwj\EgLcd10?u?ß+ǩ*{xέPX!bamboo-4!,@@0I8ͻ`(dihlz@%'DO|!W+!Vԃ7Pa3jȱǏ C!bamboo-6!,@@0I8ͻ`(dih@ۮJsvI_%\DAQ*gSgkҼ&-F Rjyhf+,hpi]S쁣|ޮ9x01DQ>B9=PN uSoc[eK=QA'wÙݴ˵n淨~ٙdž49\x繃J\ذ"+DFamTp䴓(S\ɲ˗0E!bamboo-7!,@@0I8ͻ`(dih@k,S+[Iߒ\A(ـtDN J먉D\ؔ6}ZK(. uO^{Hw|8PIgQtYhNO+U872:9x A]½@j(CY_рz٪Ϸĸ**We+s1}l=_#[X$LS#{ɓ(S\Y'!bamboo-8!,@@0I8ͻ`(dihlp,fb.׉"!P, ;d)L*ۓ8M5}EK۫R5;/㛷o7it e@Hu[}^6~$tOvxra%Gy7[5'; |Wϥ{4# ߻fQʟd 2P1TP+Yib=zbN%YLHgP-a)Y?.jQ"@9:U̒#6CVs(K.=,5Q҆NVtu+tPh,Ω]˶۷pʝKn!bamboo-9!,@@0I8ͻ`(dih@ۮJ37מPVPzB42)PJPZf%R{kf|wwJÝǗŜəώֶۻ8jHکHpSO "KglڢֺZ7e)kH ,(p w}sb0V^eQ/%,Nۚ,B3b"YmRܸä4[Q2+PE2ӧPJJV! character-2!,@@!dihlp,tmx@D.aRGdJɬVXQQ|:l$Eqңk:\{|E~qV^Oik xc-flya;1=Xx'Q("#O_$d"&Ҳ#ͽ߱=ԽFWAWcXS #r+`iE=d/ͶgnDˣGE,Dnn7isk8 k.uJEBI\ONWTk5^]M*ٳhӪ]˶! character-5!,@@!dihlp,tmx @nc%phQGdř1ӧ!*%sJuLN8:^'jKrr9m{[}GdE$4t'eg}_:Hu'hoW&vo)|Pin"HiR\Q[Ra@mT#Y{9*7?2k&.{+("@-+HD/[v4>u s(bDxb;bpHu7|H >+/Z$f}?¬m AVD3&~F;e߀,-Μ {iFXI?ZS_OHVExC{.e޸8#8WnEǐ#KL! character-6!,@@!dihlp,tmx' ?*QzH),PdDAUZno:cudq-5\ynRyEx#oUkg"Wu5la%lvPUu*Rq)x{IF-sniC'+|~0~ã)ǵ(?y—")T-*{&`_*A} @ 9ĖCI|簢lx$xqa{(g1"~9j,wf.}r,A]ր mO%-r:+#6Z]Y+Օ:h#~Mng˷߿ ! character-7!,@@`!dihlp,tmx@8,qT2fTtMUs+V?Q_4_cTnMiaڎyBZe6A?zBuA&[0a{S}Z,LR%nsxt^w5o3T"~'i-c½*'ѹ+p)߻%"=>@lX9VN``|H=|:7FƚVj4RcFdfpu)wLs MBTYQ9UIP!O_8J]&2Eڢ8yPֲhӪ]˶۷pC! character-8!,@@!dihlp,tmx@彩PѰd#d2ѬV/h>}IoĶ04j͂ C>TUbercwU}stw,^(W'dN&W}R`'Vz1Li];4laT[3c:B+%.=ļig/,*G'?"JK`|w_ ITWaÄPx^B`e3o6k<'w)p$pxe ͖-O lIiRF6r4`΄ӭ@zu:<*;e!qx˷߿! character-9!,@@!dihlp,tmx ?J x\lF%^9N^! ,H'~@ih#0;t{0'fF"2y1qŧ)E+֤[0V\%KY`nϿ}rt$l}xvyqmknt¬ƼľN̿$кݮ߰θ 짇ޚ:@Ă"ZDHqcŽ p$}&OKI͛7 l#C.1I(͞/34ʔΖ#JTX T?@mիҲ.D++ٮmϢ5 gܺP稝KmXn+D`jD̴oS X.E_lT2gxtsQW겪 g>:xה [گޓn}M&5C_\eBל> #_>G־ܝ $ȟ_a&Zm {gyЉg `wM]{c xpQa]XMZvۉ1*8[|ȖwǟdCc +8zT1x U7QXT-Xbx0nY6k:%TlƩsف8!&hN`'CibR%,(Y=IjJo0NёE%)>. J㓇VxN%J!^YfsT{qrIS3ui"{[L~L %Xtc4n饑uLI/&8- 0TjRmI#SZ6@밶Nki(T,)zl,"ln+8}.U\/̯ʫ6}t+7koFp}T+oܑ Wkrox' \r-]֛X=J;՘BDG޹{\޿ ׉sW@W-tZL IE"UɃjƼ/5NV݄|KUrvi3pbØuE@_f`C2A}?-ݭ y_8  o)W A),X6jWF nc߈=،} &>q81 }HN|-! 0&&CL!C +o,CXcQ >FUF+nf[lV4}N6@汌#$L'H=3_gx <%h<Ϗ4* 7XM0! %f,E#J$iBEGz안hI]C %cv踒l+ai%V %-3a4%K 8/дkeLRMa?1*@*m(5b5&;u@MAƄ p)QEOd=g2O MՉ,x& AŊ ]JTICkm%Hhåì#YLb2.%)6ڮ^S6&<7GVt \O} פ ]*gA,DLѫ$Ej?ZY3kJT0HmWVbXT*@M17SA%Ą擅CZQdҵ XT+ԯVRlc(Y8rRe~W4c%.9R,5ʂ%~}'ߠ&rDWmytNzDUqH w5};ksLʰJ&v*XE,Oء*Pi)/*0~ӨnZZ~u(C(]3エ{Mno#ZGbQl*ům;N8* =[o]xI#.+24W=G3391 ͧZ%dq颖WE -ˋdvY~W>>b>"zJkH{`ʔ`^;$Uُʕ ~Q# ǹ 4gU* [gh467NPxƚ%ZTt^t`7Gms0zdWUBk-!B+=2GlRwA}kɧ|ύ3ڪ'yϰ,vzjNYd 5vK rx'nfO9v%Rf8|^s+^'>_|3CH^䷤G(sW([U9Lc^M6w9},gJ'v7C:z {N{dV{^7p ؁wk&T}ͶjN qySyYf&|z7WWw~ 0~U~wIk4ig[lsmgUuoJty<&zY8Dd_HzL HF;H)qQGЁ xv7T] V.bwH{'hWeBYY0# {|8Hp=hmYygm ZXNHLj'U$4n6&=&\~(e X̖wA }҆| iPՍw}7 Fձ2eIÎx~=*f[(gL(~4<5npaDh[s7yVO(tr5! I :gx~f|{ȇ@cvh#f6S }6hu'w=ɓ@M$Dp7A$8X7y) vZ%g~vaKG1C(wV`N iTc+fgёd5Ɔ8vX8U!)x(4ܸ})ߘ9`ӎNw??W)~ѕg<9~e97okmh5bVX9x /ИjyB9|ؒ)$ yY9 Hyip8([q7Kc9/ip؉YWLZل*֛&oxUa<[baSh# 霘aT{Yp '`LF99<>90)綆bƹR}SwEJ6iNjtz4xy/yngbm[ٛyh:"rvD0mhaUm˜!tt*zK}uK6D)8Z;Vz 9I{٩?; #w˖X1Inuƕrg9aږIvo%:Pa~Ht3VwBƛljooTpbg9)OywڙǮ҈ D(*گ̨Hɥ?ȃ!5spSz3sڏdȜ ҩUtzjmٱZЉ {8 ) g,a'{չf[:pu x_ZaxhD飍Zhhx8uT6(DBrS/յ: ++[xgh1bak oyIg/ aXg강`I |uT;ku+Wf4[kV k0!G =¶/6lZ`L;)u[KKv:ɶ+˕&K Nt~:5fPqg˺PUs|2hxI7mZ%DK6X]cTdpxpWs9 }e{( [N5AzA봅٪\*◅ k )%Q땂8[iŻ+*&v< Ae`ǣŸejkbMä뀚2(9,\+{4H>#● $Z"BDf+&mzItf%_zaTcTԋ|I-5R7\epxd峮6WDȮDk?2aJ끈U&(!N,fZ{_8'ygY+kӶgi`jctL*:ƣLOa_˼́[Hv|jf44R| R%$Z󈓍!q:VO tg'ȵKx0`B 꼪T 9˴whl_넄5,|Єv̭-.$;/uvU=;oLG9/J_iicme^Oun:dTO sDdz/tyH+?o/OoO/o__ٿ_jޯ?q/ +ۮ"9.]py;:/̈́FxƦ3ԚjoR{ceyxNlw^]SQX!b""W"dd $%%ffg(&)dfjgbe%nn./mpbp(1r3sqp/5/v.2Gx'z:m{zw|)|<<}8l~$^Aq +lТ@A\%F +ɑɋ%̸Ɏ>EH9a RZLB-jhŇG2E)TIR]:*֡WfʵׯQÊmJէh]{[p KWһEׯ[kMJa.ڸk["c 6dT5Ŭ3Tf=͖d:LЮm6nHH[=⍐3@ϣ3N³kͽ{[yӓ;ѳ޾y㋏?EX  > :'JQ.xʷahha8n_@5x#9ȠXA 9$Dc4$C"QJi3NyeU%;Ƙd]j_BI&cykJ٦:'Z6ygsIVYg[y{&Jgg:I'Ti'4z fb飡zfJڪº*Jj Ɗ*:뭬Zl":l.i*2+,N+k+*n"j>wJ.⊯+mg+Swmeρ`8_W[)aMӍ'qV_M7Sr9v0؈ۘz{H>w>q?.^._4D i{3tA[b:DÒ'GK;7Fu`dS&䍾F!Җb3A2" z0++bj+@1Y8Q@Vq^㐜w85RyK8FK'!YssdbI> _2JZf\/^ (MiD*QlfqL5]&(b0 JӌK3WҖlH,ZINFI{ȸͲ u9NBq\iW/H!Y{2Aa(MH %$+ÎIT j'Z>^Rm%D?X=}+i9@WZQ"MiR9tIKw | x1hjUG5*zZӦwj9pJi ;U'FB'siMe~wqό$ZyõT>ckDJQU[Wf~4B8&6Z2Q ZІv24Uel?`y+$_W^m$*)}jl1ׂ G˪ *zEr.nGl&{]HA t=;]5=m * ȡL2G݋W)Oz(u(1f@~S:;`HL3gR埛[F Sm/*w:qnmvҶҺMgg sbWʘj;֔] |$F]PzSF2wqe'fX.*Z6ʾ&GJT2*{uiS̜iYjmި|foxTB^Ily#SEK;mjR)}末mN;u:KX#IDud(ˠk{*JY*[a%+F3}leRevI`+ Lykn 147s'哳{V*]8M̬? PS أjUsY[LqX(9_'ۇ2H74nw[&4W6ԕqh^{&M٬fpOZt=a _SJ{%gl%= C˪eO{_r)5?^_V>ݏ)A`7VQ>RO_u,Yޜ7dy֣*cLTg9ЙYUhធɑF)^QSSU9 ]L)@tE3)]ୠm׭-Z-xQe W_IM| !p[Y-p% j ]둖Qy(Փ F ̃˼j 5LN:\ D= i _4USqKaVeEZ }dOeF L2!Re2e12$$@dU5Wgec7$E7O"! ":!!`iR`䬑d$im%l~YmLܝId ]DZFQ)e#$&t>]紡^@ b$gffMމl ) v&k['-ub{dUe"HѣV_W}T"X<-YNdo6ך5EҘ\:q*`&)fͻM燊$_H^% egKntKh pc Bzg5#1e c>␺>^khs"(U(njnNrNM(P8:F lR5A)wu%u6g@gaaߌ&T#dc!z!8Q_Փ¥g~_}&DjqV(Y^AEv]UhMf, U-E %*ͼh)g'U) ,6U*UyHx~t `ݣn&U`f! $f٪Y☩mv&K-)h%0l] ^,flFLłKNbrε**8]e zV_SB'$RRgb%:eFq:.O̽r%Wv`Ja ]imvnˀb*ޚz*:$u( v Z,:+AkI(]pUq=L Y+W9yOZJQ&q\&\Bi#=J,(tZGM)} HWj,)RV-g49-Q~jNuk&鞲G(^s"4IBmn &-/)ܦ Tù%NfX:YaBeo,+Ѭ'L%Š쫙bmJ!oMmEh.ZSV nJa%#HnjdJ(k^®(o Ɔס0pYN*B .NOm ez]vAb[^~Bpp(1㱦iA&$zMIVXꂡ!Nl$1baQKpzm/h =+٦m08/voQ #a !R/^ݍq ߽Pp >le'T(<^=F -VXfo /. y^d&Wm gj+#i2!01 .Iq2Cmks}'ݱp%A&! Q o 稭0[M(ge):)*(& Ȳ4+*s/GCcpe}"3 2_ .H3nvيsFQ8tMϡ!r3!A sZs%T i:iNBnh馞jZꩨrꪖj謴Jhʚ맻^+f찊j&{(:;,b*lZצblnv{ܖk.*.+»K[. |> oo6;1^\ s 1|)?r%q#23ל&tBMtSltJ1K?]tPOMT_XSPw`dGJl p=r}wy}wM7@x/N?θƐONy_o^cK.桗G~ꗫ:n;`;Ǿ뽯;>蒳|/<zO<8@}?/}ߏBדOأogo/}7 "|\ @"P  Z 6ACXq0) p,! mANPc0;" }? ш3db qwAF`TE*0,ȢX-B@`,#HF3qhh81uE=2}L X?\$#yH`%/y4ґa$' E?F,%%5IIr'Q4r H\2|e yH_>|.OT0YLa3EYM6^3\&6Mn:2͔8ɂ\T))JwҒل,IJ{vd'?v @KIOp fC D`@E zJ*ӢCIL.TCGzҒs =%җ4)M)PjSiAxI4-%j@SBT &ICTjRT'PJɋ`FHϩJ(%YyMguSUkHV"u7-)1\ҕaAwVծ܀azTJ1ݫ)J)RUlVt%FIVo$VNe s H@dωYUm7XV5d%KרO;ؙҰԥ.)Kjw2Ŭ;!{Ne- Ts,EX)^nUWUJը$KDʗGؖRy}t+sIKWwѪŖ5X KL7-/K[$w-Y]CS96%{%^E-SwFX0(_ѱ8tmGJ8UrlMW_.0\3h3ZbVXNgfWRmn1CN_ _o19cXw!M(3z)RUEV_{x̫r?j2oيZj\S1d>sB`~l[1Stkiaޣ\rzx爱m빱zmL8+(v)=iJSrƕnwz]tR =-+U.{WZ g-!fzvkK!/c샗 n5I;Z\"sQ N3nA\+6NwwN om}Ki^v疢 x;mxkP]0y5ϾeF\ `˴]P 'w<9Xg^CnŽmp;C[GM/-i]>Wﭿk꼯vK8JIŷ73QZo}ewFzUnu?g'txFJ&hn6v|6Pzvin$u6obga iJJX Hg_e6}OVhow1HHk7~ }G~gPǃGZ֗}}O4wgr^ǖ}w[쇅惛[GYĀg|dXzņxh4zGu{ vhwxP{(b$HXfXn N`i_qur`TXFGhPHwITuw5JP$}he0GIGfPsG60FEkOlay*y@i8Im膕ɘ{hc1ևu.ʼnwH{0oX׌+mN5H}NEUȄt玥hNVl%}Wx5lj1gxHy8w~`y gfj`ĆGM稀&c(!ٍxoxGIh"NbOՈdd{hv{z X6{CjǑ8gyQiHhjXjC4k([' ?xZN\cf`e֊ywvjs2Oy鶀((I 0zV3II&Yc}(×I;򄓑yu+iaȚGeɘƚؔ(w`Wxf7.XwƅhhUT5Qhisk||ewQWEv6k9ZYTPZԝu_rrDaA5Ew\9fh8syƌ٘AyHpb$VPuKWzoIOg\{G@)ڙer)M֐ YY9MpkipY2jqQ9Qo$RyT)[VII1ZFWEɞgɥɟ0i.s܈uh$ ʠcbzXpohȁD8W4tid* k_D_D{EQG;>  鐎E|EEuXm>G窱ygYn k(ʪiΕtu_w|)~؁ukZ9~*Q*p)iF,ʨ_YFZXDjUꚣXFnBvHeׯUzjE٪ :Yghٶ)kʖ=FS*XHWűleV.*?&x9ṯ犮MڮkĢ4kN-k`zZ5_NUV9KdY}wfB `隵^SdުQ$ٰ&_zmˈ1*oψhHR|(OtGk-'w{sS'^VUس`]KdC&pIXz~0{X˺. L{Ea xg{j!{#/)'mxDoE9zO# w$k#xq+_f8Y{:Gpe.+Z6ʵWz[yʜjjhWe00; {K|E k;{D$#omNkXd:uq@ -X Gy[u;V\CE W|V<4\I.7tii jLkaH"9zsc 5oY7|7$ًK5<ɊU罆 rZh_Q\LTT& y7TX0[j ˯K7[gqh  9+zb Ǿy%wy fj XeI{bE=>M  Ơ|[]FJPһZY̎qΌuM\ VZ젂Ii7|6yܷ5;;ӊ:}FJ-TС H ͵̮Zϭխ feUժlVZj+O mV̤^_mn-ŲcLLYEU,Vj)'?f.wᦘ~芮Nx}ƒh~X>>z{/-0Yj[EA؃Ǎ%JG/J0jeԮ5GVŮpj_ d ћM%Vy3g^sMnޖ^zz tUvݶ_hy'I\+F^Dn.-<&FI$ڛ7sd~ٗeF9'VYo[lofHxl'|v%\' \1߬͞'CUҎ tnBo. ͌؈KRgpacEˠϕj [,IO vWXkRo(LDռXɎwNw+^8<'#.1"Ւ +Լ<àn.VZO9:/:MUs44HJٛoNMIC5rjr66iy)VU>]xct#=N~G,FL6Y6T p h`wijvKu6œxF5DT]Wbw<:#0n2j?΢TY$v&UW"Ş2LP%]Mz]ŐOy9f4e#bGF1ic j|p0\&UVy_vQЈ"p1cZ5h"΁GfC.Bg.XrKRUFjhYCNՠn 2B ^* (~g5 (f` >i{gYUj%aS>;ꪑ*hl )>pHn,ޚI*qL("eo!pl],:UR24r;f5-Ҟ[C:>G;q>³Tt990$Y/(2uu$gۉ/.Vl6;!-|㪓kG<qj\ 6\M//_i/B(㧖v:.sn95Sa9UH(Cݗ9#@uP.B/jz2m7uͩ~̭}֧8}P?Ê}z'8Ǧ5?˓ r7L@bYCr@ E*^Q`FH2Cka.Bo9%l R푏HK&_ 3b1Q¤5 "Nnғ'E"SfH%*F|#h9/$ح@Β+1S>qr,[2L> 4KYMb^[[0/Lz.=e9:WBvtioldSg:4O0BЈF;ΐL;OoδNstIiS_ՔVuYh=zѱF ]kB:іwkOסv\ٌ66gg?٢6 jjKڥo;Mdr;&ۭns{7u;{7{M'Nov; x!N=!ot''C|/7o]19Ss|Aoυb0W:͙sQxѡt/B\Bt{럀 4 v[E\]SpG{Da;nKp$R.̽Ty;t|ӊs";EgӋ~>;Z>i[2MW/ikne$%Q>{xI_}_=}w}a?~ܗІ,~ .?g0CkZC~  5楟%E V^ ~] D#L_B_i8 O\1 "_ " *R`#P :_Y^B^$ސB6L=BZ( &^9̌ _-GC!B尡E RvSu_ aʡva ӌ@a"Pit M@!pa"bہa` ̨!IK@$" ah-MҤaXO=a" ")0""2ZbFb6Vb5 bA@'(_; p p@+Gnd:2Oq$#(v Wi'4'if.RPU^v&5 /B&oz0@H@o:g<q\Yr>WH'4D&Ej3euR(`wJ$F2p@<@Bf7uz@(#;ɧ~z>#+vl",c&=hAuE+b-"m֢moCʐ(pj(Zީh\*OyaोRgL'67/q`6JB# q&yd> iM#zrɑ ϓj͒ ;h"$<<+bni +- )F#ki4BhJRiZȄVdhYepꦢ1G)G(_2#F]ekNj6"(7jjabZyM qO*gc<$VdjƮc4()9f♾cQRe_^+順)JlҬl"ԡ+N:*Όbhmh*a *+C03=2lcX¬Sr1j"-j.%=)+.N>k0GSJDh$n>hެ>*NXz+~q,LƝb*iFjR!hL!6"k.&QHl@eٺgcr甶.}~"⧢mE(CR/)rnɘeک *sƥ^zB'&2)!62 0N-cR"`L @i. B(/l'*d& O󖮷 ^ChoCa>brґ',b&,n ҙ+@&'s$钎JaGF*ڊ1WJ/@j+Ƣرhgw/v:d\([|o kJ-ʬZpnߟiFl}֍Rnw2)0Bj]0h1"*!ʨmvs Oq oXr 'Pۚ`l gl>%1Ki6d ̨E>XUNMhQ XYF2V̒j1zn:˯⊦K _10ʦr 41,[0Qe cn 2;R>m11Hs67zI4g 4333;r냒ot*]90brr&媚ﺊn"+ -j1Hs4XS G ᎩCԽ,s%h7@ x'=O#'<)ڳ)=맡v >%RQi8)t=c8nץʺ+EvȨ Q؈ReQ&rI(.GRaXm6h5uŌg)]_&$o|VN]"#%&pW'X(=bZ^~#?('%4vmfƿ65{q;OveYZ)냫OWJ?{ƕC Á}.AAC$J-QB"5ȜHd T!Ota8 "JPt09ARLCqԔTKӟ'ŃgkUTBX`MzrB*ВU)"s¡5&Y23q-5kxs"Rv pJL Xfurl1䫇V FH~Iӣv*}5C[wly$jK6/ o5 9+4-gsߕ~+]Brv:fE 碀6.4x3tSJV1H]b>%UiYP@Wih&;#&TMiMg}vh_ eFJ5LG3ԡOJ6GrL9y^cR!da%zѣJV0RޅK1bE)GYnLZ4㨨,j*? _ 1ٱx li7llhȼ$SQ]8Ͱ{%Ug}Hjֵ,v62egͽ)_1c46&5˚|#9B-_#gJC VnjY$6lNǠg*˶j㖽̈8>g }Z % qNˤ;CuU#Q?}UDc -Aw!4G4m̙:͛MO ٓTh Bqlyotg!;xNUۈ\Zl4,`\+`1{pq;H8^ep$ASv$MEkڒUu|ib7O' | h_-49JB5Qfd l9`8"I>et" ̏{ aWXlI~͹H0< H"Г8Rx8V[()8ĘUCY*d#0܋7y7zY $gNq"DqB̈́F9:*vv\0>6s JGHRY0E"\B&+[&1ZrP:"+DKKV"  \ fK8ѝ2 rJOܢM`N*K4J CeCܐ)wB5/iNu})M>~ 2Q sX#*FΦIK(jdZ7l$={ф.H~/>= Psk_[6665`d7ٟ)F97p@,efBh͚fxruoR] UTH rKZZ%,LJCܚSjʹdI6>մ \JQ7dAŮ::*Ҽo1h>ʗ7o7[]~dE[񮶥Uye?0:ͫ~G"0xO2>N458#~`4yp{2FM#SL1A[ 2 lL+AdÑvc@;~b-Hre/_f'iSf2=IDJ[3|g{t)K59|A[xns-hEOaݍ3c%'z̗vthKYҧtAjHZ ijBѰ.Cmj[սuG]Y|5kW7;QveOWϖ-lȮ&mU^6Md3pvNm}ow=S[v׽ov ^1@ϸ7 u"&OQ򖳼)9K.󙟜67ys|89}.tR}A?:'FzƉ^t ?ԗO="^Ǹîc{ڽ]ozܛ>ww:Ѿww{>x3@H;o'G򘟼]{@?Џ7=Q,0DXFxHhL؄D؁KRP8VxUxDZYW؅^8`N8dȄfxTj؄i؆Ep8r8JhIXspȇmjg(d!;xmahjongg-3.7/share/tiles/dorwhite.gif0000664000076400007640000012456007034721377015060 00000000000000GIF89a@@""?! xmahjongg border=10! xmahjonggshadow=0! ,@@0I8&er緾o4){uݝp }/1'&6k rޯ6,3ܚ|N}2n~Dmw(xp 38=!~’ĤǼɨz|{فm(ՋOr\|>[h. ,/ j4H%tbCc:'TdG@hQ0(@C:أ(9S^cǨֲLgU]J,Zv;Vwj l:q`>|]fpan2JݴG^N\UNV3z?WaPimsd؝zC*o0~4ȩfJǍE9Z'$JG~v\9rb)*KVꥍZ,"ksk-ibȞv+[M;*ц혐av+`(\V 뮥ګvsϽ1+6 ŧjk',d>c}R_N F|ZrUkT֤Ap1/妜0S\/ =ŊJ1`.F4J<:蛸>gיJOn6}7ׁfSp:k;0VM|rǡ}~:Vw##ր-p݉X8Փͭk`:vzb<=<2,<&#& p9_ K_i>k/%c s\'b0o7W~˼Բħ $1wsxpxԋh=1[ٚ(/,I-h+no1!'@Lgؓ نqpl!fZU97}2KLZ^C('oRâEPWOQDغH]15:17w?^3פ]iz1=ժI<=3TK<=.ҫwu ]O78Pu'vkZ<f{ފrm;"rq5m];CP9r5/mۜ4R~yU ?{)޻:)R9U9e?mYi8ؕxj(zȅgɒ^9>1Ci{cIdx*]}/ |-8:(udVIE`9VX]9GJ~ٵT蒽XFLO'׸b4gʕkxhd~I~hSr؎Dh %DIhُɖ;Xٜ ~(rٝFhW)zsj6^ɗ)>9}#yu<8m(hjIșH+yG~OHw6vw Xؔٚ7L֓9"ʛ_orjْcV Bșkb6{L9H.:xeٝ^;jYdX3:飮x0j٢o)6V1Ilבi2Cxx 0+xB' gj4yCA))8 |1QȜI eISSهIs)LWjPJuIQjAvm٘֗f¥ʥ`ׁrntpo r57z:nYjz(Ny~ʦ$zڙsSnx *(ǧaz֥f9zVʪ~{V|"JN9ְ&kz@:`aRWZn$1Nꦍ IEqʋy}:ִ9y*@ʍjaXi\ɞixUDHf {>2?$(Z!ȺtZr[d 8ˣ{@79@x awz-^_{E vgf ?y mו{{/k(]xmry^ʶ\[ K뫀K{Y]q>T,#k%wٯKf(f-AsJ+KŸ[QgAŘ~U${[[͹}N+wdϸ pzvY [vȓڬ+kŎ8h˽ËȻknE+ui _u[K+{η[y뽨UtyV@YAƳۙ:EZ{{@<){/ŽWHdZؖS 2VZ&,28z̭]SBث}m1e|4cyK5iLiݘJ5>VH`}4ZցfjzÑʍ+j:2 _v˴''pډˈDܶ_"\3{,@2\)|>cݜs:wٗ>;x?xTTO?7աl.PkغBõeflJӞnbjܸ{,-Mڤ=5 ܧT`чe>ݬ5EM<%Mދ}SS:K9H@Ycاܷf`(̊ۆJi-ZG[|XaG~<=n㼪Yck O^ ahݴ]6ֽY ^S+ry婐Q7W1]۪}/ӠU]+Dcr -nNB~|Sh/,ڸ^ԩG".Bㄹ7nyYtlC/U#ވg~cѬؘU"UJ>Llꈉ G߈-gҮlg 奞f} , 05h {1 _ғXqYA(6 ">]$2Dzs޽->V^ +O?ي.Q~>@W]o 9zZ@^{Ԫt JVxƮ;ɫRL._htfN! Ė c=ҨM!U(]Gߗs(ۤ_ߩo۱\oYʅ<Ŧژ|8m3Lld >]:/6п^N/嚏D|t4C޼'^IE-.an'F\'fz6jMDBK57;]K"r3aC3\"UrRc;orloIOw] *87B3DG40678J+ OOFBQHPSQNRTƔ ԝ ۉY(+ZaƤͰ1dbf]4`HnrHkswܷq-{ku}lgxCs)YG .MN LBYl&qA*^9J$Jb?|d2T(D4i:i)tSnFEknBJNbV]U) ^yyf9 W4Ϣ)Z5%d鐷/_pz;p:USX?J>F";oYͦ(,LL['-hʔnyfdI9PmGo)TxАՉ^+G[5a5BӼU˱)'Jޔo֧߿ o C'$F12ԇAjpC#"- B> 4ďʵadEEPcu 7;EG+lR2:DcD"e2**sMOH $.3<]L%MŸCRu G_I=]890#cnY-}4t9[p2ꊝY麵UD;VD PWn: 3EN j_NWS, PҀ ed)6:$,LUģ\Qؕߋo횗^d\[6^¥:\.ɹoLs;47F2"Àh=Rd[zk1ڻcW;w/P:caNȤ`.]zxOeӒQxb6qL-u\qh蘻e5r|aYPYSKei=]ϳخ]_݂W߾Qd/{uqw}xC:bs/|wL幑~-`86ܯmg6 컩OwpY[%bkq j d <#b6?e$T@#l`'a!Ig T;!%G2au~pf6 S7}K)ȡ@"JGCb1kA=8/kBmfW}ڔd6M|PG?<ɌʳԪ9Z͉B"B58[{ x#y!>| "$jRhi=Ys!_2ù+Fm0RK!u ;^nX<- OҘ}fcgu`h>AOۦf4vT'OIvwΌ`jXϧ-'İYMoQ%53˜A,줌VYy%dbEz6LKXJ2 )cϊ(;U{fIF1f1e.4(})5rI3D")?ms&G}x_hM&>[Y _+Y-JSd&GvZbү]3wQ5҇t>AUf8HʖղlZYft)gY>$*+[ОFMjq-H3F:ׁ蔤0 [mL+5j]QGo'nQm htݼ !=Z]}v4 E_*{h͑i/OLּjMgޝ6i8in ZV"l ¼mZն&'u*7'p+jQc=BG0Bb>Vȇk+ôHٕUc尠P!ẚjtPMjRZȥ`' 5/ɿp'q3-;)Xݰ[f yebA3Џ6lD =)N(JӅ.cXj MtT$˫$ʱ$F2fkxhH˅Mᦿ]e&d~QFe2gNi,y!qq2@5-GsG3:`_+:τD}?!`LƑ`$s`KRjA\N Ew#57T%4KslrꋧNd:hi&&Ch6wQmkTyu0숏i٭('JMR-鱅/=cVM _&`=ZP6\QPp˳{.cSNW|Y\ "(-9O[ɩ<`ǎ}doq箷S8굮sج򞞃gom Z|vOe^υ*yߏEJa=޲VNzP=USX- >W ;`0?W?A`MuayouBJ3J:!Z)b/{ x@yc-H` *=3 +=7K @B AA{A#AC2;m+Y =;@?SB{Ã'=(|BC6t|+" ?zħ{:X "5+4̱jkTPC;[p9>BlB  3CD4DC$] 4F7E|DD !?fbA뛱2 E&<4O\EV#KEEehZ\0E-EU ݪtE82A>e[M d=CEF?3 G'FVcH4f@|IWFr|"@HQɂIH#;j#IǚʧQʕt;g\R4?}\EuFF%3&92WdyXlJ#;pJ&JtƬJ; ;T+qIKK%-^ `f^ ` N^.MXx_ _a^~a5_!a.b\aFba'ޱ]!v~b%b b-n+bb#^aeb-c$_b ~3c a v:&b=a>c?b@fc(cBbCˁC۾a ~d1ncUNbGFve}XW&]FY\c^N_eHbVEf3ec&gh6ufTkVff2U.n>rfq.PNFVnfdu^avdyνg{~}gKQh8e|]}hfZ^.臦舶fexfggffhV葖lhMi&[&6ihF&vᡎߢ>᥆bWz&j jjk"k~kN^kF뷆6k밶kklz괞j>kÎĞkvf.^FFʮ.̾~ԑVTyHmئIMNO&P5FQUfRuSTMi>Q˅sd=%hASo٦KS@]6~o;dP&ew.>pCfpp '5jvod>NKOm6q')C?`nFxDq\.f J-`[J@N&wqyɴ_rr$N.P$r}p4G5_q6{2~83_53s<_{;t$b%3:oܕoqntI7s7&RF9t2QNM:)6|/yW ByuoЖOXcvq!`@bG5zvJ``yʅ tOzjz5'>:s?w7W!7`zsĆV{'%D<[$un?&<2xeIX?W.twlbt1eH080$>XҤKs؜yEfĆMC)*nnjTQrN7uTY 5WWTMbXeXbqg#}`֐#b-|ͨ%[-)ܙ921)NMƧSiQ!hw^(zYv'}%hxzƖ@]^&c' )FU]yhMdfH.#z:j%AZIlQDz묚n*nVh-cxh߂ˇY+Ή zKJsA㡻VcN+',cdagȭ *Hưy/a6,U{rAM.ygoHN-DZl0BH4CFk֊=SJ+fN-[J_-CrݵTUAXgUQ+8l2K+N \)Qj6Hv$7t׼vg ~HD ŸlV&0u>r [԰o}on ,PPT\?붋=^Nhe-:>|)B#݋dvX '˨昅8mYǹ U8.>c#W.(?-/ 4^J„qD)[۶l[ktoZg~VC'H;S9IIoRzA, cXe]R!n#`"jM]tDŽqQ{㞖pD; !QhHA-w͚c!H2 I3Qrҕ&HCbQ#/qw _)LH?)RV-6JꕷgX8  [#X,W4&pZBDg&uQD=f831$XwӞ@VP$esX! >51kx6 N@@!Ji90Qx%:ڷ) ؼ1+$ڙJUa]/w&vѝUWR)NĦ'Y/sb`İΦ/m>b};B A.-6*Thz]qU3z秢fizQJ a%9" `TH;pAfh,8 ̈́ȣ\N]b}tRU7!bk\2"n!)]iA@l28ln>iSt}cnjS>mlz}z2)2qؾZTUp1iS1˝n 3D%YkdJ Wcl2;%\w8 rY 9W~Wl)"y)Rr#J!έΓY]ߙ 0E-LQ =W7a"RD~73bs&|FFgbn+.4 N^y[dWSVxK])IHEWZںkl/{u\쀦'ivj6 :k`ܱ\ނj{"a8ЌKY4 }$xooݘg6iLge.|qolf>vxf+_%YrB6$nlKwP-ȸScYתBIyFEs,B;웓7@MoOƼu{r*b1J}Vxky.۾=έX}3K; ElB4Oym1YoC>ٞ_~eMxa`?ο̌U v9Q\5"g{P?wӛ~i>! zi;-93'+(lC*쨲kc38?^Z77vGYkY\q5^YU Jy_8l4rnCFTD$` ~q%~I Y`$ FQx_UI!FE-\ @^៝ Ŵ IzVK͌E8ﱞYl0םl\su2ak>2QRҠF! c91#\<&^p ҞR "+r^(vOظYe9OqÅu ސm aC dXDOQ9܉"- …]9O = Zʹbkmc-ȟA͜YBVDbA"=t蠹["QO]ݑP!0P  2 CU5T%A5^}6Y4ۍjd&a9HTSFWmA<ڏ d:i! #r喩ɡsx8cZ؁$fڙ@I$_bbAG W94\h]MD n:BALHc+Mf,$d=`QMe3Q&)y]E%O$B^Aţ<^@Xc'q>F"+?Vt" Yt':bY^`v""'Rz\7`^] "`,.Q}n'rJ]#uT59eKH"h hJEOh5sf3%ʰ!@Tl6֦ةaNo'Z$@D(̽(Y[Kh%9  )ZNUg_Mh`dE[g- v^b@-٢)E]Uf $g\Qer&EZDڙ2*h2[ڜg4R#j!!H{OlA0ә.):I=I AUnU '@2Tg/>Er`@`q#^Z='t:Ui^Nj !}y{,fZNdFb|EF2*~++GY]9U (d 1hR@z5["5~IpU(2YɄ<qȈuGQVunƢ,$='X62nƢZY[ojʬmW],q^"WG`DְUF߾n,`,&ĜR]!ݿXm .(0*]1bec/'bokb,Cv9]OkFF+& zjFpR1ptL/0@FS8&1k 2'`h/B*!d!*[*P(\.lސfJh6(nmU Gp9O13lXת<*Q5?f"ԫFWN%8CqsBKDa"3АS!pGG4[ƃ+{hAwsJ>Bo6hHhB*7w/:h9oljȇ(qp[o,K>n9υq,d$.B R_˒#m P?OS^.! R-z`.> ,g4dbN_ p&`o5^ J^2,MIt\3`MqcG,jƺ4 sB"za)>g"1wqj*\pkMbV^ɲLTlde'^n^TLT%}'O\Glw5xv$O$y_nO8c6Ɋ*s'.XZ42/IR4$uNKi϶Ih5N=ö6gKka yJ JJU i3kI V xmBZ8C4w{#Zm+w1ApGa2}owwie+=xBx"?x˺3wvl6Wxӱ6+3.;%(GCm2BjW8mv5uW7&b+mTwf)m@y:܊o]:G=6ot0zrv1xODٝS:*'W.N'9w g8n)>un؈{,-)oҸ =J]SXE4]H4:o5 O&(K(^;ea7^ Cla WpyVRtyQ.{{7z{_899y(hFx)B5ޠ_?>es|=㻼2lʺh{g''l_g͂6o"0)0Jr`,Ir tUUFC0ƭAV+dE: AYRTpٜX\M)ޕv"!|ںUg[]D`pI,pko n찋 2q-'i1tG(RfUu5VuabwW7 xC(9yHzyxv[\){[\[<|V~b{65*PȠ~Z`ʔ(K4fUqɣ ?x>9dRyh/?:`-68@Ῡt{[0¥&DA +40`0xP'l5tQ 9|oDpZb5VO@fr6.pSrZm6 E<9Liɔ;e{3UoEJdN댍K >ljӢ>R-G d8kҌF)]ӥ Դ4Ӈ,TS-J7< ξþGg!1>dEK=MO*&A3㷔!fCsv; :(.hBztOs`LCMM :M-iS_62y~eVj+\nWXҭmqk$.B kPT8 oA\"=* h@9o# Afb5@V Fg Gѐ`Bm )YG0t$JL>!:ҕl,fĽRz8e=٫AF-x\3_> e+>V˛ *c3cCt0n ={!Cԓ@oƁMg:J1S*W2X%eBM~ т(=ilkru̾}fي;( Ax.S -MMi&p3TMNh~9znIDѤ6 9^bs%9AJu*JU1x+^rJXuߎq 6 NmmYWGQFOylk^U9 *F6HA#(Cv#eաT{JvN;܇TgqmU JʺJZv22V-w[~[uq^1=E^jC}/1I}hHE/R4hG?#6M#nm3>hGe7T\0iRq,Fy_0nY[F6|; ey2DCW0Hbqʒ" )Y+{hחVd2YcVW 9ΐ3 ff 5M4k chi%}KkۭNB@OC =Af9L1 lͨSGLА 1`0X0nT1N2ѱ0+x Qđ͑QsP/vmlƲ\GdԫA(00K~;1jێa* $1q4#o(hb DR1$$mp$a%q%Q%ONRR^c&gR%& '7R'',(wl(C'o'(&i((2'R)'k(#(%jY5r,2$K-h2rr,k--K//20;00)1j1Q1RT I2'2+23S3+s"g3?4w*B433#4SS2O{T53_S6Ysd5i6m7s5w7U74S8C8395S929):s5::9S;)RS>3?'>t$= 4? ?T=3AtA!4>%%TAA+4CCC-TB7@A=)tD;Ag@IAEEEQE?TF<ͳFgG_TGGsF7!H}tHwG=3ItII@TJ'HIIF4KT KѓI4,KJ͔L4MKBMtMMTN=TODtE+GOt 5BCQD!P%PKuR4R UPR=RA5Q-STES;uQUSCUU7IkuTST45W5SMW LVaVVsWOu"BKI4X5LUYQ Y{YuU[Gu[QZUXZUJ[UZ5]͵3U^^Q]u u_\5\T_ו`_vaUU65buWX}4z(vVtc1a/WvbAdEXcGV^W6ee+UKeUf_YoVfiUg;vLcghY{h5h3VFViYiC (_g_9`UjҲjj^fVaO]6d϶l[6lg6`nfVk5nVmnm=no6gnl Wpvgw qv 7hT)hvri;r9jtO6aGWnKj;D?7uCsUWC7uIWtgtkdou]tuswqfwpgUvxo y WyWzzVrpwq7q{voVo!7|-w|wzw{ٷ{{ͷ}}7~1~6l7m7r|}r)Հ3i8VvC7I6vms6w%5gvy%w;5i-s83w+Ӈx2X 3@x8xX8;X;:qg؉8،XxӸx8s8s󑳸 .3Y7;ٓ5Y)ג?Kٔ19vO['X]YY99vg;sٗ_ـ{}yU9HeYi yO9gٕٛYiUm9[ۙ=Y癓9,YٟY~9 ZwZ)%zӹr!:+Z zAڢ'E/:3za;7:]z9uCڦSڠoYkڤZ?g-zGzy9::zڭ麮Z:ڪړڬ:ۨzcڔ(KY;57FڰA+{/a[{){q;y5K͚w[[k{S;9Oy:w]9(;9۹q;5y{ۨ;;{;O[? <;ܽ |۾y9>E>s%¡س͋ _O+a_~[>Wk޾ڿ={~q~~>~M^Ν~~ꃞ}Q77{?+<ϾviםֵU?]/v<>K>EwK5U]?3Ɨ]؅g=?Α^OyEׅ>_1I9]Ii{ѝkY?1z_קS'7ݗYٞe<)<;^<}r޼wcxQ`ac mұg%\7m`C/38SF#ޤiyD0DP= naϗUCPW7'VF=Bff6BXvH(ȱ8yVٗwX*P"bYƈ:Ky*;([Kl< {|*ut|b塚J:)Nw(vd})ZOA91ē3ыe%Ɔ`8;p,&C#Kӂ\¢IT0Ф;(KlwSGӔ8kIT@ :@kX\YVO)ް̶Bp$).O?Cd?OJ9'DǟJGLS'MkK E5K Rt0q64)jiǦBh)HE.$4B+oRy(HDj%Yj3,$̺&e`Ε% 1Qumh.*.p+*Ii;UZ͠5GUCL;ZzM=UeNnmTMh3} +n 5/ӭML@un&[.5QŌ\π*(Uw89ּ|/}87{at)z&תTM +^5NU L4**iS[aM(?5*h/G۶VW =9q1AZqڂQǰ+}bjm\%[[dУ%9T naI2A)jfN2+xDS RSM tmZ9Kg9mEGAPZA*ri>rPh^#nht*Ѝ^`J1]m Wd]Kc'W] )I42k($3^ZX2Ҍmd;>nL'֡ ;O95prT C4~7ܑqn<o`hд+Znx_)j-bB\\j%Tysl]ռy]<;\wmn%z-. 0=ѕFQY)Dvso7mVl}WuS}ѿ˸MK`7/%ݿvb{5ڝp]{PmIZ/XYNCv8q\kzc^lw^isRYH^ykq]4Qo]X`n- b- 9 0 ;}*g41E//Ïn6xodyxy:^gy|TV=k lBe3^77J~%t|Hl"{{pvgcr}2]ƅd;ׂ8Df(},02}=ek,GmH~ &^hvui_ZpZz z*bc)*zuO1F7H`!eGu=k9iIBN5eѫhPE(?cVSZQz >N$6Yj9vCv'Vjczx*: [L aeCzi:&Z`)izycuJ:<#Jke&1;kY&kԈrA`qr1t@gQ 9n[M=ʛɑº+z(;zz í+6[-ˀ#4H 4{K+;ʹ[|q"x/ƢI Yqp";JR:P{y+v keNcyI;:ظBeK?;{ *Y^Po0뻖;kH{N|1]Yՙ *kTg@k Bk& Ƿګl;2+;‰똑ۿ4zz4Kn**ʼj5LVgBkNl?+@Grۙp8\,[}tsj{Y%m oLnp r@t,ˋR+\JuÑF0=)L7kx5+=C,Ju{@,wS\Ă[+ag*Ȋ싷'GS( qb+'KF w Ñ&—>$+Ą,<k;Ók͐&[ƻV ծ+(ʙ\ԟ;GĐɇ|^{FmP-͖/}ZX< ';¯i(֬2EκoADF\i=̷#C.7{mK=zFOwZ> JQBŝP~'BLՉļz|M?ZϜ}՚|ĥϤ\\-]Ų ΣlA_KJnȭi9lLxm ;*Ѫ*ڷ<2?Ceb GМS-7fFٗ̿;A̿2*iG Q>VMf͢F̻~$MM~+e!]xm/^@K)0/㍋T]-H*Ȋ s֮vUy/ΡښM[>\<e27l=45Yju|U~HbܧeFmDZM㜛& ܷi.XbZSFWd-'Zdm7nϪur%m#hiX) 9]Iӯ~\-9YEAGrq)Y]'p֏%6-o]ʥ |>aݝ.|m5>^TKދ}&]kѤUd#GeՃM=LэZCVy^_~Yj{~=KK=).1/Jn腮S7 (r.# &khفZ.;.V]>s<*˾E;ƨ7RWa"ܢЮ%w Y,|˽/| lEltt/mXtaF ؘd^ɔͩk]HnGeI'&GD3AP [XYw>v2~Ɯ}ߣٍ {_Z5O=Hv轜?fNIN)XgKÄ,=kc꽦nN5j\0-&%m8 '*UZ`5\)`1Uh>q;4RAs ts !k:IqDl{KB+= 9E)!A=lZ"•ݝM -6VFt;Nc>UnJ^6Kꑗǩ?Gj7Gb-)؂oT' Kv6p3BƦ{&05c0 SN]BpCTlERyKª"C|T#1l#rh 3 F㒫1 !?n ͵$eJmLT/£R?<N61D$Bʓ+OX>/DQή\ AB%PCT!S C%1&REHT/1QlHytTPLRZ=WXф9Rf8\!6$C$ȧ㰕62#c15°,s]Iȝ7\H~K&5D4?I*dGDawgA&J1X6X`%RcԫdQK0a_Vz;$Y^EfUV[NJ?O?Y[~oFS y@+@ؠd@>1=h@` \ |@ @ \ 4AnH\Awh|NAASA  A $ >"d@#A$!dT'LB'BD*l+B ~ 0DB4C((C8C0\C56T782B7<4Ã?$D2:;T DED6ER->[ӻ[ >[[íPR\ë[=\m>N-\]\5=Ṋ\ͽ\>}ܛ[\ \\ҍ8=IХ>ם]E [ R;ݠ|]ލ;]\<\<\<].  31M*;e'#5__]^ݛߩodޥzݾ/_/{Y`-;`];xP 5 ^ݧRm`386` .u b~ViS^3bݥ[a$ cb$6a%Γxa&V,b!EHS-11c4a5".b8إ;7s_aN_@M<rcEN[dGna䫻RKF`*,7J`:&N~KT޹Ye)aWζCNS Ue^>6]`=a\8[&dnc[v/f?~9h:WjfK`fd)V-lm.f,RP^ufsa(Ng_RO a>ҡg{gur hi h.8h?gx8ZhYjhg2h^+hfhh5.涒L3- h铖KO iE=ܣI +8jvon_>ht꧖>gT꤆^ag.bjk&Vk4Ԓ.]%R>mNdmԮmٶmm&iʶ X F.nXiZnG.m|mb?X o"+oceo<F 枲onovoNo&;K;p!z0R;9zoS% GpNΖ!܉9foϣ uq!i6Yo>"mArQ6bqQ ^ $: 7d.pWr# o>410;6pBx:s*"~So9oAs2k;B;F߻=6! `b2H[bNc.W3qr>Qssqro-hCYǰOe]9^l_?q`_Wtw@<tH66]6`K4b4419\^<ͮ\ yE'B}1 Bt4Le"$KKNr@K3yYZNY9 32oXOru[Q}OŗD&^[ZeA%PY7jilB}1t=&mZTdTUi3aALCxF^o Wq]2BH1[X0ޒ]QQ-3Xh#WNX^13m&sk̅ix5A&'$~)^gz߉j=t4RaJFsb M)*wjg2ڞ`[RȫϥS*d1@xD9;:Aw J-p:ʠйy,ejJ(Tno&-m  v#p0ԄYcrdpb$p#SYe.lbڰB *ȼh\QۗyK^xrL`<ƙ+Hb| <`8 1q>YHQL pA,tkY@OIIP M I]mEaAK эX:n9+!tLB`xLaLJ*IOeEK|&àP4EbSyC N_fIOu=9>+Xu9IB ro>IFy «%***id%J~T$9zT}@zcţF)=Vz#*jyln0 j%3 t3y[c'n6Wqg&긜q@rU|"KV4Dܟ]BΩ~ICGY4D5oBK:BԪԬdX߻W [ڋ1XVu0‘‚hQj<ІµDZGa &p:`N5#n3̥o0@ cg&љTFr]QhHbEZ?QFzWqG[Y.pne-X!Ak гED4Eo^-caC'M#4 xQh;\ی8iiI*Mc;dꚬ#k\DzWPSxUB6k# 䣦kz_[51&g}voh> ;ŧ嬧twnH7>z2pN $شVDz?xXhFH)3g^Tw}[l` Fw \;HE JNvPSRNZHC?[ۆ4-;{Q^fu%:2 so΋ԧ>֪3ܬG]7ek[oﴳXy X ppR78BVntX\`t3).uN . Edf0Q#\^/6gࣳĨ DFDDEDP/>V|KY? qI!|GzF~oKI7/Mi fƢ hbǍ߽^jfkVc]KRi`Tf.M&'iTZ#6:eM+)X(Rr$rFLӔBHRѨ؊Y%Pgaa =2g["A2'`*۟]901R] 'k"ZBڤVb+ʢj{jo 3Rm6Mߋ4hrŌxŰtء!=gF]픮EQs>_xZ5Qz(&2Spzpٜ$Y͜ɩ`OE Ιq6LI &iN!U f(Y%]헋kfC1ݩ,{JS&Jabz苚*l-Gb ~fpʣ h빪Zc fmmDfi~٢*&j8=~jAy^)bjŝ݃ĖkݟmMAƄ D|j5UXp +Fb7"o}b^9L$up$u*n+qk^zJ"?/^]F_z=mOh :/A #V3e^m>mߣv/ƦZ/I_l@,eHBJzeo2*I %CC]P5S}#,Nޚ^'Z`Qny")E%AY*2f\>nBoK+Vh- OL-c/>ffo;RNե 1K_,ej/ gXɣy_DtAnV_lQxZ<{>)vƀ&'l>+ʚ뮉ʏ %Ǥv Wrk¤m񑫻r22҈+/hr91VI.ĞmWea*jQ\n%!0'06%'֏ Ml:F3Fa/, $pt: O(_- dBS*3E;=;g;tg4IW47>V9Oh54+b쑘e,]EQݙvɛX3Vc=b25yMҳ>hVvwg.wA!  q#u3qz_:7ySFǫvzfi#%sc=z9LYfg5 z?9c{b-xLf턞OR+0 1g~::A%`专{뚩Rm{͌Lx[2m||L5(svOw4ez;9Y 20fܹ>\+PEi6c:7.:uϻSf?cF8q{wOVu39V;oM'y}7wؓ} MڛsHqk ~ƋykmO I܏XmSyݮ>Z;ƹ\5),OЗjf Yr?B2v?{/ v6[{ٲ;;q0+_ኾܦy 6J<Ox=|DH<1FsW^.;8TINv0f  %#y&*{ ?1:D[N?@8]zZ g--jgy{d}|7`wSPCmŎR.-iоDPc b7 dڙͧwu_)x- 24?(HG܉pSńK,uK@P#/'E H?T2K>~A'RMZzäAҚғլ0j륲:ĉ)[ְmT>IJ,Klܺ Y1!dgM2FB!{*޹usLyܡXbτk7acsw5m\G1Zn2+4+ad"/br^[V)/(_:G͋ r묷/c;=z) ;LBI2@<@"$LʀkQ FFdgQm4v8MyaBZ0X: l'jn/$蹓T(2:/SHz+ҟK@&jn39\3=3C;jP?oQ,>̒, QS!9JY9ӗO5PRGMTQY0clU:ŏ x< I3G̓mTUt]-Wj *Չ$B)o|8㼵܌$L馇6 U`4! B_-^_>?LC2W3T*%/e˭U[U[s V<&_U|r4FdYchWP?~ˀjቑtZZ+MM*{dimFߴje>ٺ\A?3o {q[(qib;:v<K+C|l=vwtWX534hgN`|P'^V&NЅs2?މ 7OλK۾C椳 c7M*JzqG_'f]u,f@UMjX:% FPs T!'fڋ`/6, c k=PcnT.aQ^ئ)֥rιr#+WIWXTjC鋩 c572b]Q09Es(2sYA 6)|pA.PDe8B٪`ىwMĤ YG1LUԺgяIǍᨆ8JR`K)m\Iɚ%cx>lMM殉l-FGds3Y;§r';[B~>d #ςl7$?vK*i>d VAV<8|͐D"UFe>0|ZA@]E%E(F2UD!΋)63 ]4b$j+GyRciSh1!sT)TjVg*J')MVp:\Ҡt$()U8R M ?j:&e+AעnmTèH$yhްjRGˊƎ4Ȣ6$$Ti#0%;Z.cr5Sʽn*ʛ8Ȩv B꫰=.AOPk5b>[!$5Z|ƓKՈyYSgs:,#l>ڌu\v4%@;BWm)Z3[VIM+9Y1XF}aYRmfs 2uV'l(;Kb$/⭱h:~q\/YNkWSJ)h nP.) ;U%p'c%ۮl(s S=(DNq[)?@÷vwRD[.+FmϿuoc! NQz!/V{,e<Mu28ҢóI=7$iXIv0l [޶#Rm6 M({Kkm %*{Co^#Rw+:O!e8܄ړ]wfR3&ቌt񤅹67:>_옧|˳mcs@9s~!p1HPd:$qv7yC6ҷ.#Q@qpйݶI©:=r_#vo%W΂cwG|{|+/>s<;ϗ<4|#3B~'>ɯP?{+~O`MZ_U_C[_ }J׭ km~l_m~kέ_j3/ P 0O%p%_D%B Y OPm#0 py}p"J@"p M p (0P p  p p p0 0  ڰ "P0 Q p q %!/Q+Q91p- 1MQ QUQY!0qG'1 iQ0x}3#01=qqQ0QñDZ˱ qݱ&q%qR$p  _!?Q!   ")7r!)!92##'RE$Q2";RYr$_$P&IR#kR%2%Or'cR'']&#g"&2 ')(Sq)aR[&K +*R*Œ+{,R+,R!2#2._r.2+-.2,ْ.!//0C,R# s0 0WR0s-s21.373R33C3G4R.O1K?5S.W%R6-65q.uS)6},3]s6S557s9993:s:{Q:c30r7ݒ9!'5/+;2M>S8S2?S?8 4@12><@-A#B3A'@:2>3TɐCC7A0 DkS;98ms@Q3EMEaF#SFs/GEDu@mEUDKFWCWCQtGHaI{;stFHCHFJ4F@sI:ABLL94L5L+4MtMTNTHNwNND@MO TO OUHi'I; Q3RtQQIQ R3Q7RSQ9uT/T-U4E5UMsUCU_TUgVkUVVsVwWqTW5ROXX9XXUYYHuZZS4[[[\U\\\]U]]]^P^y0;xmahjongg-3.7/share/tiles/real.gif0000664000076400007640000045216507034721400014146 00000000000000GIF87aZa éD(I FANI@{JQNhJ 'haH'!٨{w3dE($!ۆrgXь$&.E#{|Žfah&!GFwDBh )&)3FISgpٷ'9#ii 551NPWHvoh61QuXVPژĨwimurwh 0frhI1V7H7*VR*69ėvq񷯥Æiu%2YF &)uTPM\΀ĿQXX񨦰8:)-CtQ`f] :6gcy%!#T5RxnvqEA6(!kovzx@G8xx88XWٻXg`AfIxrjXYDyd:>Zijx}j\dϮ>hm"E'_HAILX82YYyx@ZIayry[pY(%ڬw -765*im8_x^ڝū6:.h;Cĭ|  X )gbAHI_VI?W:Κ8:9%(Q]^\Yjnۋoli:>ÛË[fAx҈JOMMM),-LV9ajni:>5,,jn"I6zy|,-}uLGʦ s\TPjW/J2h).{~Z^|x hJF;7Z^{~/\f%iqx)/M|{~JNx,}SEF5P .T(QbÆifLSQ41[5F$H ȌcʄG=Xƈ,eD*-H+R-AJHϫVJۺ.-^NC()QUIpT.\q{i-MNg yƏߌǐg8Lk~ rfΜ8Ō+KVz5ƠC{~,{~q;S^$PDxVŏ+/^ܛrZEgpɜm:3Wb|"щ%ez{M"#X—2N CrѝZ.8Tx G_gWC 2p   P|pu#tFs7wQRv<<5FYŤqp[7[!o4U<ja  l2te{mt'zGEt%BvPRJ}JcMF@# 6P  0PvpGSG0TYvY )  fR\gc@EգbB+QP$TRaYVk `@ S)}:KM=H@8a䇑#pZ#t \kIEAY慫eZyMv4f]S6C7SS\/YI@ 9ڠ=7E Jg,=pQ)cy 0 Ī 4WȂSs䠷p P @ f@ \`8x € 0 0= )Jpd_ LZ `1{ 6`YՓ#WvB/%T&cfukegʰF 6 pЧ f @ @Ԑ ՀV`U_0@ Rvڰp2YJ; `[9l t@NZ\sǑV[15På2 =W2{ioR(-``p ssp cАȹ]yNkD}  =cs / XJk5hVN_%Z^t.Io(2P (JBPzX* Y&Q [8,[{  fkiu)pyJ JDFI&4~fspD)bp cЊ Gp >마Tb$41s@ O YE @ٜP`/+ v KP s0IMfQFvS I(hP hR9--JZxط= ~@QX(D` 60sP &t:w S Ч}|eZ֥CX@ l W\p}~s \ DPbkNt 3\VWLK ŧ ex | K^٠+4oV]%-Jf 2ֻP @K÷p>+Y޴C}k@sP@[> wK@ f pC{+K sm5#ME@6lFh *IhpGwrj`*ܞ uF DyE=ts4(u9ժS @g^t5&: &;`Re0T]. 8 e 8|16 wI*`q OdBB- $H0A h1#nOfbeƆ;&T4B>6Jc3pa3CN).3G;lnk(mppX8 vX $$vN* l}T8)an:RI@ :]"C6򪃎/ Ƙ#dRj%*|b1c*(C]0ň:LeIq%x ^1lHj c^::滱 N, ! $ 1ěb]8SaC1D&ab1` _$\ )] 4H!hH\jiA h ,H>a!q2"JsA=^f6I6:j& Ō/LuNmD V@'K jx9FT̐ KB# ,K]&L~ (Åhh)%‘ E *@:lF~L cbu7Dm/ZhR4jJ^1E;c\Pgqn%Ō wIE_.b;Pa#,4D 8lظ@a|@9; z(Q@[f ?)=8s@T_qŸCc4)=¼H#8x-\RT l~@?.)E`cA1x;cHZz v#[Ԇ2@X63T$+ 傃t a"bC<24$ $N bN]%4jQphj 8p6@(FҷXc qR`6:aS4TbcPCb2 TRĠcEpce vc # HSc \<]lXL5r a!}p-Iw8:ω459`&mOq z`[r:|UBҒt$0+bt z ؐ `8&#c{̃$ 0NRa הB%e E$5UCcNj( 5k ކ!S}hC :Fr@ h0)аִ6ȅ&}/*J,wA EVNDaXQ<,xv!% @cŚ#D <ؠ:HKaFII\Ib|p5^AOۀ:aB:F0-@%`Ő"I7C4 tdL ̐ S2? A:d]  11D SK%@FDp`¸Q$UPddX<'w@a9 , c`S#87j q~k#8 1  j9[ j؃[L$9:ZU@ 1Q/){ 38Q9%H@ok&R2$i J$1a<a[[[Ж0ɇxP"F6: _|AXp.j@7 z(DdTQȇ &\%J0I(uЀu20A  4!Xs`cY/QЛ C/#EQ= 1')zP10 iH)K c`= q8x J6JpP ZB ! h pHI%.@TDu#6ɔ arL㫀X`ゎ!Hk\D9|x6^ @ I1%\8щ)0V*8 V @`\0 gE   Hʿ@"AN8>_=R,_;)X\:F1ъcdH=%/X0.IT2F% 0*#C,,IM\ȳ{BmUP=6';"-ZX8:/@k0:882,xx\N._X,]` WPЀh\؃R}(}I i"0տ(S)siӑ!@_K@jؑ0^%; x)@yq!>9MYI[YA;yK!drӭ@;ԅs (LZ 5q%/3Cz+|  Ό(q0JȄI\;#مЉj@s)OE<\ T7ǐ2"l#茇8).PU-`R} #FHQ9 c (mAH͔f2V:,꼜ciY1!}3-ȯq1[2ȇ Aw\((]Xf:Iz0r)8p䝍bj*}# P6R Ҍ\(\Ӏ p"0]R')"Sܘ\C50ea Xڡ3"*[paq&M*@hӬE(R:xHҒ59͒V, `؅u 03 P6==,\+hcn4ẁ؃tY찔, ,9PःL0l``ؾɂXa{3 na_0 <xpNĆ-N˳E͡K6)REؾTHjz芚tkj0@ :V=^>8]2nÆ%@kan=leg'lj@] ?fR \Z?4b/Yu .h)X"4 i!\: @fU1;J)q$ ^dEM(Rv6n]$Q,xMQs9x8! axӞ>&p"Bz-UWmuYJ@H`4XV؄J\ ,VO!ؘٝq2v#-0} h X *Q ;N1.}Ҿ"Y;|sJUH5-M`m.Ȃs؂2-ԊNƥdأY.@A.R ȅua /ҋUTI]؃'q!]X ^X;`[_$ {|&B| ]p ˣƿ[sz_hS:@>`@Z`abp"Q hhЇmkkRHsP-_4^&q[H0(9hh0N} nUR:kxfmar"i"aap6bynv) 2g$\޹ۄ9 9 Aӌ _jPAC9mX ;8l yN^І=;蒑x=8gaP.x8F,PFxmȐQUhre7*^`2e e-e `?@?z5O\jЀL2H': &֑&Et\l񢮐Fp51'%cf 14S1cK#!"(4{8`R#lعU%_<1SĊ7…T0cR2'hFMv6YWTQhgH@ErA*"xP),RG `*laG^yY``6{T!I@,Pd$}x2ķ6G$]e5g ̖ji%6nSC^Bfv₾qaC|́5pjBZ2% \` @`t]' C؈pƐnvj.fZX 9(%s(h2h4I *P mF j׉BgPNLP1p0< T*RBd8}) 0Xw8р d4 @ Ô{*8@TBAA\>܀e=v3AAOҦ]$\#PC/ /`E&`Fy9) Ȁ8lA L'.@0 ^jT5fFzt$%wD2e 5lFVESJ*؂# ܀2(8B݀؂2.Ã1lK<́69AGmX';A$0A0 C$A;L̃CA6f}?e8)8C̙Ah<Kw;>=Cp,@)Q@F. H|(&dBTdA|dR߸4Ea,ԃހ-)B@\mŐE4L` @% P Q2b:!`QE^!L]F"8XB=2 0A4?B10".iGp8 CiQ^<;@,`H٢, %\wပRQhEpG{G= @OrV4@tHP]I?U0=Ё ,Α,ȰZs ;2[2D(e6\@8cx@v% `*4N:dD- A;>|%z< B< @ J@jH~a߻l0BѤ@l#($GUx]fW; -<ABKA?F…xi]EQv\ `q⢎Dn^x8A,a1C8 *0;\5`XjVX8wHP$0C=A2|Y1;xBT;L;@0Aʡ`yT}EYVJ`¶,5JBmtʮxp&P`,1$'TCC6PC. D34uv܊'pT4Χ@@= (нAȃA A ;A6ý8dNA$ `3X9 ^=X?|%\@AAA8BDA4Wlt}X*$9]-mx*-!x; CbZq5̂D`S]d`4)PF. q [ `)dJkx~e *CA34y42.x83XI[Dw1؂@-L3X8<%xBVl  |EY{"nЃ @/fj\YݘjG?Q65ȅU2N `5$,=[0 *x@ey'܀YA1(-$CC=gpxSA?*̂3z 1~L$4>J>6: 8%C~eXY$B8u&TB dWuA*Ɇf(A@6F +L.-&5C ;<**B܀9 TC~v[+1LrJd:%w(@Vũ"%S֜ L.*y՜7暤|D*(2X=x x5@=8Bu@5&:,q< 4PBx.B&C2@ Csz@ؒlDc :fP( Vq;;p6481} y\],ؕЁ(LT/Ț1Z0*2(iHi }BpǢ?B0LBԨ {H=<`Aq1H2 LЈO4@ @dBv%X(,QA !d"LVts#GbLńSba 5DY c ;Oc#Rɣu|C#U|DݢFV^ѡk̒xQむXpc#٤*SDzD; ޹< h+pQ@As!)Jd: ]:ciJJ2H6: 4SulE\4a/ h h0ڂ:&\* 6DY8&XP1Yܡ%Z(%,ڂ ;)rjUh"YrTr!ꢂ2h  ++|I +)׌x()hj)crH:qx+hP) d'dn`"%Vx H 76 5 & z챇74wx`:؀(_PSy/8Nl%h.n|RH% a|@8.j9.f(sW!X5bPd@OP `B{Ԙ%8&K /8PRQ"0ŔucA<#}n$?4?\&GO:14%itZ\L!7;h /h#3>HϦ|J/"t(@tsD@'PA3h;U"H*4V itV[H4t@[}*  X jKǫ\zFܵx'Pa #Q 44 =@x6B}`<ZTܠdC@ETd{@A>d|(" )V A hB >5 ME2ir;nTpuŰ1+*a w _C0aA:b0R^R* ^\,Vk֑:(w>`> 4X }z"7"3@0`AMx (¾] ?pc@r3`!8!vHya;=C.А L C¥Tb tT+t C.jPSHD8XLO9Ő*i}Y%,p<Sx"`Av"HtJ0("(Ar1$" !@”d(S@4u؊u0@2B\ aypD7'_ЖRʇ'Ȏ%PyVPa k3J4!pҡ(i7Da/TÐ8U fF(hA`&=A?0dx䎡yYxbS/! c@53S@ ̡ژC>,1 Ly.tų )xPb<CHgq@4f$ P>2" KCy7z%\T }"9SB(xr8hA.rj@  Pځ<; HF4ҼIC0[bR%4ЂLb$L`%@:q^(rQ@#ip_ᭉ\XyNq vy-ᯬcQ )dlC;(iW՞%"" RV]8&DAC` p! ]ORāK*Z*"0@eaDXXxϠx<Xh \LB3,Q шF|8BY,`8P$$hB2@p &D Lf`J%Jt!T *!$ J Z@A4TaJ'L,M]N)#N`!bHʼ-Ou%(6c@"X%.pu~PrPFBd|-8(%/azVr1.8@.@H(0Sr8#81\h\l(PnBVaAnb`b  5{,  ޲ e$HUХ1@fLS fau h 3VI (Z aDRA n AV vaf#$)2ԥi@N! '<`N f!A"*Is lD^aD~&.q`A$.$4"K@9+o%0dD!*V1/dԺd|dMjJLaoP 4 Bak "+%d„!%'wZ`L$r|uPZű 8@6GfȎ`nlzVzm2h!r\MPa@ w"`ށ V h:+la\%bŁ4B$ ]IĠ @#A L!T.` naFkbrG _9 V:S!rA=A2yDNc$.'7@ wȀDˮ  qAr[A'x/aZ˴lfK`BNLB)\KJr @*aA  -bҡ4`y̏S&HzGh#}ڔ ? x,r X*$@Mɔ I\$~bA b!` `. 8L4 MMX+"V".*w *  R+¤6``P8V @"P"ܠ+Pfuvf2 20"&U" `.%PA`8 Pk,a .aQa6 DNI h`  )kd\m ƀ^%PA"h(p+7ػƐ aTʺCx.A';&@6@txzl,F4K%`XaLsA AFW1M!ZL`MЀDxh{Z@`$")R}!;B1z`Dl[aY %fU+i[C0^cP;D :`2AD>@gIm*H@BL$tw@ 2M:a:N/i:6BNX r,φ$@tg̺TJ ԡzIkO}z0i   \26KѤstv #b{Z,xQh @`!Rj Ϥ;j!fb(8 *̀`RJs2@| $X !JUr22IH@!Ԁ !/fMa Xt‡ Oy0ǃqʔ1ɣR`0`+x1 p(P P.\l̙Xҡ-\B0c=LY$_|b1cU[חltu1u,/_8pRF֭cC^w*6M1{8KW#I:@R(rj052hX” 0&LOi5i˗Wd MJʵ'| 3U*=W J^&s[VyK0 @_}2'SAXT]I GIK]4.t ZfT `i@PD6!SPvhXR:9Xn !]4%@4HpY3` Ԍap@@mHlK%Hl%M@6aLu!ܠ>B ɀC L( Lp|1<u"A4./ x `HPx n080|Ա;zѠ5SiqTP  5-3#GsΤtlD XNxgJ%J@l@0g-Et@W} $Mn }˥QL[Fls^.EL@xJz-Nx9)) c؁b. r.t T@p0F Z8Nw-hPIt (+sYY_| wSM 9v ttD h@%{db &:8 q&ry 2ǃA `-lbCx ?ɰ?x@ $ 3``O .ƀ D aA(@Gq#`?}8ܠ> y _u<\29]b} E5xq9d /ac eJqa =H8 B+GvI%1qP2Kch PBPhJ f'F _Ђ:@? "H!HSZSH(B4 7R@Gpt )dD6PsĆl@I&C{o@2Aʆ5qp8?~C9椁@œ.4Y4a᐀3793|(B8> |(? ]buEt'M)9 DI) @8RW ",R e2>6bC5`dac1 raYS6 O{tWtk4AK'i, ` 9Ax;z $Cy`;!C7n 7P0Y22T\ `%؁?1ڪhb0 zUCf ^ X 0P _c g /PzE>x' Zb+4H@S.p ,4 (9<3%A9J&@bCIX(\|r3"kMPӌNRА@' 4@ NPMup#XXi\݃M$WD=lhGSCr1j@ \JE+ Gr'\&kQ .T6Ѐ E%L! DuÈi1$J@1ȏY;$ H=iD](eԡ=qosXRO`3kA ajszJd"P86a:4@` asE@b YAD0G".;9Xa( DAö$S,pdp貁=<zG7 ; Ԁr_Ixn 5ZmEw/DQGzWpT /^:/'R4Lclx 襁;wB%ˁ vރ';"@ߡ4\G+"B  EM.&P?`dD@@he؞79iT}dBn uĭoT\h,C}\8m! ?[ɧI{(E YNh3,p&ذ,sqP \1xA C8k pw 9 AѠ'5UOP"sA_&2 6pH']q (  p-؂PH@R%2@;R|` z GP Pr 0 <̠*Qp5рC.;!U=xqprPL;` rj 1rP5'1R= `Ԁ Hp@ p "6x>!+Qk!p4dh@a-`2 vdyf``9`e@y49>AxZ! B!y9xK0 qa4D(q6sT pR3!bmR7 P W"ād[f98p1FB8 `T}EP h 0P In'S"p `AI=@j{7s@- A0x;Pk6kҰU0  0 * `2Š`p6 C^'C!+ ̰Ap P` zЛz !M7`@*6nЅ'>qt_]t] KGՐxP6`煌Tu*2P;*1P:8YCLvR:= w`vrBA WԌC7a A1a>vQL@p{*cdxkRZPqݔdh167gfQPP Wei @{V PR+pD.0  |M RT A: E J`ug..P>W&Hp 4 c `*p JPbRw hP?А$%¥TusW56G&t 6 6=/S 2 {us w |cv4dJb9_Y:_ YtL0 <@ @{ir 4*F*p0 0/d :D ZuɰnypDP!`H7zpe / @.psK'4 b mD42 p CAB  %`uA%KbY&IP N9,S w!!eXSRT Xh7hxu;?wG8JkKAG je@K>Qsvz Ci"@hQ yPhV`0gVB0 l vi@9IFDRil:8k"fh l#3D `"bt0ã2nt/`=`p `p ( Sh}Te1ds0``tv  wpVڶ - ={0Q'@" 2d.@ 4* 0 `P 4 zd@ U) q2|  Q y`yP z LP:@[5 ~ ҚFX0nAF9dpK^0^0mt Ր%/^`Cq ?!3U)6P @qPoR b _uՠw'l 4eŔJ3S3RZ8 KyP!TB Z_^|ItЏWe KS'ށ9Qb#5 TP cp8 6scM;\lhpGt` 2x АO6&61,E% 2s2`@P 6 غ2 }".p11 `0L/ ` JUW9=0d-n~@ Ȁ  -$`V@u@=D$up@u~`̂` ""M b Q rjUw(+ 0bg0 .kP@# yg'g0SU2  #J*5{ w- W."W{ g'T030mmpgy̥?ʹ{g B `Npe e2a6 #oR czzPn z' h գm|:"0 0s%&{V&(P `!|$.yA(Gp6`fp> _ yLR cI@4Q"[=@#< pK 2p۰ 7P$`0s@p jEX; Cu@ ,0C` p*poVPŐp g<0` PH@7-u}";s u&xSkatǐ  @  Mt  0[[8ȩѠ$`m90N5w0abwmP@:jA3c\:  ސHa6p6ȏ, 7gʹ #5<8R~|{6c&F *(oҪf 4@M%5Yа6-"% t0- sVlԌ T}2PlܰX:rNrsQ9!z)P&]f0 6mN {/9ᛠ\Cxz,b@20P x~0 ^@`a*&pz EsQL+,p }:* Ƞ z}nxB2\|xld>uq![E,:!^\zKEdjל U-&5 sb#taB,"fSphJk R5q66A4$HcC3WUv6˔h#ف:S( )CthA73:̔HSx [TFm1=)N-Ͷh+Vjp aJ-h4XR+H;M-\Iźu&OEҺVD$JjS L- C t:F-ch\#Ȥ Fl`kTnC;PE V4 I8߶ZOl"`b);Ƹ'"Ha/tQ# uZņr x:1->‚x(PP#bOt?PbLdn聇:Oa>fqC/d `BZs)h9œj.@`Ǎ , ЦHEF+)G2,%f mȴ i;eXwy $H@yä2>C<̂0ahv1 mT#c^ShЃI,L.1dV*. *o[/`Wڕk5\ ⑏c"@0xH8*$c@^/2! [aM,4{R%jaG@ ;Aȅjpߠ7<KAeXf"z mpjWm6TiaZDI?q'*PfJ@59&2jP2،feh*5^R hJM4:թnYߨo죟H >(cC@pC`*>d?NOHMtxxRɦPAa `|z?0&{9hpEK ZcYҤE/`5*Pi/]C5|Q @p7q(#X~{npy\@0?P&ȅ;% h uP\0uȄu90e/[:I!t Ki3^%%\tW،WX- +æٸ3t h xtX$؄ IRW˰/`(h6əHY0tB6 PMeM[ҙR,BV 1 ]>(HۆbPOT3T`9؇+=ؾ`$x[9؂Q:*0yp(+`!2,i`?"pȆY؇OP%B[1!{:^^87l_ȇxxiClɇ;X2^9쁷zc 8[n  P *2H)n1 "ȄRUY@S@u6PS@1 [ 13¤9%Jhʽ%P0Bр1ˤ)K m21$09K;΀h%ȩWre-HZDǣ #[R6D)ͩTE7\@0d2!{CSPe={/S8f`;AZ&g)M{e(kȃ~ fpi}c7 <Ё~[Mg#1ē"(;xl؄9 ^`|Ȃ/,`_\x+@D!I(?hܡu(HPWMV*+(@xWLI&uUjĸX%͢-+53% -Hy:X*)BkkZ1r1@-H#]/ /HD)zHX"N N2ёXM<<ڼs"Ehq̣7!!@̌%{F>@>OR[ C  Xh,C`pk <(؁(h=Ab&{h&yGIpS;։x.h)s*a&LPd .~[JJ0* (HUH(u8hT?`I8nX5nxAH&1eJ]{/&S{SX+h0PHZJ ѩD5i'aXUB鈫1IB©d!O,Db@Zi%IUOPSiל}GX]M\]$(0y,0:H`g٠Z(l kH4y0MeWv!d8 p !~0{"q-r"۩WxЭ}U/ȂWoFPʔ" TJԡ$N)8X-F`o àт2PeNhI39aC`ǔe;U3K=/݂n:E Ĺ^1UhP,=f1]sҙrCIevgY3a[å[PHє!-5R R]6 ^\]H3ht[|M2-\ʥ"** -3,:dADДʪ]% vpe ۆq0HެR9\`hd٬\ $-^RN3z)گ\<[Y0AGe*0A Ƌ2@ ݠ`}RHbNn"`qҪ%a:I ]R 7Ǭh fRd­]؅:#>VT% FlP&EQF|DqXU%7[eZl9X2ɚcH' f>SlREfi*m.%7egV&'mab#C&d ClSL c*x0gخن <؆I]1 h H{Ih0{(J{@v3;H(Fm @d4֮QnjUַGNU_V E789tFRT * A o]ؗzKmWjMR\g ~9:P֙Nnrq;:m7[&%ֳq~q؀hAry$l~?''q{R{YX T*INL̑# q=xsPx;ϫcaMM\2iFg.u:^:k7mH^:8u{吔L{=? Q?ET ]v{ JGdr~mUXt(T(Duk }=tkt 36VlVloZn-6)K>AԀ# "3.0PC[bHs޹Ӎ.J0M7.N{ Zut3{z7r/K?/x .lq G~zG~W?xb^GF3=Cn "Ґi)d('HȟlF2 9`ʰ#@ R2A 1lBaa9F`\/>T\]UE044z Ҫ0MD V'( F_0b"*!eu_)D.8RB.Id" Ld=usHgoa:؍el$1{Nn.p5HG:V=HNRtܢ$wnЅ}eLi`!U#A+ZVzU(QXӇR!'H {dH'1 `uĝxNQ[N?NuK0Ҡ[h^ʼ(:@֠&d- Vժ*fD^hFiT,pDtWӜy7DIBR1R8H1"/m0 \%HFK4eMa!EuiQ3J*D#'%+]O` j.,#dXSVBM,! 1U"ғĂ)T^9. \֓\je҉rʋ%Z h`񤐕 KXY [\ph ub RlO4(O);4C-@À: ꪥ%O(WB4BRhp/a !Ng:jU_ Tz3eR8$_9mU@h1RtV-UӔhЪ * Ղ )PzF4(1PBf<"5cuU UB]rR%0[Hp $VbC$&7@0 ys̔xVRR hb*le+-J`p OiXÌS2ILf ٥H4۪|K6*';t.yi*ldHr:[Lο0SSU4\-v%?ɔT=˓bƁU҈FWZ;/9#)=ʠ.a ۘV@M)MVN>ca: q .6oJ  5#h!⊯b]Lt O73^qhU"ِXQC L4hR(rVzcq^t3FU8BVU6 XW ABCApJ$%C* +z WpUvqI^i`1\LL?͐JOB̂̂C]2iU^eV6HY2:.p)TVjԂfW SMxH4 @ `#>^̧QVQ.آba>Q@I&(  ȀTЊJH^u0_htj|FRW=u!h\۬`X4iWuCyVC)'ľY  bܬ@C أ)+ A|HKw%AqWi@yA@`ւ)£ꁖ KBya`B!z"gNF8|@8HIAC%F۽Iɽ( KANڭA,><&C x $7DQ)%&c@ 4cbe2Qp tD)@)::0*jVuTVBB)|k |A +,@~N(^'crIG 8(zT2b \(h $9(@B\@@B8UBP&Ftoӌr!heJBV@-liEJU[ 3JĕArQӆC HB% Y6)+dl-t |@L0pf6@Va%K@j.,)Hh:T~haE,@H)V:@UlKH@f ti6V'aA%cB.V&\IdAHT A3X<$C*E<(ҕ.u+0-@6+t ODDC.H$ CGqU{6@)ThAJS8-\B<\t4mȯyNj8h؉q,(G:өJ($ C ͆hGKʦ8FU!퐂PY4Hn%dv l(hRŠ 䫈]Ӓ@"FhO$40,@.hWߐ9L;J4j.V ln֟taB\e-A$bPxFqhnT|ZwJAr(P_ A&_edoHVV Rg+ΥBHݵi몠 |,=<2,aDDR@ʬ@l@)C$B,v vp GPQlB@),,@,@XI 8WUL@B8)*( @ 0}pDP8@ Hx:TrD G*զ(T>J9(<<BBLJ=A^6.B4A-n A)+ϭ``deز %ԽB%8Hfv!"R] ZHB.8@%V8)̌)j $Dqs0%wo%H-Kw.C<%7wUw*~Mm|V•7:2$8@ H$4B%fiJVo%̂-<@=ۉ-Tʊ^W,H4 0kp+d:,c L4 Dl0|CÀ>Qpx8 \l]')+$vpœȱL>SFazzL= 9ā(T@,BA\_K*j" qa @*ķ@4*XNXܾh[Xm W4@A.A `-}1A3{DvU>U)1wL%Fdq),,;$&WAWv>+CJD'D& xLzB%HA.TBN@ DGWCBܘAAWB>LT A5fzTP J!P8lHa-eg+R2HɄD/kd4`yS.MTQL& b0,h*q4].Hr1] ŦCWyF>aÁWHYO;i .ndc$ܟ"r(UDR&#*w))&dpwNKUAT$SS:& ,1$ֺk: I⃇P2䈀͂2-hIĉZ ±q/ȋ&ri )*ЛHV>P;8E$v!3$@CR$`᠎x`bYb!)( ,_q LʯC>L /;.:DAz'9D3Gx' E :vaCw,!]JŽ.=Á \ fL6H&QIm4%82b]$H%),8 "+!Ud#>p+ XtsHꏿ(メ%6q@EJ/( 5S p2mT\c .`")) 7^ K K2% Br J8XY(` țlw&|`'0 hߐE"_u0֎d&r .[ b:Dd A ,iL!# ò:E;CU@;>SD#% $6R  _44|*i< 0 \$ q6:Z4:ЅÆTDlyiក>p6^CB*. bCvF!E[6":ňR&\6$ 8RB~t$hpQ4Xנ!J袣lA.yYpsUpC@d%?;& FQ.H25A(B%Q u|j ?ҡgT:J`~JZ),$BC I9Ȟ:L*W#wj@)I}h.@IꀊOa`# 0@C*n@ y*"cJ&7}T AAXXfN3@b-EČcz&<u 8@=($4phpBdCv/kdli bzp ؘRa6 Hm MxB9Ձ ۩!O W11,l4ʺ&5F:3 dj8wגO" d@@$X Ђ 6Pkҙ8L8`:U %BAhA UOդx,$ʑL  XM8F\,B>iL8Pl4D46_oI%/Būs1hpPȍct`GYtZpebxD}$0\裷S@4Qi9LJ,b G2QL2.WBI?N=&0L?.LClK2洜_Pg  b^5JJ<FJQR0&IڂJd@3/wvF4^a4(&a2 젭J[&@րmU"GF 'hl dA A @ І kv,pdpL`6@¦NE ÔL'Fa>'\ wa9 $Xmց&؇ No)MN r$-N3(J` &LnL$>^a 6`Tk8,l a!G Q$a<& D : >:` jA*@kV?&#>3/P>vaRKL5`gggP@` @x" 1H x`D`C6)Dį b#j"`54 4@aM6f&P4` ' jaLv&$4T `&@ @ *$ f4`r`&::Bnpbh8*@ ~Dz@TCC~ r@' lZ$ :!Ro.w$E̮ nG0wd \&) J@""V "dGr-Dz`!e,a*,->hFv#vs4DS. 'S `O>0MV@V*"A(*b$hrg!bXG#[@v&.vsjF<ȑ[IΌtL- `AP!~̔.pv*2.iˆ5`sW Mr@rt^($!(`$mBb'VSj.3vQh`  a*4('^qoGjr^qVȊ\@ C+EAAR@zJ P Md13EF"T` A,4p.N$!xDEIvL' b8V (3 `Ng4H'a ƠEbEl=KK[ "Tl=C`a ֡.l ! r `` @( ԡ4jgzT `*aȂc#d $&`@`¡r@0%aB¡#a 3l$$Q#!*a>HOxgb e bJ$z n&#ZJV>nd K$bAƠna xa 2$dd742(eDQ g$h f`$aE.GHI1#%G`# #BSZQ4[hHˆPWa(mbo,NUV8Av (#vloA[U /"ց(BH #z&1x"rj:h-9Y$AfT-#& VXa :r=V@`\4d64R*@VfT" Rl `ppVBL@D ` V`nos"U$@mb^!;#LjDeLu$SFHR#i4;A.γ3* b ̍@-`РNjMh.‡}0t A0!c13-D"@3(:N#:24p"o7`AjsAFW΍4IH:Zx`Κ =&!L:`zJe& q'!`Tn4d * a ba z@@RAdPU|%k5q,~_>U!4A ^>02)2d`MiT'$F(^Va-44YHUDOh%Aa[8tp¡` @:O6k>`@0 X@a@@ f:$b%U0OO/<$D: ` rJ ^ 6)R@ @ P :s 6!gN52z ƪ'`Z@Ίgl >Asl1d Ů8G%"(qva[ LhS^A ܒj/f@. X!sLJV;Me=N>`vShࠣ'e _M[!`$` Ġx)C2dc ҀFzs8r"8O!@E;r(\@[BI8 ]JCT5"{Lx_zǩ$Qį>TxLA pdyqn"B$R\xLdJgaH@ih!y8b`"KRzAe^."$)>@Z#Z`%;+|O@ ڡ bS{ $EjiA'A1pCO w 2r' />:!1b7S,ր2a&? j`K[t!vFF&"N z8ښ!h}@ ;ahᤘ;1VMt0 a }x,sݧx, Appdq +ծUr!h[(6jŋ]pT-Ѷpmd4,(٨ nT {*U"lYhqCDt2Yl(-:p :tbD4]Y^sUTA\ J!\bu} R"P6 꼛(@8q_TqP.Ӏ?>h9o4tº(md*HȐf*UJh僃5%TT`ڲŘ`wjg#.h4'NTwZg6;xWpW KW1&0SM|A tItJ%mL0 dN%I-~*vV`vpPZNZI)1}ٰ}>@F|`Fd9.crXԅS2 2C SM5L =,Q#J>P.DWDlБDa$WzdTK;hHUԨE Yp4D Ua-4Mlqh Va"$PEq lTC#E++SD {8pV]QBYjU $AD8"N M,F݌1`%&Æ*up@CŐ&j(?` a|B.dblbmKVH~J᥊|C&$m $Q Fb  _ Tx/ Ã2<$u_ȨWus%4X44. VZhO-h94 hЂ>$EJ+#E| hA%J{iW (ЀJcTNfӨ$202q^_D\-=V^ Yf G|V /APsKyw܁=(beQ7lȰ*FTh P@#FQ#$)Ipԡ.@ZЂTȅ WO$XbPFr RI4CKcac xp-X8ҐGAHj2hh`ЀJЀI_-   >%v@C^l`?_ X m,F Y8$$E؋fT X.$;tp+h\F!Iu 6H(P)]@١(MHxʐ`wn*FI@uIGT[jTU(1)@% F^ 48dD#OSPu$h[3R/t_l5p:xJ@p.." Gk@ 0E`0\2 Ӱ LM| EA V WAps(c@lf@^`Y-P_E!@`)*w!'ͧl > P 90TW-? EB` U2Ô CFtaiH+Lrd_P80"AA@],1c`1X}P +dqd,p p `A ɲTP0  i^& ! P \X3ihi02ݡWE0qC5z r4/q3EI94+0,Gl@T 2#A" @T!9- N@wޅ@g$ 9PM0b wE8H e)i+lP4-2 /$Yb!hh R R@P]d 9fA{2_#c" L":E9qdwW+& s@ ڰ 0 @ P w Ԑ G RV 3%DYSL5_Ѕ^pB!q|2*3lP),<4P 9 @PPW+v'Dfj 5z&a0W  `eky"!@hh,re @kk N~0 70 Z9k@T +pZSv(緣tї+e +@ &*.0 6Blu}zܠP2rIܐ+ BC2 qGe) 7Z/  000y|CJ I͠#Im `9ͪpZp!;ސ% @PX"U9nLq:56'q VE1NZuլ RpP8aD#;2 e1!źv3 nVsʐ``/Nk 6Ad4x-XPc{@ `&2@Yp ذ @c Y pS (W pWX\ Nb9qPx-xV-NLZ8quhYdL2x@P:-W"-s9. :6]I'&aC5  s``vtPY )0fc \ \` -lt@ҵvF5 4؂ ]?!B |پ̎4)]]ո1˿}nB7  NzQ_G X/ohD;q>6QMfQO6PďYDp`E/\hQ.ix˘;vU#:"˖ZTTj%̝0_EҤA"xaAU Lz.@RĽJIE+![4.v4Z%hXmI 9<2D;:DC5R%Kt.pFiXt#δh:[R4rvFj@0P  M9 ֚"jmp)1TlE* DxpQsPVqsȀH119H !;mwJ Hm ZЂP U&(HF4VxP4 ix2R$hقR!0fHr",F0&2[P DC@`" KF#DhxP̒pT u#cJ`3ȀG@.-4SB8P c 8 !L&#\f9=>O∙K#n|c*A6AĈ|Pi 0+(JcV*1 \ F>tؠ8ThDG 1R&a_a.7y*m4bi h 4aL+b~G0d PLћЇv ^\ȑj'XXh eK)k-N ]nǃL8z2 ˈ?NHR (ʐ^4 L%S(P[!Pe`i H3塒: #d@4T"qOP T Ӂ5ӊ*1i鎽ԃn}[dxhCaøhPvB ! `S,ClpR D =Eԅ` l@ G&Z9P%Q)03!#ڰN|@ x+V <2؃.DV-p(S&7@ia@g- C9#fr[z@A>4<P8y?4 &5U)7(A LOe4D  ɰ>lB&:1Ŝ! `P瀽`:*(ǵͦvaOfE(EO D $)Y"FΠȐUi Abh?i.6gB@,Rk]@RW ?OZ,%퉣@C 5C3ʙM4 p!h2t 5't s.xZLzKwONaX: _Wt.OcSHb@ ]s΍ AGi x(OuI,7$ɍ5FDdp:lBl@;@ edOþa4pLk0009.W^&z`]@a8L0J,%Iy$Eؕ] ^(؎4ѴDM05DJJ h6Q@&ɀ8m1YBF]L@)0U4`Ӟ(Hel`C AtQ@7 ,pW#aA$.*l@}>܁[ pC Ё5~Q5v•,@&dB8AIlPrz HW&ת@M[-l\@(}]( 4TAPOPI:@hA р2ȁ<$1@ 4 řTvHq ݼh.AC C4)`tI AF=IIg0Mj||CpL4jp0Y.Dlw Vh&%lԁzTBiP>dҔņ}`_;,@{MLB)xPϱ.(a!Dg4X>7@Lo$!Fo#U%103I *#XĆx< ́pЌrv)f]d7t.Bt~#ΦĒBwda H"&E@),CKr+m,@)hUB;4X؀czPŘB8 lZ'P DF8LD8 T,L.lp@ ^v.4O@ @'|@J`E$C 4@=D $YZ8d[f]A0ON4_^D Gp &*s/Lk4ltv:aI@zLqFqĠ(X$A𡴽LI$f]x4_pAR?SA X7L#i$t i64@Q ])>䙽jA] @hB A=iu T>PAH#fL~ |CzyZmƳ4+:$yڃA+h( 0-@ \L6 S8͒, `S"H ] p:Y\Wxcz:`M@h|)ݨTwGҬ=TAM,]Ma\$Jժ>J_,@q 0B ,dDn@0EI;ܪ搊~MA0GQ5x E B8  ܟJJvxYP褒4r&đ J  \-*dYplilLrx ẹ:81`BLMp&np0jB~/Dڮj%Eo܋y4HlfV |F H C!hKG~n=oD%@)$O& 5.@5K0hPIg01' pHzL*Q؟S|lq@_r) @K,pKa,$>-*`YBs8LL@i@6+tR,) %A)I@-v|5m+PD. QI'uX; 7, D[tY)H[\lVIEYa4%i.A<*(3)f`r0p%<G7ЌYƆvIGϊă4#)yItGn4 >)}WP )SIy9)jfB0>tR@BkoR%t@;1ΰA$"h8iF\ OI.hS`q4 Ĭ&څb &hf@^T d[E+lP 8@ v CfĖB[+< P&Ov#^na6DN k._peB^ז+xl}+\v UB$` L:;(!,,'$\|lB Y.`2], B)*@52)@  xj(,xL}Cs!sA pXdVgLhTl~J 4&gLF)؀k }SA gPd{ +iOSS"O&!~8Bu'@oU{$KƿЌ4C@k]EC l3Ph9|AN@,@%$TxH@X'1MD#:*0BȤWX9K lM`B.߇J|8rTQGp'Y`P7,rzвɭ·',WqĸLCBP(!=WI԰ &A (@ D pÆwq72w_AU9@O#AC4yd`Ri{{ ,  6@(Х=$ز-tY * C]H[lJp`$-E(M ]P`3F[\t&C •*`2Fbp Ҥ9Ig] iX*:5uԅ.ldFhRE^qt_^TqR6rP]6 9MFta ')W?k;D& X:2nUI:CH.4<][sO 5Dߊ :FU9H)ҠH dp%q\AJk䕸W@Cȡ 5`!6X/& d?"CR?&c"QE 01vD)$֪c #+P,B8bPOLD\h4#-ق1\F4+J(E^ L椴 1KH6\J!?^1Z$`㕹H3 Ih?$iJLV8ILGi+=IāW*)2Yhi 6pA`pekNkr(("R`@\% ;u1**rӠ ""̥h-\*,qАI y ؘ198`JyZZP':4Ot㋇;Pg=^S?`0%VΩ9ŴR)$ S$D:N9ӊ]phEIu{W4 6*aluj ΈUٰCⲓ:  rEu^/tAO$H &h/v$ :hÈƠ㲴Ф ǵZ4B S0!yh!h!2 K Œf /L^1tL)EXg (ܛ=݂4N%Jc4@#UJ| qLE@r2L2) *li {V HD%Ih+XA2,B.bD ւ"LTQ@" B9P,5`"4CօD#Ey zI|)Z"X2Ŝ@H!\Ȏ8"%R qtdcz)$ >PNo. #Ϭb(:>PJ(vx.\8@%ETtЇ2Q\b D 2SH1 R',$rQ\)?I#60^X&:9v>1 X }<"4h;ՑŰC;~׺h $.KHG eB<@0c0-$z["BlIKZJ\CU}1$OS}R)=p@%^%XaHQ:)* Q V!d Qh4")8Nq 9M >Id bVФÈP-h 8+H¥-Ȁ 54325 xX+i@X AFbt5`Ph >`}g U":]` #YMvq=N_$PJl\[Z#4ј0hA@e+Hcu5N"8IM<'"F r b;4R`,T$,ZBG*]0jla #ơ2Z!V)>H>~|p `PF=(?O(:0*pAhXlAh|[0p`nS9[(p:hܢW) U"&<XiP&1 @`D)7- @ᨃEFZGAL& J4p= 2-a$ѐ@RgO\E9: 5aX@>^8 Q Sd'/0 'S79-d bm.-@b⨃8W TAql (JK_Nd` r Pq۴cF&4 Z"` *ЊGBXh,Y ҉ &,bpN$ 2r.b|OgHO\!@`G؁fHh-86o``ɣN .- ʤ Fp c|$3.򕩂T$o[A:Ўv| ;FaW}uZ(5 곷 U @Ua&Z#z NpgX-@XI d& ІN5ZD@#$6 A  lb&$0 `p `d4^ " F@,P"aЁje] h oa%`)؈%;T* H#2aRh6`%H L@(A\@.< *teHf^3L(Z rՒb(eF.jAVΚN.Cܡ ! H` @Pf2`Ő#\d j&jD A LNa"ML(`܌Ƥ,M@ A *TD+D₾d*|B2hS rjLZJX"zhbu"$ Ҧe!0` ![_x$!@ С P''d&fD!#34h!PNR9_| &8!aС3JT @EK@rބjMjr!m#;`Aր8r6.;*l*B)@ k\ )…a`ӸE#?03hB(;a `^J#)oLB ,C/HFֶHF]@v?B $(Ñq\P@: :'1_'F/f">Axrذ2w3LBAܭ+G^-Èd2 m0L=?2%Bjt <"W#(ƦL. LL"ѢVͲ?R%U?B!"3H2 OSf+$sXzR-@AҨ"1#2#! _?b"|j[CTXU$HTXK97b#j]E_΄,d ƕ@0bAjQAh"IBST&yQ @!cU z(@`RH; axJB%XW3L X2(IOc& )Dl0Pk@֠Nbox@B<4#!O!ɁRǟr',"A΢? .`JLd`F )a) vaREZ's;3Ȗ=@ufdFSmV27e}mV-TXEX_}6fN@iM6w8dZc77LG`P"a0ktH$*@4yq>.BRw3}̥dB X!Rm<6| @ `*ZMQ7?*$`H"y'}5~\s_ *E)V_Bk+mce^؀8XtA,vELbmIzg `9bբlMI.b)VP@l7dq96R64$JByT@HYIZe^o 7@b*@JdzŽ edġTg 4ƒKd'X8 ċ#>u]|B2\FM#XOjFyn7V+eSw^EIٺX2(#j X)t"n.RI8Xk e9vW%_Rn3k\VN'bq ß\*xk_O`M`ɖlZW}ylu˴*?s[&̚olZI h` $BJS(G;:mFRh$@3+"`lVSP?8s㡕4t ً[7G{F˒dnp!jc &XB JJh@j¶P|6kC[I ld4ø[zu z Oi]ZܙlO'3:栠 nss[ğd|393(ͫ"` coB#jUE`lIט,wřz` $k)XaR "`Z3]a=],\2".&8s!Z)Ӛܮߖ ={ ­:{IX{`J(&Z7m]@Q.ʳ< U2OGR#8o<vZRv`'+&~Awg+'~ d`lF . 1,|l #>/` `[~v>!~[>^-Sa  pFBiIt5>~;Z~R `$1#i1p^~WNm^8=sVtD$qEgcV_i~$qY]. z@Pi ~Z{eߑXb*pmLdJ? 1e-bj_axY^eKqnշ#yS͞ " cdIE'…vڕ`ÈwQh'4paWJPb:sxg:갡YG\: X ƫL29H`۶2xP.Y:mFc$0{>]fiuհ-6xs'^gdHe> [:܀zu,Rk?=?ajZqZ>Qw͡|x̟.YZm@ v$F mPFh@vlSQaSKؐF \U_ c:c>c clQC @.J"d0lKp0( "]6 fX؁@en9 [p vԡ0ihYÖ}vuiI.i螋.`<ȢDӁC`Of%%(ҁ I*M@A4ţKh RUT0#5sTM`* 4-Ŧk[k`?!6~$E*B tTOtMzEF’Xe41̡[dcdpeƤ:d7lу*P e8fܱI"L_I1ls5Ӎ\BϨJUL:*z |zLsy1Ad}A 7x[$ t%l[$?[^CXaGD^.`A(W(C(C; 4݈_X(.bK|xER:_|Qi_Xi&1OU4|aOCFXPSq0]X/g~ov!/xrZNJPKֵAm]: e we|ׂ`Nա0Y&(`ylKZ ۚ֍ qkLt,"&w ΦhI+ZF4.jb<5̅Ɍ}:c'IUŁ s| []#iŬuCk~$#)<,`2( bɉ]L>^0'>)31]o˥tA=È0 sX]oثu4u 4pFP.:GGtX0d7]b!=ut^w#%EҠ01OY/}(pys6 i2Й yryCskc."`xDJSTgHXTW@\]EWa<ITj ɴCnFE0*@pC%bys /<,(棟dd@h1D]R@f~TR ~ )Sں.!ƭakSyP# ̟B#j~/:i[sDOC%9Vv2Ll^/io4 :TP|rH@k*l b&{F}Q_`La=EC߹Y-b 8]53B\[@Sˤ3qNLdȄ;ZjN ){CaEO]wQtlvZ {ǼV2>IXbM'BcDQ~̵ Sz&b06@KZA5SV 0<4(&&6D{ )d,a~' n_\,aJ:fٙQ/>L=++8|0HPQn]n煳eV Pz!ɫ&*dv#) !,9#MO*|=]k"6zUMvn,eLӢ~f|KYTDU=+&s|J# >Y&1-Mid"f'y֯s]q4n|/ DF[S1{]iv(ߗ}&亊Eڔn]^vٮ!%aEĪ; GqdCt(>B8^qiox{/#@"F&&uvÀL'bHY;'(.2sGD)': ;'\c?0u@=ЃFfWPPXTDhx'ǃ7 B0$ku=qCkRTrW7'{ T=a0kG@f&02=DgFLvE_ }cuSVNg%< =@/pr0gP# W&$'Ե:>{+>#Q Cg}W}ATaG;>T>hz#@ӇTjE. `f3<DžfIs\FW5TwVabft"JaHK4d_&|TMjn<* SPb 0 cTjiU"s(@;4`9 @`)0 M`PIGhLƗtQys&brB:V\y.`}聱N$Lq(>T/Smb g L&刋Q,RtEyd6 @0\ _/iBp'm֓}   ;y Iv?'MTB'$~^!ڇy'wPZ) 5 ?vP V=cZ@ك@J;y5]YPLep4p|0wv`%'bt=i=/uyЇnVZ'< `b:P"k:Ѱq*ЃȀ y<`IzXPwm^z$C87<&L0t; MeWG  \ EaY& |.  ^7 \ A_`G>M\u]4*  SP q00 cs2 pz- * cP0r_ˮH%(V Q|cd=!40fpP2 y1JCZD@e%=&b:aZTԗBjl&g"{y8[swxuk'Jzړb WbC4c =ɅtEԩ|h(" ibxO8 S`P F `)K̩nr~C(z K ّb'5P=_6ǰН<_ p\CBuD&=6jJ'<3{_ڑp ;ju0{F=ߴU +]ʎe{ysZIKJ~%=DOM}Sx7<>`{@B4PjI+ϣ8gU 0JZ #{##軋͓0{ƪ9 _TW,>deRL{0 ` qb- @ {^@I,`"@Wf_; 8~EP wv^K% KӟZ0b0'p{ @(s @  @ t@YItPZɪ =cxo8vE!.zb9pJ7{kCwǥxRyx(K=@K c*o8R1ڣ=bql5ZIy<@G @ζh=>cRV&i-C*Ɛ Pwb0L{u|0N!!6 ě3{a0CM{d?Zį-6@ `p  p'JW8i +C䂞 vP'+3`/B.!PR.A 0Ԭ63_ K@q8WCLpnBSkp]=SK6P- P\~S5Xj]p6@0 P 2Ʃ+'[[ҥHylw Հ^ -R3Ao%JP#D%n2= [`V`0N+@x!Uc'/, Ҙ`8 bvkh (@U>D(O"d󲂀q2KZ2Գ 7/H 2h@\HG1'ZR:.\ aW1!/jWҡfa!nscIK5ք +$V,ZPtx4؊@˵+ aV+k]ȐA. Khᄴb DcfNC8џ~fr A*>{ jhc 0(p1dY KP! ݼ, "*fcb"F T?# hċob 3 \tO"]4f| JpQ pDSP,jpaf9~"8B7f9z  APk'0jHAec mb ^!9G !,U{IR0brn}*q F+cx&#Q$(JCMz )$6#Q,pX\j3m0|?=@)'Q_g`|ؐuMc{Ξ r Q JbRL8 OC@ [Q/P Ncۄژa ʳeKzAD5/p57ХR0F,Q 6&X|h tܹ 5W>0/dk4Cb<:Scch/^S/ [XZ;h ? 6иc #؂%!A.X)F2%4OrT?9$(zy_ PH&=>* 9&8R鈞J;3{蜉9"7l:i Bk D3Q鍿SpUX `1Tht x%lpD6!,S89 ٪ڪ"F+޸7FHFñꣀpҩ;0s][ò:6#Íqڂ#@+9zZQ$IX+MsHF_h:؃൲3FF ]Ђ 96bAiHz:#8ĈYa dPԱlv;1ƓL-= !: _,hm@d 7R"[!ˇ} ሄ%;*(T @4<GSi]ZyDphO K xAɐ8â=^tHnа6 iF;AQñ$* /22I]0.ȂA+jAt tq=ǖ> q_p|`1p/C<م )=+b.EsNirDe&4Oҍ1R h01jJ:zbTH:) S1|5qaä@Mt º]\J 'Q4d"j;C 9 HXV7qdx]K2Q CQȇ 9* %Hx9\聭;M8"Pch/C]I3 (;0\x(C]D^ ؼx ˆ.SE Í)_ ()NbL"MĎђDsL` !q:q&@ [I4#TxΥx)&cR@ #Ћ BCdhH DQ|; 8ɻ7S%lC%Vn j(Y9w9 x=aR($: h  ( Ӻ6AF D_XsJ#`3)[@ b\l'I6ԲSG/-xԽ;E >[M >̝`(6[=\:\)`:v k b2ވ̃j઎dTCm h>ٓ i]ʾӨ0ϐPGS] j@`(q1-`[SKM`uB;)[i@FbzQӵ Ҡ`cp)3XAT]I:L&4pށHҲ2&% 779mzK% r/"24: R8]RK*P/O =Lp:h P]‚#TS} Bj ӾZ48) X(9tt@a6ރYY!*`T%]c`qdcT>2ҬԥbQ9B6;R-%됹iLjO)D !-^8R= ilH?-`*<U9(|8xhP{Q(X 11XtAPM@ WVaЩʤc)6؉ 1=X*^9H), r ޵K@=ׁ8ًj%X?iXR(ԑo`C 8€p2ې-0%x@ ؅gcCd[Fn^uDS2tܾ0.U7nc77NF@Zr(S f$DhflVYuдLC+8_-IL,>n㸏 dkMոc5 uTǿ@QF B-@`ۋ9]?p) ꕀh]9ҡ.@<*6Aԡ HI(iK.A3+80Jg =ϬaJL޸Uxs8%Q\ON˵> #6]U#6C 4D0-f mec G\ZEc*y Nncvj΂A<"]ؾ^-y2>1ኊ J9'bm1h8R';\\l*';)1Y2 sE]- fӰ9V4r 9i' 4?q6Ȃ9q>1@8 /ݬa-ffle $NRY2΢%hAx @] $`OlO oDH:0^6Vj[]㪎cvj*AQvQ0ۈְ,0KWށ"'3V>,H^*/'Ȥ S+qOu sºmi +c f(a 9yذr^7R *gklj!r@ T,X9Tl$t4P%"(`ȣ8;ǥods +51W4Q$F`duXD3>gwꦮU7p5Y{7_j1HM k $ a7U*L]xPr6:!#= P" Lrܷ!?xo; ೙^3{]QLfX*.4F=r]>lDU^ W]> n#>4/H ;!Gv]^+~g%e 0ڢk#4imH!Eۖ\BʊyRBF.޼iQFHRP"xvVmM KFaKIj5XQJִYc:zRF`)PRuAč `[L%%z7K-M]wT( H\h,uxVo2+S 2\ĥKۗf̺-_.o"Fj;p O]zWPZPfI[8&\ik=#OTFn-Ƒ[pIqa4y7a_hXuHay.4J]H.t()A#RSe4v|ѤB FH#\#N?͑pV~5bByz2)Tb4 [+vUPAUC:QAuU:PWH]ISYC/yvcIt$H Ә~и_k!{LpՕXbH.iиJ x)*uԑgu C@5FiLXY8=GP$AI͹h]Ty!TEv݁oqā ]ĥvzw E#M0a[ #.z'ޅuahaAXP,"RJ]F ]d5wKNCFtOaJ$%fiH3 ڹT G^J5q`3J3VH?E0! c=UY}6g/r2^lPjQ.d-Z`^aA\E 4 0|ܯfYؑŦtؚ/{ GB)..uT]GAy˟J<\uO|qisQB_L7Q-oב#Au`ڪ+V,_^}k~  $RU@mwaFVu,՟J\πF Ax֙].'%6-c\`a4B%1RKsR$/3ר┬@06 FA rjWֶ?S# LHr"ADbiG >̷,JE#Jͤdb1p@ `gA B}c` &xK. *4O*3i@2:5E_DP4`R.TUCl1b`*W )GhJr|,eV0Td "d=Xdi+^œ W^:D-缜$|)1Ts 8dL(TXh GaI]44*ݠ9 R>M'IGҼz940*V @)[٘]()F}aH'h`4x X0-)0*!&292 =A| #xbiIZV*(mVa ER!!ƌ&u5d3YL(49fe -*ZD@yx=UMNt92%%l^8 `n5 F:梦R*>"EQx@:=&܀ Ѕ  `A<#͞[޸%u<PE𠧩 H&%UP|VE E> 1ox 㤌CL լ Dpp T,4AQyQ Z4UPƶ1 jjI}Cazyɛ,% @ gj( Dxc&⨸c>DRDxŋNM$ 0 R> XePc2@G$(')B%BC ̂4N v@Oi&A=5.Bx2!h_<(=ńKPA(<!X&@?*Mok3 @ |"(A;XNgy\Rєk(xB )xW"Q]pA)F$ݥD08@y@h+Mҧ6AzAdvA(x5h+Bv'2%AduIZtЋp@J" \kPΆ8?&hcĀ?;( P*EsDeT(,!l !Axx²)-},Md'c+%;(;+BtCDCAUYHO/-  Hv 賌]_8DW+\,@2;ȁ}Ɣ* "B܀Th @5-Fɑ"> ޱ49>ȃ'%4CD2α@|9qomhb48+> s0WTXULn^%B8Iab- D1>P)$BZ!i[v TS:ƗQE`- C6%1\Bh8( I_@mJY%XBĀĀ 0s&DOi~< % g+($㐊k@i0SώvXf%0KYGA }55\.ڂ\g4='+E@V%OW_KY\\ 3X?ԃ-؍Eɖo $^֡*̃<$C=Cx#@2(}nAHo8ʄE@3 |?\ؙ@I0FWGB,%hB7R);xBd~7xE0ť-@SB#4+G⠆BP#%&O80tlEig|B ]U9:6H}\5Y41X@؃=%CCNHPLR}Xȁ0=4-@|&>>܀2NUyk% LRVM>sG1>68 mAMjp3C/~tQ(DZ8\z A810)(bB!VX?.GK C0 /?BsƛK\] yQ=x5^&C2 \h1GW-IRĆ|,@5"AE!\1DʑQQ*Fx^ ޓ @CDX62$CP5Ā.2רW E1\ IUjt A)['؂|i\HR8*!=JHcAQ ?>(~R y? J '|^Fx%?̂<*`/H7dV 暴C2v3D?&PF-Xp (@c -1M` I')ʘ&pC@ȉ]$!6ܒ&C[qC>]lPAT@Dp.l]"a%AT42hJ\"26X\m…h(@$Jp Hd# !M D gzy Mʁu4(.c.RN0xH`4 ֭n=?$=JܞXB#{0Z?1}x"!P)4]` s3JE&Z GbwȀ@pK^$ 0z9` J-ԒAʫ'¢haPPC.Kc&X,f Zj da$j/TP&d.AŸ00I %tG2Sn8k2-EO ' cb"D.с r "h(-M>gD f )/d ƃi0B@ $i$:"J6{rȮPa 7`fTAAucA2&d)!*K3%@0ß&.ɀp, x`$%˧-0!̐%pc#..T&w9koQډ=ىDnQ F-HYXKGK7rjaly0 4e|Z! $$10̠ J,2:ߠz( ;,伙P8`ìa@!D@vEjaĔh Ec`0@&,@\ i`d##yͫ)]LbnT#H}x ݂baa.t˴ 2p)I'a;Kc0 ," !GFэR$zy]ZD"A. &Yxp VIzIrvRkEo8,dh` )2 HaC?t Fk{ 6!~d% 00pO PC0V|BArBx ̄ ӅDzCRORZ,,]H$< aa hy\Mɐq0I?d "7)C( c{_|tD4@*%E> W떫``iHD3Љ([Ħ vh|ASp}gfЀL X!0 ѨH2θc>Wy'E< *ܠQu %FSeRh e4RaA$``*0FPʈ#3ˀRx4 ,` (cY"B:;6jQ+ȣ x2zr<XN PGKB4IA0 -ҫ$ A?P`l\!0  (A2: 2l$)jgRg,FB@^Ϟ<@4_$6#'xwS.aǚxN~b *"f>A FHA(B!v.b2 /<$d}f2B`haAE4AkN!u".")):o=؉BBH17h`bhqEDvAtACQ4  pK.anf.c&d`~ bZO@%@  n&T;@P2(0 %"80I椈TYA H JN q!cD1\ R 19^x]0 *AEII&C&(-,I>Hb@h B!p#D$0%FT&x , |vA#* v\_ yr/D>a(@dHHxDke)&Vݮ?$!T42r,1'"0jeў#Hx  xdK0faP''v v.WzOhaDa@   F' kS\ zhFKd1""+1ɨ,;5].!@.'x%-!:_lSl^`l )Do $q.a z*n, "+h^B  o-~.kFұB#%ߥK4pyY$,c`g)> (< -|n, >ZL*؀ 5:dD$04x(eC(਺*gG'iJŒ4N`0 ؠT3~)*%4 BD4la, @V nH Dv 1;hHH8F`T%#t42M "@`EAo:+eCCtAUC@/# b`@ .Ԁo>L A -bL@L}}'*b d""-fÚV/<pbEG/":H5HHJ/B 2 <+^r'8 c!b7GViarAKaA* <G4u!QϤ4.L$Cb  `@ H /Č_>jFqB(#m @PfĄ`t`@2`BW ( jBÃ"ޡqCc ^` )c0!_ia:Ѥrv,Feȡ2> E&AղX``==~#Wm"f6`n @3Pb$ *!xf…nfETtn kҁu(ӊ) A֮|@L5< u6h /X fAbB\GAKhADJ'7"JB. FX@ `@]ү lAt "ZqDʠI+SKdf!h`b@H`Px"׈P!d\edF$h ANSBVq$'bk.H}$I:Ped l!rD}vLAe8}Aal*o|XhyBBB̂vAL fhJV:wf@ۀ0.^`l@f渋7\ b'ipn4IǺVa0!b&8~XL.lw6? @D˞ j*ra^(T@LԌQ;pHbv*}H+6@ z7@PNA1ld2? H/IVx,KHҏxf!v j 7ʃ\d1e3r,ހ82<-jHF9ȄSk@<<-r<R ؤ3eи.!p!fBEb`F`4qTHiɕQb@r v \d6]QB@r)(| ;]D5^<6q,(}U-BIj@P7= š,%Bt6uRoc#|Aƣҏ O cl.kpy:#Ia[H $K] 5-X"nl-.墣$~O^ ! . 8p:0 y԰K01PbX0n'SiTT> w_=bxTNSx)b[Ť.HbS!9>y55L LpX8EuDb<tpQUE( ^xA3x8>M&a0 #1C3 pR5X@Iɣ-u]7q"hEnRE, !Pr)y?$"!J (0)ۤUhBcDKL|F>`&_uAK a )tEB$nM=Y0j00 `rD _nAvsQ75("(ar^x4/ N!d'lJ{`@4 R84BC)r0O)XO2XsCZ0Ʈ $.Fn5RX||L3'|@L|2Bz.V4tTkS.4Xo2; SL1*p;L ? 4Džo>%$b.B .Te1XA4,MC1( 8/\R%lb7L*@Sn>n0D O؀GVS~G*-pk,.İ7i Hy(`MI7r'& :9tp8{!R%EdR@V*H3-&O2 w|Bi \҄ct# BGc0Ju0tZf1 [D`;Qc0$eQ<8ryQo"jN3 a'>j}; 4PN %E]A̴l>b8`f$3j( J LP<4!ܔXHpjaUD3O1>b^E` UfD#F<Nl i Z CGFPi܀1cD!D? Fabg K%I*  9 12 *E2A-&e5$>b{P@:h)3A\.Af#Uj&a;/()3 ȏb&X L\St[h Va+>EL]7C,\) K4 /ϥl^xmTd,"S 0":$#$zk˗61f&) F\ejG,ClH^]$)aE:VSx v`H>:R"V4JmBe *!?Q(8C0e\$X~ͤ었T(oyvdX lх\(_E|n )cg(ArS 7\+ۇ>6rQQ{x4D@|Ї>ƐC?n%{@ s#9`ӣK[=1 Py",Fq2e01!y$aVkn0 {s840 |` @ !p=0 j@qwJ`#4NdGaNDŠ~zy% &JlPc&_crF{ CPCNĂEJ{pË́mwr;l`C pnpuI!cW2!#>_TX . &8 Cpab>re?bSaǒ!;V8&`yp!28`e8r>m#v`ؕ U9C <P`p/z2)A dX{fbS 0DdQn !apsHA6 72##_(,0@dRf!` lQ.6Sk^'p1xCR & 4BH &(Yeop[ee$;fO, p"?@u$ #_%UQ_!oDwNaQ #e77qL[q@Ya!E <4x5b!}UW_2 x D#]5 tp{ pPf')ZtSr%1^ @ё yp 0xTz!JB w4& WIau@ yp5f$TBoi@t {9"tXPMAN8V0th"!@"y{FPPa:2p$0$`qz` yI.DP &p2H:r#F#V`{̐ 8X)ofB( g@'w))%17CF')L 6Si1ybrcTaGbi090J!W$!V}_ b4LaHTɢ)0]Yrд#R9ʀ J:U BB{7 VB0 " V5Y;/xFwÁe @cǒU;~a҅@.@4 c]()Ε(7c > z0('(Ԣ>Y"H:EHyC״ PH@sӠ ;\9?GXV)u!` e3鐨|2qHqꐸv$ؤqZ6r'r_E`"HzIRJ)iB'y;g$ ԓc 8z}6.Eauf7wpu02[ 餁Ha|XoYg]0PaH;qS9qbGep恦L h=EGV*1Y2*j8g!.# p ;B0k_DUH H8? 1um[@JΚ>;|w)wC%#}xLx.eVc{6O~! * l@6N"a"Oip)ctAu᪝mn UۯKS 2.#K4?#Vi ye|tuOa@ҺSzѰ4;{#>mjGqINFsgQs.yF]{,7$+p2LKbGDz%Z6ReB#NW_#9{$)) G{T hZNUi.06ǻдIa3X2l !TI1O,l!渇#5[ec W##vw y/{r+nu< 1  Be Ӽ䋭ip[C$ѕtw蝞z&LCA `V٧yD*yʅ2LF\ Zw>'4d_p,J 06ܻiB:μ6SZgZws QW$,!N }ڬ e$uJ fΫA gA$dqFxR(J ٨g̩ULX8%aH3%r9⛪E6qE'1X|NMZ&2ܟ5r1|,٨ "a|+Agn{So\S6;HBCLk&3 | X_ >C@6jiF@6u9(: 4XN_p@G/aIEhp /)i;K%,(Q◓$3/mfzI A:|rSoZU\˪#N)zAC [ܾ X`sbyE/^iҠI۲/uf%1HFS >~|yNɣ'ڜTt쬄2*S]lfKAÇ8=޹eb/lcvd.J' V4xr`Ϙjbyqfk;whlgJv9ZxMC1#{HTpB )dPAxzPG hA\`~o$bq$k1]v%$0R?:v jjTz4It!l-7$1 |M"ÿ 범بJ*FCSr]V`xQϼZ{iÍ7sW?cLzq``.P|S@`)T l NaDWQ ^0 |X:%iP4ܢ¾l!i.܂ )Q`t a-Ň;K7%X2-.1 Ӗ-xq(``bF7vq``K[f1BE %Z@7%6LCaxoIca*R]0AÐX7h.<a\'Fmeb c*5GTn!9a59C0qADK0їI$]&a. C̐2Y`i9KEu3b6.>4Ũ&q_Cv fEŸ}`i<-!.@.䣁b   V@ WaH#Th%jBTSC ȸ(,"͡9R[pHLǵf)Fisv6S q6iG2LSOBjb._dF6 T| RWS#b2(>ӕϬe4]io +21.2DFՏl(@L`*1a9NĦ2Le34su-a Q26C9N1V\kJpl(Iv>qdJ'402ѬNԤ@qňR u>kTWv T |Ћfu j#SXA#FAz9S+PaCB"56wLT*/lt.QӤRT:*E,*5dGІp[V+b0qE[\0 l 8dՏ3,~4u2c l6^ɴap@gC9FN̓OQa][ˆd-aQI5F!WC\uH̄JZ!E34iY~chԢ"ywSCjJ0 tFx>>l/,;4Dw=lc|b}'R9d!Fi#9L\j,n}"0A׶ĺkb03; v[bE*@/ZBoM6QwCqX%FA4-* L]])5r:Tc?MvM&t]W_Ѕe[ZbT;)Pjf3uV\Z^t;fDiB6=6q0hx8:ܽ`V][_Uj f8.GrrH%R.U$ f2?};Zn,প7jq!vs*ݺ`L$MmC.J[VtVE, o02LQZ)ywfn YbA s-)K҇Md0bռT$D4EsܶZąv*VaBnLaF _Ӫ "â. xh@ *5 !{S/Q,`X@ U1  )bG;w"3C:r=2$7)bhh >(`&6l;v#]14;BB@0BXZ#]9!wBJ@yߠ( #3#[3M&3--2` 3&bj$8rj`jcsDD܂ *07.] +,/s:#r%"!B"4 s9Xt:+;`!`0/R‚j/tƈ *5 )+G*=7<x#S3 B4k$ڃ;C*7+i{ bC =HZH>`q=#a1PZ0;./Z6?/WL2aGJu,@>D; ik0>*Z+ H8 ʥJ /.Bu1 $ P(뜚:DR#-A#!96> 8I{,%}ΉA֑Zq(Ԥr.Y R_0e"-)rFL`SDӚEh ؃)ұ>|X). i @VxIBhHԤYR\ `B xؒ`( !0@~ *܂hJ]B[h`-*7J K 8 ؃ : Y<$ Zh SqSEU*8!h`Pp<?PyPZȽc7z 6 V=R!!Ndkc094 耓1hX*=.5i+ʏt.P&bmcʲ9?cE* Q<9J倶H*bBK{)E"fMļ91 3R Lb`@(. 1؂ `SԆX  f}X'eްӔ.4R}5ժ‹<:4t E/e\Ü)`S C 7؁{LP0D8v  \k>ȃ؁K$$bCqX#yj B KXO8[4%D^]#,=7n׏>F)S1m!2l'ze5RLD,ޠ#xPj5FؼeQ V /F(L-m@gdQ@ʇL1(X lܺyB.gUc*-y u@@7*1hU>1W8J@0pP}=؁}@?EhA;|b=Ѐ }@`kȃK`0K V7/0Ҏ썢:c$@Tȿߴ/K9SOS]dSNG,)6cTcˠ;Q(&W2D\ 8 6g:"~#8J* K]l|4"Yԝ| m*(oRQKbœN9۠.0T@n1f#ȳP |08(i`(5`l݂F04)Ӆ͠i6؃\Lh Ĥ"P0$((&؇Uv32A5"1L0@>eݐ:m ;,8[.ղ+監{MSJ!M ЏK*D'*46ϒǘ8lQ?2Q4c>,ߔ1 n0b@=f @<1:U U; BK{ UU0{ { tڅR6@9_6pMx?t!DuR∍WFJ>΃q`&؇!g>BS5&8USЀ[P1p UE$Ȁl@8(x(֫7#͵$ [w 6TO<(?ܲ:(s P -[\(d(C R)n݂ 0I( !, ɠlbE4.rnp%aiPxѢ.;  SPg'6`p0ؖy tWBh(P]Xtm8f̞;*l"p!"YyF!4ӝ}i8D]uvVM0e4 /N|mOF.qԡ<< '*|hQٱEtv9xbl|'Z5!#1%zy89P4lAOISputЁ}K{!UBCS 3@ ^P`EZFxɱA ԁ 0@Y>MJᕀ8.BEᕑ9BpFC͝.@BY(p "uRJ(DRx5Dաb_RUT,uT\p 4N%PJBka0]146Hae K/V`6B'amZ)صe2\"`t,@0¢ӵC6fۀ2p H""A z8@28 AA-u(]D5h@ d@4* @˃0 70n"@:巊(@_脤yB@68DYĨx"D v(§U1"&2L,bch+K(\5DkT~Y|A,z6p+(S”:e f80IF 1|ۡYFa]0Td{!`*@l Hyu}|>b`Amܪ} dw 일 {tBl9/`>p1 H` p WiA %.q B&`e[`2XQ>OZ /CAh+ $ d7}A ebK1L@ҵ(Dȅ JрHIv`'1d@ =\$d"& VR?Ac3|!qR&@ x>( OxbZA>"Q`vSağ,&E$B㼕 f{?]dv?ŒUWbv T,=栓.#A ~)A(ç !/$ , Lbج#c>RȌNb-R1A"tXLXS80E :.P#"A~p؂']|O̊ړTbȅؾ7x$q@9xXb\[^e"UFp!HZ0(nB2 qj+!ɀS&"aAI_/7L X[&weS2X!uR# hYnh1u(E@,dhCv:@~S #o%)7F,2/_2>` 2-3wႥBI 6v"AIc A 7` vЀy1Wl ڤ1Jh2p$``hq 0>:pԺ =Z> (B.`Dz#p>c:S4!j*gZ xא x $$X6.4Nl|Aq8< Ȁ9\@ $NVLXFġϢHPVt/B>(NA5T_ląq lTa - ЁPRPd @!PqIT ] C*0E,&Q`׉U0mA(L$YQ%Kqb@  ā('@ 1<L CA AD@8C,Z=+Ch$hA|@)L 1t B  cp{x!:t&HB"C%(AԃY@C C2DٗyHANpRlȬ$:H)@LZ< 1LB!>@9[D9괜p sH $@DɊC@ƉEĄ,/daP> AT8h8̘:.A>B5؁.x1_脔 ]ĠT  6áMtN[uF5MJU]bLTQoPiYW*H #%@B-6Vd<=>  t}hE4HC%:h7>$t,1;x>B @e@<1D@yau@CdFf:lBTBN*? yD4b1)@y<\ANAmݸu@.pCB|$*\N$|(FĄqdX[8D`D \@,XP;́9I TdAI C--TC6|bKpApAp D_IbաMT,CX]VӕaCaAIDINp2ā $ dj*9%<06anA՝hZ"J 4IMQ %V" p8]a )HNlM=,2L,XC C([P@ô`Q>BlT*7A)L+(< .Z b=0A0xäcA A4+, >A&$ 5A??XA@$ D9؄FDZD0,_u&Tltg^0CC 0'ZF4 LA4 t@Ƣ:&^ QЁ02,=ȁP*;C?l60CfaqhCAHAhA\Y5d;@?4;!Xzt VqH:C GXB2_B;2$cʌ(hEV@r*:&@|<aND |[&rN)-\-0S9BDKEB<EfX .[?.R`V6\ \6L>/0C@5(')/D<%"5.BB(XB>4XY%B sK6Tf1 \ydT~۝j[oW0|f@ @.T=L9*ls)|c#u'DaĊ ۸C.11<o)20C̃'aHvu+@ t9SRb',A6lD x4=P[欸H%B&B%9l@$AX.E1QRy̚!s @41W,́URƃ/}aidS@-DOLW1C5XN(^vTRXN]`W>q@q+p&/)5P?T|6exݫ2boLiKOM]OԒU^3@u l@-A8-~x!`$P{YC?C106  sVCB o(3P#KdPVb7FF9Zp uy}t .S1%ptVDô+4p{>P:d||X^p@\Lp+ |68'vʲaAoruâ`1A*ѻ%2(Ztx"S lÒ'>PBV:uF:mK`[pr}KjҰIk-]`;(# -RsXG4(v8z1b!".@ E[3"/:Pň?4dƀ@cT T@e}`B[mcR3&L?ri1l@JT'?Uhc jǻR/D[5Zc<e!Uc U(5B; 『^tF*o&;W#ȧ3*X[]p;)J*)`q8覻d45]ꐏd8xĈg _x9)9B**1<"RȂx|Q4-݊˶R/Ǡ/HV YP> xw`qkU.oSă+`:| @.:(` ǨI2.\pƭXx<SK`եh'Twv?C2/|E,?.:uܘhPh _`ѭl-a>;H O]!31R"c+m_J."WE0Dc?0@eP!g0+BiPh#rFfwx"h  4 "x*a5$P+ {h0 12 0T (9wVKD.r) 27 Q5%-i.9 4B($/X2-lHJlQ!Ej!u U#hȎkkD" \|u(KPR9 ;@p 6xDݩc˹/ҝ&]iPX99Lj[MdwN vש&=+ц(F_< `rHz̧:=[ٰ #4!5txI,ya0RV 2dh"Ag"|.M+.t6 > Sl*ăbdAv[3:yGJx+H(T֠2aI! -8S,lbl8KVnC)6ZlL82cx` >E-q` D5zO =pKX= E>\ H @h+:v.XN80,Hz!#5%x=Џ UӤUXv8YALR:Tc*Q@5ҒQ#IO}@D+6| rAr9l fE&RIȃ MD/Fu0r C)T (a*P!%@ P`r!+6ٵXό "?AK>=j!pb @~޾#(5mK Ta Z2 Rr,N(>bAmD5| `$lPa @H$v,dc!l ZJ?GʤlmCb+d@b&S lI"@BPAalrJ-:BfHb!@Vzpx`d a܁bmS Nm(CA 0Χ  JJrlcJ & !֡dZLA" >zB( .% BH*4`@ԑ @@ `>-?-9 mR%cF c6` *@R!$Bh$ j^IӅgAh DS  Pak.FtbXCF aL(d~e ta}`c.Rl.Ka~'t:LR!⁠R"B`6A-`@@TaT t9-5mu @ `rZ hL&¡Ѐ2a~4lDCHN%v,hA  L @ ll $D.@#@eB%rq?`0/tAj 4`(`#q,@v v@ nCu -`*`̥ 'l8 ` zO* zor$Z@d2amNCv"nX&! d lb`hNz&:V#FD\n @H$Ȱ" =@"#. 4~.3aL  .RA©xD@2Da#t윐PzWg'uΦ£\@n}bftGHZ,mѝL) @%oNPAna6n! grrk0&iW- @FD>2@$ tA֨]bG#.BJ0> `8BZVjo p@2Xa>AvxAD[ aaDC ґDzNć!` rLA*a$@2$R@6angWe:F9tA z/rK4$A`֡@ @ eNL4fj")fEU JRLZGWg)~GDA x!"I TznjI2 ޖ0%a *$F#Zq>3lnnna `!TקlxPAH19gJLqo{c R٨!%d : 4Jڢd Ơ#^&#ZU#~?&zW!T!8)Ip.d ."@؁ޡ @@c`,DϦiQx̥6 `ȯC̠DrlMBTAʂJ+n!? 6@.,`lA ! XS"nXD@~FFn8 H a,RpjQ`P@ TTsmvY?΅%gͩ<"` R "< @dO40tAN2jG  zșH^: [gۉ9X,Xa!D R`N @+\jt4e>T=| gHR!v!aL`X"VSdkūsBͥq vahR E@X`@aymyKlxt z`DJq@ERnIe^@`AA LA , mN#T.F:ag.bF!z@q#:@@]TN4;ʓt! JfX16dl0P !"zSi4vD@} n[7S'v8@~Rb =GAODqz`;#zE܇y*'|E6J< @fa!t @ w cx (jxT G`.. A&WOҨNt\& z/'HM̖.@l @Ƙ 䇂V.Rk@&!T@` d2TIF>v|ƈ]Xl:FZ#iHJ~tvq`J>@T(I*/vt}1ŋc4[Pmdb68$yWK5']YRTV-c ԩ`ݺm[0 ݦV].#uJd bX jn9zT4S]ziÈuIc6ScK@bŪJ6l]Ig͘)SM 0,XT:x߿Ǚ{xmǿY|ާ$Ht  ,Dp@}xDL(L;C̢LiiDuZt8hl{аr=S(` 5pLr9=sKIeDQDcaJF#tЃ;pqp y0lDSwXF p@GF0P0sq*ۈ%bI1==$ <$@[}.|Ѥ#Qq.p/ eNb*8!aR.<MX*,/S cJG첉obL  ]E8 FA0=baGcq 6b$;3BGGFI.Ք Ea!=Ep`uc,a.`fK DXE`1E Lwwu M>ŷq׉7Ţ euy ]bZ 3, "E O,.1而] c (/J8 PRcf82]M1 a:4EJ¾E1@E j`3@B*Xbd,pLdJEBzKXCbĐQ .S\'SҜ5 O[6yuP 9#ۈŒA="(0ʂHKm*b(=$#KZЂ @4 qP ,`_s0wQCv ѰzFaAf =F].aq,v@_ F$4 AV0[XSPLʄL֑aVP YaƤfk7@$srB<``wq U  Gcp9u } ST-i &1 p,!r0*2 F@; V*r \f{.1sWaZ E ="0H p v  Vr KZ1'S6 +%ǰ 6cysY0 ǀ$Q= f ǤS+ ^80Ip x Y!%eF44qgo@w@.IJXN $@" 7+$lT qA p "B_ 0Y,jsPA1g4q5$X`Yہa[`ޱ  PK{S %w&VB9>Y  s<  3%"hi1_ -0 p b Ikspp h`P YP]1'4 }xp Hpn0 ~ zTuZx6Et~!# "U2t `b`: s+Ǡ{  V*"XHNG4t{4с  0Hp!o UX qKoJ oЮ:ЉmtuKh(._G(=w.QP9 `d6goϪF)2,k t$!MXp54,¬]ӱV|`SV4 p:Wǀ [4" ghc@ALP> Mk`;V\& pwP6&%ODr{4pH `@ ɐTVV 7, D  6a%Z, f9ؠ@B2#fSP"@ {`Q) mepLf<4pwBIKTE_\'AzPU9C.(0"d B VAvԉRD0Y%Gc@ )`9!@jtK2pD J._Y+(p7_#!M!@\ $E7_=W\*Cs``YՐK4(Gtc00,êHQW3a1Rr|bbZfMk ` & [qR< C{ 8Hs`g`@ 0HQ@vm @y Pp+ "lgA8 v ]/>V~PVP@dl Wb"q~{RS<Yw`P  Yc`yY c@- `+Œ _RjrmFIg `dHkFCP )$rщ0\P:a\XqZP|C0\0 F 0( [Y_y ;Ϸpp 2@dH1'cp vdG—)4pX і (0&̱6LImCm3-Ɋbvam2 z` V>0p* .9e207Bٸl9WM{p׈ K;G@2P  X.Z|5gY - /p 0p@}0:d&8`#>P-P 3+UEP -3-p 0 ,# t2)Pw#s JF6!}ĚYD]U!DÐZaKs `{vDmTB 30p,}#HAz, ؀ # )P֫f@ pcۆCHz||atu=Љl*ptrkJM6l6/l!uV:DM!<_@Ip vDA %P$Wl PvcE f[["9PPP 2+2w*IF! <IEɰtzzy7  SV \#9q% 2t`- P 1ę1#CžMiтW. $H`#tqGX8|%ǓTn% #F^ղ|Qi-iDeO*- 츠°4Q?nY׭962b'|t|%PCt5ih8t4ͰþjXU SpAأU6Ȥr`Wt eh IR )&RT#|BIKdFt,Ibq CQT-DiMq-a1cC5&#Tt؈^#aH5LýॻDeQQ:=0h#FX$,$V s"ch(րЁ vQUXG4Pht&Xt!)F` 3 tTXIE:ei*PA8 ;ɂ[(b0Ki0 tx J r$'/a 99Sšr ڢ48(X=aZz]l% tvHUuКEriŘP !m=A%؀$Ui0B;w($$?4($` R>C@" O:"=PGx*.hox:ÕDŸLlDRB`<5m֑ !@ qHDC +`Eڑ,!{@ jW *K$Z `uM'SX0 E*هP[(Da @W8gB~D'Q-zۜFDe.⢇ 6+|95A`Dؘx(f =FЀpע*}=\œ,Be\PP:,YX{ ٞbO2LӨ84[:"\!}OrNt{s4F[{!3c/%1!ce6==ͣ*H!>KZx*+ajHA qD@f;K:Ӂ2GX 2X*%Z< Z%P}UM`=XNFЇvP&)iB-   0 dzh;;8.s;UYtb 1@SR*R%:2X?u9)uhq؅1iꀦp?7I"H @(O!IB-NȄ[ZV01I-2B +U|"zóE֐3p3*{ kάհ3 bX*2dtFL ź+H F 5 ,k|9Ƞ6$>jj㎢؅@=h0Gp y 8$-XA $x@̈́Mhs H-.X=S#ق=9p[\d؃OIp@8 c = ;X* P# x\L("́J 66؄?%L.i*K/HN  p؀S⒀,2l.% itB  jn J*< + H mbBš'F-MYE 63rF`,-,PmE:@>u$c':zn FX%H㿺;H/0hHȁNPEp *RVK*n*.o`n.&VpQ4 tNX%vՂsp2)v6(:#p](XIJ( h0u{HK9=:aM1GZt(&$P#N+#2 Ҋ8ig-XHE'ڃҌ?)O&8Va8cRuF>F)C*J\VQ!Z)'5*R|T_)! xBT'F.x̒r31˸"S+0ʪǚP@Xj4׹xV2!".F `!]k,\:`Ǹxb1!avHre(ZETnE,(F>Wȓ٘0c$! |2 a D&f"qȘ(J*heI0] SQ$*q gCs kXf݉F.b(TxI{p$)9n\#DSOkj\*]E,e9$9-@Ntu+]"%]DEcQ]Р )n`x\KQ>=EZz7BUv*7F1 {eM,>­;J0Ra"=Eο "TLU9H0Y"W,KɜAVƢ'$ 4f2 d%H@p15l4y'5$LHUa-os8pw.o""J:,0=:yzRrAzNw8i.y{)S$`h&%n`zBBMǞF# n<1Qo_lUϩwK$IGX,kJ iN tEH<u6+2 +t8 zƬ+ N Ȧ؏K <&cP,A/%d܊wJWo{PH (3% )R}`lcD009z6@g"Ay4gyy^5 ڃXNT $SEޔZ DRtKo7 H*Ԏ6aP]|:N}+H w25lK1 t,"Vghnmnh1~ngq3,զKwdI]H|m.hUM,Al쩇 A5A[6jC . Ȁ0frcnJv2&2!f6A0؀f>!a*#al>'2an S)Ai#lq&'#Aq:0gq6t>gqJ\fw./1*&J A%[~ elFafa}Bada Za&!%ʦlR!2<.`-hCT HET4 f(nV($X-ӜX GX$J\`׾ tWk8eOP$P˜&ĕ( * 7HL։̮5) XXЬ\C|H] H  /Մ淋dYI؏O*/C4uIKL p%6"T0F=46|5ѱ26@A/'3@`0`&H0h01'oG䌋̥ ٌ Cxxd> 'JopYT] A h$[ ĠH8I/}R @(ɮ̏¬IlUYI؁oO9,Ruy.vD"]/|\" +͒n"@sP0d,ʞlZoG*$VhW& yDT+i0FtGQC(ةB;_A,ٳvvL 8Ox+ubXhSvƔG}ʩ1\D7hMU\)n5dˈPMVK*IsL0 `C]N -#Q嬺0ʈr)+)+(&S3/KЁT5'1Vîn2t'\+Z|Ş`A[s@0[>SM\$DCbFDXzblgЀ%-D4H*RhRXIsn ogvѶyH,QlXM $+z"XSX)WT@Բ-0xftCMd%}Cwݟ#?dA&~DrV)/WGxgu߱PwuiiΐX$ ąB0LP]H@7r1媱]W Ed1͖qY߉yX̔o |F3UXTivNiyI$1a^yUP@ ,*Hs?-?O@V= if{ jbw&b"ޚz<ޗ4 C*t*eP;IN |/ϐrtkHI/1.7gE B 0zJrOAVz|=XMV {H- MgT D^4굅[y1&{S_}{D]Y)6Fp1I"`¸E۲=ܬRԨ!j 溱&[p !B˰8 =jP1FQY=09b8R VZe%j(#b)H2fj$CU4Z)訃 ,鮢5/:)HHtJ+6y# ˰4*Nh/ߪ2 Դ* ]-B(86ԡAӬuɅ>uI  dpr)BM +QfjkXt:Rkv4.baO.8XԍvMP1eWtc S0b/4.f'T3 FZ{FqS嘽8=  BHe".JNj2B2HCJtKl1ý 21CʤR UMmJ"AN%U_Ny ^Bw0Y&toa:dӭdS f@%W\Q$YɺAa1wQ\X h%\`1bq8p%,LVbǤR@LBKQSkr|L 0Ł0-)0pAT#L0Za 9j c=H<ƀxtEΞ ssg.EAg2d06%).H4H(eByhg)]BLj[(L<`a/D\$6La ("Zef>] S@u X 9I2N{Ȫg,kyì .EGAʥRMi׻)0L#\ ^$i;q n!  IT `\ ybAa:F!-FXTD &YЋD E̍dgd ـV"8L o&N"a&(I@"gܑ"Va"^y:@dD@*|`jgDi)pEm"݇(t!!Ay 510p)+/6.P$8언&*lPTc+dF Rް*` ` `8x4Jf|jASzњ&<`#K\Zdv">;8o_x\ZAGbM{aĠ0|nv1ke : `oFt!ͪOP X@`SܲOc&䂄DFȯg"*ގ8v'bG*aG* b*` 060'";#le Lzfm Q | $)'LX*hI a߰1|. 0FWt68@J.#pAl  K-r)STB j`ְ!Ї 2Q` !?/RK,;-hc tN Kd H/3/4 dv\!`D%M’b@s1 dB:so bz*mHU$&t(؀ i@1 ^|a :H-`b DAP!*'$ca @P P@}:@Ҍne?DIPR2%)fvx(R\@rJaMK*BfTvAtp5b_+ |a Xv Pv J\}QxA96ha`@ TQ:CBuCȫas b"*bzqEnuFjgv_@GL",< 0H;ifHD\ykf5_ ƀ$bgVZ .@&r'j'i^4p@|vO`3 &k0W؀W(JA4t+Y3x-a!P`6 7'\ Cqe/aa) b  x.׽/KafEFDhUYw ded&)&I LyZCB9HfUک%.z͇!`(tҦj )j,RĂ1p9@@8"G@ְAմu_j*@OVCiLQfVx*F\$`U!5ڇ)SPbieO65[:L+]g2oRbU 1U 2vfr KQРj >'` @anE !mx؇$3y젝` a'g"Q$Rd*7+V#2 @@fh(8rUBX:CvEOcbEv J{w',`#XH^fywJriJeB|:B;xx\vKh_v"JT2*l% yQ̡F(MH*ȷUR}*ܐ+imۂFAp|a< O%mN a7\h…ڧi'(UHm*W+Zvp.LGrj8rL: vmfV. $uHa vAgzUix7aډ\\T=&D+t`@ANat@@ qC&w `DRv[c/_8/Ɨd^I0gbG5ED[ IA yaj- '^gN'@}ؠWwv("VISB Sj`P$FfUc@{@ѡ L/d[$YdE=yEo{e* 9_9 }ԉ Td><,1pi\jRoFSV;ƠRb RhsX@ P`ɢh.@_[!T hUn TT`T@ @Ux4@̎"`ac} ` tF.i JcZA$Dâk-3j6[4A $F.Q\ZɑTJ9ZU3I[-8С_t ڱ]ղ#_ULj]_مe-_v-s @`jb1˰`[BvK7aÁ1&T"PN|b- 9b :##Raa݆Vmz!{XzNݺר)lE)qL0E۔|Ty1ʓ3ªʑw֧$Ӂ!C]$ޘxb);7߭1iS颀`!9spPE.\XAl8.l0-P b4nj,Aˁfdp(ѸS&!PEM s 4PCuC6蠂C~0  0(mQGm SidTў.vXdQA[KP:fS[p`"}IF46b0A@O\*BQQI  /Q3FRM]iy.dZvaW|1/uCVYpLÀQbQ(/0D | 0%R0|M Q5pU\l ƪQ0 IYd2m7u'rmw]x)/'3wɜʭ.e4P6+ҁ 5p5KTS|`}2(`@ YJup@CVĆ_[ų 6ħ/xCQ,^G9p#FvS!cS /tPShG+m5"DЇQ@p D-&‡b AE _Xy h}QXF)4D!8bGXXS&t ځE>TC`!()x@nPF-8A&юK,#<1 ]@MAu3lG 4A.@ cKI,jTF% 2(A80\79RyWB>3R ibQ "bҢpA.p":!?.S:a] 9Mb MH%&H@x <=,'NG+FB֧p b1 &W5alSe$Z2xF5:&K͸3/Jb%@`[CEPXlaOlc]636J6f1y{RV9b A @9]|Z!4B ‹ B  jxQM h`ז-zv19(a=%:҂8`2xx.<8 <ҍ( jģ.ؠ Ѐ; D : VU\I@]%w̡R<)C ؀8>@CG-j/.4BvH&Jb&, vcEȅJ&^ɧ0%OH,y 1vG,3g@5-,D.& i\#JC^P&! 5  H`Gqa&V ӿIo3؊}:XDd1ej[hZ.*0¹j+A> \Ȁ6( D(S.]8Vi  P i & o<L` `g A.@5ڦbā\j[<L0~@:*" ,L` UX`<iptvPYPdAP  e3PNYKcdxEb AP h (@% P-%*9a ߳+=?(f ф (=@SAOu^4 [ _&{a4`M0Cp /  x 1x] z *1PWjAj1aEE08tF_t|AX(Yuw}_}rpbH4`f D@*BxضkҠ f5}P \ lXD5$Ip ["6^ c@AQ &#7 0 8y:pQqn` փ"At3!+-6P h = P YRBS' .P8c8j %P  @+k P E =164X hxSnM3Gvڒ9vx6a6WY!s?> vK:@ ` ]OP0 .1J1QD11a{3|c|&3˷F1}FW(BsZ_! 9dQs6 wP?fT?(HI=fphFP_a5B p ŀ B!–H0 {K5A! u!4Hb! u9 oVLLp:` ') }2aR  AV= CP+ti5~  EP ІT  k0d0 @&t[3"eTv"= X0)" t\\V]&+C[V^;@ C /aO $ ʐ*r*5p 1Tک1c7X926!ЍkEXF5j[ft"AYrk(e"G6 6`sP Vt [qrta}"uc}P:ʀ Hvl(&?Ԓp  * Pfb4.V ٠, `<"` EU=huAfԤ0)lhu` P JPP+Z?6m6)vcb i ꀇh @0Y ;I?7S<Au$"9A-^@QfR^ ʚP]#gl.X2@!`01x0x 0 ׊ P/pO pKW ~{XQ TADYtEʗ|UY|Q35lD"-46`@ `e)a*O+a?84P"z`p= QRC'_C- FO Y | *&p  Lp r'qy`>Q hhP 9h v+5aY%'{wP SliH]%+ 9PE p7E0dd@>?RSWLOH *t yB"(I0@ (OF`U6J L$] H`7 /@ќ$ B DL1S!X7jF)cTkXhtY<WSg>P04`!Lb"" % p@{TR! -A_C,%jaT >`D fG s@ ,6р8VDV%w < =96ԴeF-/R`u ;j 0RLs?@` v p_Ⱥ p Є C,N_]^[E%{ *@P ?I]3GQf  @cLx^!є5Aj" t@`"!b*c[|m2ġ $']\{^y&:ܖp iQiMXP4н!ED9|e!!pqAc MbY!PB * m `R_k>p0 a gʩI%l@p ڕ %+p`9 @m 0tP  ;ҰH;`<b9u@+m_ u `P %MN)Q!@t7 mP@ `Y(QE`X5 L.a# ]@7% p @dP ~eG5,6l @[TM-e֣v@ݨ:Le!BQlOuP'NQ ]p ]p 'pCU_`XPr=1 ׉{#j|x;t/q2v%33!3#2 !quC ``!al p@ @*= Gp!_H65"F E^ -m jM'0-  l?{b! `=6P2Pc%fPtpT3!t5u*pA% <-P {9W P %Ү<18-$sI @0I E  OY[ '!h  mxx! ]򅆝9XVA,[j03,M0 [m1e $zrSP}GMN1QƃY2 2xEψ:2,Xa586LaYnFe~-WmEBEYh3CVȫXz Ex;U:P'Ux%@cW J W¹N\P%;+LE6 Lȁ &aq vکX,%qp4M]`D *PŽ`q36%%bx](M *Ȉ:b%cN/Hs ijÈ &hĂ(f#SPQdyŘ&#G4 #.H``:n ʫ̢W^B묵j4T"K)Q++.b 60/E8AZ.`Ʉh@d@K& gX*ЧD)YQB.R#Ґ-$L(B?>D^aJBsTB U2Yg*V`?hpaaP2zC*n !;4d8zAX#0CʼnfjCR* %(b%^m;V%`ȥH$)W6hA-&5݅]JBh G6der"B5JTN15=觰$PAj@ cn9TA RRJ!/b J0j!I,Ђ DN't 10MK! >@Php=wtiT/m WWŕ}q_jA Y {\ U!b⠀/ 0^VQ %2 뢰U f }d.1xL pT@{8+:FjH<<V̀  P9.sH  Lc P%ESBUlbKh K~S \@PP=8lP uA-ġ6@:tiA0@.q35u0()b?PZ֝/tlPE JW h*6I@P6A`L3SGpX(A 9NLц ܐ*A!LIH6BjģSs>phDkf6|Vo."Up+92z$ e( 1 eN, ϥ`c]["[ƈe^lc. H!+|Tdq1ŌBb0dI1%*ӱcJ "8@p8p@xq<X,ÿ-L'g*Mt, ,B6 \E67RHBTUXGdd {J2 yQv@%'>@4hsA5Bk ǚXYue N:5~[@8$?B+5RypTvA^谂4hsF69@N@CЂ >H8h G!Xj)Xlxp82*/j h"؂FhJJZx  (G9B!ȣaڄ>:a (B:Kn1 kBz\I4-]b 1`L ]Z `XL> ,@P#Fb 4IbbX;xczA)-a\pA6$P ROQP`,1- `@vS|@A@m喝\?x~:  S4=̳cC.pBw{.J60; 9Ѐ)< %”6 m +Y}0$-A@.V`!j Ipbu`ЀaA*܀MHH}X$$8]J&̌/Ra^VJȮ8 bƁuF4(<40R=uP52FQ@1'A(:ū44ۀ#f:>3 ? DX2Hq‚'4\`)X4CS@S8/0QqS QKTiM/SЀ;ЇS)0h=9!쓄\8 j+%cl.(+y̐ 61Ha;j.$!9-095yf E / Rb؆mPrA ("~醫A|Y a腼Ԋ¦6H71_081Q@8} rC+dBtQx;D1T  /eK0#(H }`(qqK89HH:pC>["!Ah25=*lX=PZHJ'6P3h%h(=k;o{P`uuЇ#A ;SSh10u0uuВW F3х2؂?PJX'yJ؅su]JXLHGqPh+_:P߃ 䐆uhLxZj4AJ`"2@aqhi nZ1j@򟙊 aj%:9% ,&؆SOYKe9,2 < x7t{}յ- 4J0–ԅˇX7 . C:8j@VL};`< 88nCe@s(p&(:HdX 0PP_(/Z̳ţi<.u;PIA \0 C S41HU=ڹ p㻃p4EI132 H="9u@ %=Ȃj3&3 h *Rȁ I)u)ЋXCR2]D҅4xZ+H[8 ~5,/ c@T@x5!E5``SQ@:`n,yO0qIRyY<"ڗzKul4 fm)00ۢʌ'|LA18!$ɰ؅Q@OKsd؇d]H;@+ @긃xYʫj[\3ɟ@(4 }u*jX P}hWE.H(4` :H1 1ȅ؀ZˁJJx0=h*L~ʅR3Ї?* n뽂J1ۃMȄ@S uKȅ]!#}0[Q(:]= 2&FSZ402IL "Huh9Z:b ^ >(g~jahUu1z7}-xiv[) 1.ٷZ Ci81lq S|k:@p<wp\NOp8N9ټ8\@Q@\=X+W2EpbHj.{>k V>]RJ`I`*6)vx2pt# Yۏ4kB.[UhMv^׏hux)-tPQn`-@GNnI/3X-P:P=8 PSALp OS%hbd"=Ѕʏ3@>S.C?`j2ˁh?Ї$pN=~N]8^88XJQA+)4XXM]@]ȴĢD wKd Q > ,xp1^!-~ Ȣ^J-b-T؋U`X8?Cj#7Xz)_]up PObpqO`OFC @0f R2- ٯz̄vFH@X* ؀w;Pp4{@H u-(B!S- X]}du @"{ :hPYDt(h42_|ɓF*SJ" e~3[q 1 e )958IJ*2Nr#H_>zԥ,J@ #XLdsҦ/@>. †ΏR-Ͱ4imU`Se'10[m& lYKƮVYZX0Ć nNu2Fg”)t7iwȣ6K,@ Q)!3t0b A{JrhѠuNZ : 7G& J | +N$Q:Za@4u }$9pS$mTJ%F(J8؃fPIs8+t^Z`_%zQ4ėG\ИTB)hB.Ah8h"є@4KB$%v݀DAmЂ)NF8%RDR,HA 04JcD Ds%X eJ Ԥb_a947R,ғ LUL}9p}y0+V00B,#bV]`We^XMF0 \pe8W44Xg\<@ _dz1`*l#rDl<p=.ġhd& L: !9C2v wT 4ԡYmS~@-DaZhܘ:$RL@2vh_|3 |n47k(89hÆ0l h_笈UU".%iPe :XB- Ekaf`&$6 } $qPG.H1c&E@;f)E,@Q% 7*1J#R Bמ2HDHu@R5.`%6~ 6tKJ7a5"^#Lb*F,,:K0rΨ]_JaFfa!a(# aW 0ri 1b qWQ:qnt%8:IpX!Dz@6>@f AG8 pE,zHfmP@cmiAIFαncEC5PA I @]xu+SKA>І5NJ!Wdb@:S E-NׂT)ROGvE9EK f04$`+ $q8 haWh{E8`RD#|ʆ;E: IP$ b8*$L V!)$!R D,MBBU%_s@-|+,p%FxU/p \G>b 1n eD5H.5LZ"6Рȅ)G<4cqm6\ல$vHGea`hG8@)hA nxE9;EM٘a:N>|!!Wֵ8k]MD2ۦp)0kYUblb +cPr$l\0 ̉RP6[-j.vC1XɊhTbn5T[$7F, 8SQ@­wsAB]$eCPуIlȘ$K(P%pIX>@EahmʘR(G>L./Nm^!Vd.qMMf8Ž >(7y+]" |$(ZB{7`Q@GY8 l0+*V2_f p J fe &2je" CF 40Ԃ)QJR f%-`%rAL nv+w5bq@FՊR ;m9T "dDm4.8 l$p7H&@0, H],J|CJJ#SU>{yS |pPHRURTGV D"VhEQ@!0^PܕVFhYbdUDhWrNnΨ A`KĻdz[xPvt=|@N0-(5$ XCn<@B889{<@ Ch|KVJ0Rh4$*+,:HT-4$}ebցȀ|,GtSiHCF:|:hH8BAㅢ+H@-9iʗxIh7|쁓0pC,*I88HDh6k+qI+@#*+(A9I.R' A%H$*v6Bl eNAaAnmLbqimY* |;@ ? C{2@ @A]ĕH&`&4~9,>ȏԘB|HO`š0P@޹Y4e2|f]%v]B4&9 j@- O~9b4p@+VT',ɒ -$O 쏞+ "f.l'}D i:@C%x:`tȋ4tA(4]=NP*< .́/DZ< W>A,e,?A5,/hT@-HEUaӖ($dBEh(K~ y GZ9II p@ o(piMRB(>C>@xs` ? ;؜eXvSA A0z2'%梅 L[P$Y'<C B@?M<*X5X  |qGdv(3|3lH$Ap l'6P1'L2@T TB~434VBfD87AF!@#8C# 0S.Ȋ@m7| Be  bIh@ix$4ǎ*B9x+CS fO/iwKŝLa4\h-d-Z/555,-p9/pAYGLK*HTCPf@l1W6_EB2?@@^[Enex, i][iiG6[ۖ$YńoQi>PNiYЖhJ tKpK2s[T@ְ&BX[ܦ22t * X 2I961"S~]ND<..C#C&,A'L((}ɋ ؿ+d+C/-@4 @Bԍ IK4HD~|DpA.$:))lL^Ib]Ly'lO W* $5~ p`-dAA %|/Hӽ0l1`2S$hD.` zZČK5-|>@=,$cu ?mIBcnV}~ehv!OdBaN, m߲[mUlq9q[WO}i1--=\@A1L>BfC12~19~zd 5IGs@>8@8&C8ЁS9-@lPC#tmْBPpEEiV#sn t~Y*H Mh茨[\L6 "QaC61*)BSZ W64ǔmU]6̩Qi 6n-Ҭ\W.^ذnrS ]lH3 :؎ K[s23Vj|:ė%svq cc䋷A҆aWb7  K4ݺ276>#a`Xĕ;~͟Sv0C?0)Ͽ~}﹡ /t"X*b8g ,L&XAfC +# Fl9̐C+Pq 76B"ӥ 61 ˆd`KQ;> o:tQ>hBG]蠒=,Sc4sTDq --fnr-ʈ2@ u9uXi ĉ&R#B6n̑ r~2'܂"頌T!?Ș"q@W:Qu`uJI"nAhl.e($ .(졉 * sYulQ!Cxf9F]m x` ٪ncTv#P/R(-N.c FOa:;.u%jkܛ&|Oy<-mE OjcU$$1)HmX9`Q0i|#T`ė!SehTPa +Jq8$*"r S6d"ZР[(EuB/M> &rl}%(#ǾR GBlto:u]zLa@@g$FPWYMhC%^YUߡ? VTr" (D1j8l"bT :A0 j( 5MPKX(p z0v*  |2 ?Eˁ^f9K#*1Emڴ5D ||mh3QH=4J J,q1Tm HxB؉,0h] ZC *@h>dMC BЀ?19 hFit=[(+fҗe"4iL6!!kD` QJ8u#-Yb2Tʉ N9YJaƅ@ryK#tI P B$ l b$qc [![_s.P!251h 1 @|a_s o C`:Hlv--̟D?@"Ԓܐu$J-jтZfzi)1tPr+O[T4T R:6Q/Om {@s^QJޑ?NzEKqZKNk4\0\hv4.6*Ki>|ab 66Qub"4B><, MR]lMk/[(nVMG"hd~,.<+ռΧj6aÿІGbA&+|z@B )D!Dcaׅζ]7TBęԺ"Q<G(~.B ! хu%8@{Dr *PXP?#l2vli)@"ύdePǠ"H)GzAfBڮDLrH"DkBD`.M` < jJ$ n!Ӯ yPp"cT"Tv2 T! !A z:@0&P@e -DdFAB 0Jlv,FL$ozo~PcB$ J\d:MK8E/b TA Q`TAqe7:$f0"<#A @U 1 j!̰6f NDj@C:R &En AĦX@.۴mo!H 3Gj/: G rR `Z% ހF$+怑"pRi I&AJh`~&/2 &i~.iqn&ۤ K8- yL )  8 @*ZS.&;b*H1!938E8&.ڏ6pt60΂ d@n0h 춠#nrH O$F2D*Fj !:2,d,s,bD7&393[PG*+z={怇S k2R=#({zd 3ch@R@lD'2R:zG..1Ơ6 &?9%$IHRs3I;3$* O/S'kTGq/:@802!wSI\!%^ .ؠDB s<:xn$A $%% A) C4B1 0R/KH (/2T3=H2h `e85R1-T6KfT{d C3UR)>{Q`l KTZXm(  Us15tIC5TI5IA2x\=o-?^f"t-d'$ct`nF 01lL Q2Z@iİPcͰs $(Kqe{eJTaeQCfde]6e{GwCW7&uN@cVJTyhJ/&)'gr.8@[BuYif+evgwf[6=y &MI:3SoASZ me?f#u,A%gn7RfCIU]U7qq3jwnLPo9-5MatB13>C%>gXL \EXd7l6Pn6D@TYx gXWyy/yp7z}2u8 V{i9 JS&3G2*}#S;n6yWyzWyyy7~ VW125n!GRk]5l[QYveezdOVVg+Q7@ (8XKm}/WmOi]I{CT4fwX1t{{dVigGe#؂A T%R}${e9=5n (y4MCbb5D┯+d#ɞbAlݤ?KLM@} ^聧JJ[lh7$ ;xmahjongg-3.7/share/tiles/small.gif0000664000076400007640000002624406573313706014343 00000000000000GIF89a(2{{{֭֔JJ! NETSCAPE2.0!season-1! ,$.PI8CMHRrWMH!تL[D~[r:"" tPtRR&gJɌ$( ]@v&B2cX 2^]c|X"&o'7_B/s| q? N##? s/mO/.YѹEB/(WϾE ևV21!H/--Y@h߬TG_ Y1T7Uʑ<>F8`+@ !0$ʃOLҢRdiC#[g [?(ѳ& fH%6jz(!season-2!,$.pI8;W b_$`5ΩĚo{~<݋Rv$Nd3Uh!R/zX61#s_?<]6 ba~mkoyj,eOHHaFt,HOkQ~qcshj& "y'?QyH#ؤUU λNIh4@ρ? "A޼z 6vM8v 8N18;Xy@4o&(Μ t (L= 婔&R BBmjG蕞]~ʵׯ`Z!season-3!,$.pI8]A`@*U)U*<TJSnb$( ! V$t$At&~Cx|4! TgKD"p}chbc+R!+y; " [ G{+_QGQ,^ !z #Flyƌ̓y[{ɕ4r M#--U[/H$4F%zL((fvHP"b>JQAf:  A\Q"PVC)ơQBմ;B I-. -з]S&4xB08"|ı 4 ,SvL'@w œJs0Q i"u QSG*]z4!flower-1!,$. dih*Hb-JSC#07jl"d l ,57vkĹ)~ݺ#*޹"*8`/>nDXq[# ڤ^CZCOaǦpp@ 3ZdHS`b[+XP*E{G)!JnXS c隧5(ajYSY$R@"V*@_ZWڴD§;aTr8$CG(a2gTMZȁ:a60>[qik.q+B!flower-2!,$. dih)+ !{ w4Qf 1OC\jB$FkI;$q=16:wKnu]J>"IWx' _ 3#jb:_{aE[9xSFQxE"{ܳF9;:x é˰ј1صʴS.ٽ̴;E[=~.;Т]VQƊӟV0[% ?NC qK)"gq)v`X~83 ʡnR쥈K*MӔ/:iW`Þ!flower-3!,$. !dih("L2)`X+9t 0* E]'1&zDX&\$_o.GHnWj 63i+< jO(;O@&45$"CO#%+jj$6Ҵj,Źٕޠۯ믹3#Ӝ럜9J6o>y`s;7ƃHDpXK+!.FRF^[Ȥ  `8)qq 0e'1&pxe@(F@h,.V*iQ@mAR2Ho˪ׯ*B!dragon-1!,$.` dihlp,tmӂpG= rB_f C>R@"-88땄Se wlXy.`MBjk(@:p*#ReApJq"=\5GP`o5u8\sir38]{:AF-waH%1m',)#!!dragon-2!,$.` dihlp,f$tx;ߏ'L{E0Z2 H-A]QKJQl<ذlw[{3ZpmSx1\^VoBcSOuOtOdnp"LIEB3!!dragon-3!,$.1` dihlp,tmx|pH,Ȥrl:ШtJZ(!wind-1!,$. dihlp, #-ߩ`mTER)3J @&j5-i+%CY<'jvoh~v{+`n[Zz+XWiT1UVSlrnaYwa2f}b$hm_*%!!wind-2!,$. dihlp,B=˜Ώ _PXc剨Rǫ*"h4/L6E& N[e:o,o@vk\-k_$K(%|qw[i%gs(|'g/$WrF3vpjz0!!wind-3!,$. dihlp, 4- [,p% MhU3ST5. +t:,"}p4R:ncG^t2yi@dkeSzX`O|7|u~0[l,%hw+#p]er-!!wind-4!,$. dihlp %->U/(Rp(,aJE&wHR:eʒVA X<06,YsOs"f=uM*u|=  }d)udn6"euH'99&9ìO%c͸fH6$%tdp$ߠ׺$g#рӀįz #A?\^y儬tl%b`A:lDjV)=0I^J,珋5q$dS1eY.[fJ",aիXjUD!dot-2!,$. dihlp,A=}=4tq4 ɒVEA +5| ,z,> o=6.'hu\Qi_a/y{jxq|Vrw3glj_Wokid1RsIn$M>%MD-t$anFa>9O3TwJnW7WwFn{24n=3w4@1Y0ݵ=q/9QMY1Y&P/\Hŋ7B!dot-3!,$. dihlp +wz;;*fi0IZaRحJ[fXvVwESzY[BK3Ma"mq h jTZ qeo YikjjmiTmW{[@eqMNct|hn4hVVPN2Y/!!dot-4!,$. dihlo2nwY#И2 `*8؜$/wj dZz3ܜs n]Bz}w-3wzhCzbHvcqsi-bRltcitl.[\`0NAYT^J*d&j6"-hk^,sPfhuoL*4y{-ڂ.Xw]q,ƾʚ蘭›.#p HA!!dot-5!,$. dihlp,4-ց> <ՊALVIAhS>w-p̹Xt7{ujzL_{{,k=lo^t.e`pdufhS\iUMNi/QLYRA]  INoHuyLEEH7N1ΜZ+gݛvqޓprs~w}*섀|j2Y%3װhj[TI"JHŋ3!dot-6!,$. dihlp,AlMx9/eLEqK(I:6 [ f|׫{6V%<8to}}w{sh\[r4iw\m,Zv_a]e.TT"1I5KSF@/v]_%d0j"#-  q.^p-p|ټ,λ,ĉ𹱸c ݻ6` /ԡ;Yp`HM9n67nE:f ,I}D-4̴Jϟ@ =!dot-7!,$. dih!Τ+6=Al+N1_ ~ȧx8G :ȃnj(7 ozYirlJRMWQ]TB([XcVZbGJvl?nqqfd@ygeZRP^$"I"h8uN~/z#þ;ŝ-V  ,1Mގ刈+VT65yX0ʱf9lhb L\0k/d<Ǯ"tZwe}d;H@BL"d Gxӧ(B!dot-8!,$. dihlp,AenZ#@)MA 8xi:lvSk5 ގoMoVE j{}v]O&eRgW~aQ.YTV;K7Z@JJ0>5"-[/ebdap+lnp.~hr´qhˇ/\Ө,֩:?2I8)¿ut*s|- 5KLC$!t%ܸ#ۮu11P.L1" w@FwO.`&g?eB>x#u /A̶3\qfJѣB!dot-9!,$. dihl+qc{vuspmo~ly|jgyp46!!bamboo-3!,$. dih*mll4||poh:zFQ-9MMJ)p `t%^sF%4TvR=2od:-{kx,n'r-62+.%tgM1z13$!!bamboo-4!,$. dihl뺂7Z\X< *2yN-eW]離ZIf%kHK'~quy#ut5/Km{{.vQx@US@6pú!!bamboo-5!,$. dih r7J:m3_FbuHMKAy=M TE0 vdYFע>*c&znLi'{'mICx%$z|st"0+)v#wg#%byPñ)}k~˷AfRЛָ0lau0⽊̩(!!bamboo-6!,$. dih AnZ{>\mG sBl600 jtYSe ]'8)E]Ǐ[Yq\8]|i-s*%u~Mz4}"Py,Is~ZGuGo)׻!!bamboo-7!,$. dihl$,Aӣ=9H" H*m(dm:#|vW/*,>-K 8rO;~ҽI6|^(l(9U)(u;{t&[~x|'&w#%vzj<[*"$ŸҺ&}"#ӡѧ$֔ĕrٰI!!bamboo-8!,$. dihl뢂qxtU/(M9ql:В 1v˽Ʀp Fz=H$pD"χs"{q>opNvOwG"~KD$>y#oMvGNlg!! character-2!,$. dihlp,B=}pg03C`0js SuzWŬJ.k]:|N |1xzA{}"{>yz_m["\V$>#y^[_v!! character-3!,$. dihlp*܂,AԤH{)gp:2z"NOhĖeNH~u  11^"Xvzf"gb$X#ifv$!! character-4!,$. dihlp, @}^*ƕh:MSXhb۫ȣg8SxY>s[czZZ@vG"  11GD"$D#Ôڍ!! character-5!,$. dihlp, 4-ւ殀d0I6 xR  >&9 V,09XY\jBwxҹj2wUU-FChU2&`^  11"^"“$^#͚˖ȷ!! character-6!,$. dihlp, ֹ=YndK}+,VgjO*F9IN㳘V2  11b"Pj"ze$P#~j7!! character-7!,$. dihlp, 4-گ.+@=b)XFG2{Jϫ[|JyVY{Ps6s  11f"Wo"sk$W#|oƒ.!! character-8!,$. dihlp, n;WǪ^j*S#2I╕ݦdHcl,ZSn+s-잖m[  11c"^}"i$^#}ÄƇ7!! character-9!,$. dihlp,B=ƚ @@$j:p)L%]L\ErmR^d㒷Np4'ouz5Kh/yvQi+  11i"c"$c#ÒȊˎΏ؎!!base!,(2` @ihc[*p,t m|/㢝o fhJgZD<Nmw=;=gx7~Uu|yvrokgd`\WRXStmHMUZ+,:FA$Շ9*!!selected!,(2 @ihc[Np,t |/㢝o fhJgZD<Nmw=;=gx7~Uu|yvrokgd`\WRXStmHMUZ+,:FA$Շ9*!!obscured!,(2 @ihc[p,t |/㢝o fL"И]N+V8liJU2<,jgda^[XUQYsz7Vz\wD_t>b}lmBHM{+,:?$}99:+!;xmahjongg-3.7/share/tiles/gnome2.gif0000664000076400007640000005106506603706762014423 00000000000000GIF89aHcikc½BE{8uZ!]k!(JJu )1is׭ʭ85RB(RΖֵb׵ޢNJ{QR=B{58!,H &Pih㸾ڒq Ϙ/(#2\N^+Q֫ԥҺ((X%kW4y|>~v"xr{y|}toqôLjɸ̱Ӽݾo npt_Rs8"ZL`P('b9)![z2LT͙=c*+i3%ȡ0ZLe =s!Hk֋ Yr㕘VcMDxW[o.XuQb)l@|EٴM+y4'(,2g`X0hx2?Oz|躪W_ݙ5e`2f\;9UQ࿁wp/J/Q_`~2cg>fu5\o&A(盀fdYohX͹Zr.hh$^ctY\EXyW&G}th\>Q,XXI>"<)p|JgKSFr`ZZɥxO^:¡XG2զלlIet[YX&h9ڡYB:`) IjՅLyzS_~򞇽 `E&R桗yY囵nY8GFkv jv<,YʚhVM[aɶdt``^gꇳnW:jVXpvj8[|)zuʁϭrf1%Cխz.pf[+ݾk" o_7Yt1,A0!AT/ jt

)ˤCljX5V 5#(qkkZdݡΖv5C1Ѹ-?A_ww`ĺqxnkH46 " WVDeDU0Ⱥ-,"2B_{oSG_rU0{_Z؜6SAu+r؂ƄP*%w!nFS }< z$j{ ժn;IR\}ȹlrnO_=H˼5xqkh h@ ZD826tUhU33uN9~-5D2y$&}8+-UfT3~]YV,lBh לS^]m'Δq%O"m[jwN }jTpԱvy鯕\&0¦s_qf5B%LĄi4;r"Eɖr2uyWy&Q;6 Ym>㺰oRunYa8F-g6HnеY-ԣ9]-jh+!rz{;ѡhKbrX ڹOPX-7fyW"SW<שLd҂rۓߟlw3gޥi ߣDZ1ڳ~Y{yχ^X)J'.M⩧P~ggO~Pb\jx%wpW~Gl7PNT˵}&:ReEx]I$wdx(ȂauGb|{p{;hEGC%G!wG[zXn@T=6wdbb#yϖͳq@4'Bugx(yq`+Cd𧋑M'wx-x6"G EM"sS>L-hWWtWogQuY9.$Z0yr JbMHh^؍ڸ2wH1qLy5HzwIP7'9(nnc!{t2Bvow2YGRTlE%lEld#r(fs1\鑬ԆueX1'mn9ƖŖVom66%ų=)v8 I,&65hEnek}jQv eTYV9vFsk`i~ɍ%(z∂YxSVc){:{giKcvStadz.i)5d:N'uHXye8uyYW)QᜫYkvTک@N@ YII#שٞ[fU)p6:cf5>ƚ&dm^GhJ2h{7uIb!3ulO1g\ɈZ@&jx*.&+2z4Z,g(1+xٟ)oY9wWU-`_OʠG)v(łpX֜F \Au"WR9?p@NK֦Hz_q(ryFDN٧oȧl:u"ȂdzA*r9V)YhɤrdMd |7Fb&m$rc>cz[ih>baGs@*ztp)ᘚ㨙IqI[DZFzVNVDinf䗙dd:@I4vgqa4bt 2aXYIB؝oeͺ}!Кƺ4[. [q 9ب옠(Rdڒ:#"4YiؖM*[ox"q WFAG֙V1L ; ȘjAfZn{ZNJ]쩬nk"sh󸷁G7|^AM?dx!2LD>kTF]SpveqNzi$-a;Ne?9ki {M᩺ okUZj(@&pK1w{y+|'++.B0c9CtPsDnjrc9td۹AA+b]V{{ZAh pʂ[kبgBJ|_T7Rj:~ ;-KkWVPΆ;EgkM̹4ž$-#k]Կ;E|DL{Mi{= Zρ kʮ"Cloұm sBGe^I 7 jk8L)!^+,0(u.W V^IHZܞr_ƌʗJ7gH:nvX%|i{tѹbu</<̨\j@xD]4'm[šhh̭,(ƶ(I RG7KENiaˢWn |\FBԕQln{٬uۼ]<ɽ'lf|s\xM18_Sa_Y.~:UI! {<̚6 B̹G9 N&omtNUm}s+zutCwү.-ӘT!*݇])ck@]v=ԏtݞ|ӲH%[|[ʀd}+׼(nxCi77iMͮϤ6pj]3,#Hk}mћ$҉%@v t]}IZFA Z3W 'ںku}c!B ܍MPdعLw{GY}޽bYۭ .ޤ9Mޅi=q  ^~.%'N(,).2^ 0,9@=? ACN~pENJ. M On Q> S> U W Y G^ [~ _N a c e g i^ JNnprm>v~D^xq|>x^n爞rnSQ~阮蚾>n@~oN㩮t.>~끞w~.NNǮˮ.~nՎN`a~\pn~.~NO?_  S@oY/!#o%_'~ //13o8pB?<5)?>/GCOEOQ@3SUoIOYK_`K B_ poo׃@!@Au}s/{o / -ĘKN0@F?? ` O@z \=t2{ =W`w_^ a7HQAϿr:,=ҟ ?3< @=8'E&è3BO>2\) (8<ŐHnBib\( r)>sW2ojHƮ9.ԡ8R CEE⠎#%ce^Jh%㢔'%a),(bo- W 1oQr孜+ kml-pwg,(ȹn:{{6헵]-8'vMVܢK?,b$R{©DedyyK΅xUO?ڀ}@B`2>Q:)9+SNa@h1.PYR/!LKY,9ɔda+a rc8 ,q٦]&i# S嚌{mfw@7c&[ɫTR֞~?চX`53c13R:AV]6uZsEIbthѡ}^u9c4xKP}aMz}&|ADU3gʏp^(Yxns4XV&mi)PہBWY!5@anA7@'H牒' G0$Y&xT)^S9Ǝ#9&Y=yH0 m yTצU*{!GV -Ĭ *kEEC ٨2j,~}AyaD="'B=PBDDߟ;H? -{pқXz.X`B=Y2!ip <.Ž[n^Ѱ|8,%hi0\h?>L&zᫀ #Sh/Ub%djGFۈ,_^'Q2!$8xijaBnfH ZD>~1Qx Ls?*.j(1 jD GX9XZԸ-uLƼ`:orf Gce+JHNxI PT!ٺE.`*EQ\T6Ynuv+ۙCEcS6gD, k؁ʘFvg]p 1rtģYaJ4zD&EjjfolN>~{ʧ"9>9m<ҢyIH6smƄ)֙p F~fItt$hyՃ2 F+Z¬^}1-zǰfLaIpyoED\nB\4gs>+J*'[ %ˡF8AaZ*l\ e.^գZg#U5vXM L:e]BZT;t?.n-0Wѫ{D?-mDHYRt[D/p1;+Bu.h+Ԋ׻E-zKD8{&\u])|K.Rr^ּ)-ɛ̓ۦflrWn=,7RmP: ,9+P@k{}.04 Mb`@\ nPX ql寖X|1@t09-ί]7M5%Ie*EA/|!EY?{Ea(yd_e*/zΉhPj2,ޏjsG Re^ЖժSTӲsgJ3NS.䣽k9W\?x(|UX@|Y$ miSÆ&mU9e;܇O ,h Z;n>ލ|{e|LF kvDikڞ%psJNreVYdzvPu3ʟx}ܼ/6ιSl[ǭ  坓CN8omqR/EňtM5un_uV9vD]r{Pv~0#f5 U[zsL4bmWZ+voIOWX=h{[q_K@6q7,{,^ѻ-d/h6ZLI_3IeA ^\}\- 0d u\i)`͟Y A b B^}]5{ 8A^%IM= ˵JB9`m!QdI ,Ǖ!_Ŝ_`џٟn9 "|yC׊ ]! xn Oݝ$U?U vtPuF]`i 6_ҹ^ٟ-@b0 $#P`}}ߝYap#֘$Nu !.2~!P8J ; 8b 8a>ޡ= b / !]ݐTMH];!#`/&_y"=f,>`U9r%-;Mah^JbF cL# L@nc2*#NFa%] #G͓DִQ:p"R=TDP_ZLR(eҁ3X$aN%];]Ie2fIDb%A~L%ufZ^gue-% Z_)w &EJPmHn.ACNCrnWvK_R:VJVJ `8(JEm$zvK%vZgviM%bf%'oCK9ݦ3p}H`c :8g<GZ޺<'by'|%) 8diFtZb)MNh]ny?cg i.er]ι%z|"RHt9adUߐ"*]2wqIVqbYjpfr)izʟtv)eaN. %$yi%fY ƸORѠi(_rOjT"Y](_6 (m%(}4LӔ n=Rhvv&vc3Z ^kHN'$%i@Xop)%( ^'f\iG ))␏6.Q„qW~^f)^'&멢* OjΒ)ikqh5]-ҙFp2)MDnV'~Br*"V`q\ئ#Ώ⊷TkvB̊j̲eNN-lybf&Q$:^C&RžT*}B酕LPkFŁb">Ҳr*^*Qr>ʭM--O,k8^glpLT.Vy &66bƭ~;#邒Ԇ+2a ڭg.̢/ʮ/J.P%,ȵ,"iX֞Gz-9^<ۥjj:0lf{jޮr'&v.yOr0Snm cp rzp r>ԑf*%eB ?hnp3qg0/ FްOIqӯ0Q4] `@1 1!ѱ ȱ\ qC22 +#k#Kr$G$[r%%k'2(#2)r)rA*(w+2*r*2--r(.2/r20.ò1{0's232?31K3(/1[0c30ks/7357(8@3;7c9:2;8s4K<35s9>)s:=4=sA4B't?s< 3s>C;3?St@'4FgtF3AkGc4GHotGIC@HJt=HKtKǴG4ML4HN#MtB4PPuAQR'RuSSuTT4GS_uRVoQW5M_5VCuW{RYYZ5KKZuZW]V^5SuVJ_ JU#b/6c7c?c#6dO6e?dW6fSeg6g7fw6h6hsh6fikXvg6k[jiǶlvb׶ms4n:don 7nwml#k_m7sC6GCwtG:Swu3tgucvs7l7x/xwx_y+vyzw{s{gw|W|Gw};}7zw~~wu7|{7˷ywxw8+k#xCKxS[xcxw;{xwSw+6㸎xwvi98}yyc 67+b;6 ccx@, 9cq#pycyyCwrO9S/y;o36:CG:$:hWwxck:dzcsc:S#'byz/9`G9gvz_+sǺbOzj#{7z946[;O;kW;gztg;kO;wz;fg;{Sv{zz?;Ow9|c:@yzf_gvc9Ko|ӿv?S;;oҟ#<'>vϸ>_?v[}{{esv绹gܿ~Џ>/<㶮ùWG|_l{Sv;y}?6Dc+yc'={; "aZҮҥډ';~6 hΐCtF<’(fVVYڞ Q#_׮ie7)JWu 7Gh7p@Ix8iFƈ"y1t#2H*'5ef[U4 4hƔlz%|7{7𳈍7i Y;¶ک>n$j0'H~C+(V"<$nh;Xݲ2:l FZ %"~P,Δ4 ^=pdlDq2|'ᲊ*E{vW$pV@ TUt$b=nk96W߾ 2)eҎ'&;A1lۛp+c#Ʊk1yX玂w@? ޚ=mᰫE=gwvZc"DN5V~Z~t{ ¥N#_~QP,ܱm#{o(3s+gKbq3޺MPC4HɊTLʕW|(@kB\$= e*UYB4~_("#VUgKhXE~RsLzrӞ\r* 0˼9P."n,1[6~[EM%*Q9U/YUlU]NL(eix:RUYHiG# mT8&2򝞱(Xqtq?UnzsRj xGi)ͬ::BPVB$۳Ֆm6 l,[݌oDbHϭrug[rC}gx>vܤ иzEjf р}KwL\Ζst[Uؾ66z=JvFʖF9GڋUez״ #{vD &0 8oW]l;MfX+R)wgwb R;z$p)MX[|avp3KhaW&-h{^eqE!=63sc9z1!ȃ,qHXݜt?SԔϩXSQK=K8 *G,J՚',]F jv{b?E1gxR*\KoC§:5lH&8v>"QxRjH' GcaV06Rj`Dua k#$8[/J#Y:5H67,.0S.(3k<22)]9urb0Ʋyu\.l~Wu`{5X_]5eZi$ S=qS:dޔ=A)Mp.| =o^nĝt PL'ܙt|^Ϋ뎬;e3X4X5!رC'ڽf ??zsu^eFmmR=G]5tNk۝Z)uԷ>NĀ2.53̞P!,!o@~s' +l@rkOWЀ(M8˧ Gt9kx}C[QH&Sj'DN0grdOn &]D3u3F'x7dB^Ɨ0AOOO(6"ShVW(QPHT]'7ok:&p#LS#X - h/Cztķ3~E7PFPwH%#.ww1wz@bB `p +y ݄\h6f?{'`-|v4X}"Ȇ!('&H T6 Sݧ W:#!s+u0ttrTG,ez A4i"@Wiv"hKY |)( (ȏFgopF}f,9EvH}gyrdN38wd8poJAv$/E.cᆎP7Z'Ƅ6 HZ@ъl7D)[C? A<8ЁqtՇrr6U7SVG儑zG:!ZfGvgIwrdZT( P@萒IS3#)!Dx=h_6PG E)铏Ivɋy9y}'w*&mppΨ]y%y]d+:aG@EbO+zVOJ`CxhzՁzQqhCfT@QKJ}žȞ*ž")DDhz=d3t" 9mXs B؛>CZ zT[ ^!9OuVY]uIEVU1ZsBє|֮i J+z Tpf5MRz;KجVYHҪ PjhװؚBGY:xHLCjHUk hb*NșҲ5K7+hBpԉA9ʆ-Ȩ۱5JCF1qZw#{@1sYYړ9دikqIjn5|F|G{$hp+y;Sf7Nga/BXs~FGָr˺FԺu+s#TfuB:Ht 0W+df OUϚb*S+x+ht6`l[ Kg{+k뵮A+z@\!$*ȅפcWtHcuu[+ƭel+h۽l,# *0Gv|d\oÖd*Bқ;ls$l8վ{|&ܛElµ3ă2R !|껮Kl+X|GܵoYc,ŃAL^<{J],db\qLǡwH<!N onj,#ȁ_<~<ɈllȚɜɘ,Ȓ<ʞʎ ¢~ȭʯ ˱l,˵l˭L˷˱˻ˁ˿,̺Llnj̲ ̮ ̬L͵<לԼ<\|ο|ͼ <ϸ,,< L m]   =l')@/ &1M1=5)}9/=? 5-Cm%mGI E*OQ-2U=WV[^ Z Tdf]-^k]j 'qb}pM>y=y{M}׀ׂ؄=ֈ֊hԆ]،}׎Ԑؔmm֜L٠ُڤ= \ڨ}.ٞҮMаMۢڶ۸=ۺ]ۦ}۾ EB-ýZ-Mc܃ܞ:ܢ?8mӍݪ}Mk m½ít)3 }N}{t ) p Da]0aM%Q@ ]&ශ%B$e&N ⏑cH\D# .|y:p\jk}9Wa,}ᕓqJ|ₒq%3rj,WsnTLqɃu=w:Usy3b(aeӆF mʥǍ~=;;-^޶|0&nMo.@H>h~e&鉒`(%.ž(YV|Xf |5旾;c~4N>i !ź=@Do}U PX)@{T![jrFs^< eV*~s\3g\E?M^F?hQM= 1(QKouLg~O. " 2Z4mLP CWa/"1(SNJ޸YOK,P^G~ I⟕5nI ݥFdߨ/N.Zo/.J_1y{sX 63R^xj?TIKpB_[?3g.[K5-!ߠDUglrߟѯ ya,ݾ8B ŝ$,,yM`2aőiFRi4bx7F,G]c4wCWF-륭]1u*28Dδ.,zi^VJ>Xv΢ & 7B-O=[begmyE8WKJ#5tʹա#LB2BʏgթL"H5|D/ )5̷%:rLb 9<'` vf8[̖5U ( fantgg2ƌ Ě5h! sduiWIu;^@]OI91 ]}#[n'"}Go K:mJ(^*+R` }:%>6n*kU;S];aYŁ'@m֭Gn _ ehtcGԢ?S2ߨU+f (Dr~$PD`Q>'YP &( 4MI8i qEhR`poz'] !\,*iW<΁]b# iGNzqB5)qIt$ ("AH29 f@PDi yIjWU`j) IYWPH ;BVs{"ҧ|^h.Hpܒt@ gY@Y](t]F&Qb>u*e^z\јiimNwDߠSR')fd0R.bʉZd-n_eff\KZ )tyb%`q0dv,Ӯyq)ZǤ}\Djhm>uE CL "x0 a/vh)9e)]-d_j3™(y+z#?0|bZ٪Y|i.n+/SK%#7kde4j/+/P3Fj˦] 4NOTcvc! '9ot) c{1irj;,ž]cۺQl"ܮL$+ @@aE_;ǿL_b{]zy@T&y[sv|,֦OE{Rv? N&(CW'?x4 ]<aۓTԵnyT2 530f08ۀgv)8; & ^P+=20e,XZwL$Q`\'MH_\ad3VvhG!VL^ܣ&#v d1"8A$@zK" EJG|$B!>yhWMxX)'#ȍ$,5X:^);ZjӶQ PX׺VXQC{ec>׭`*M(scvekk kڔ֬ZmpkܲyD=: `%q$ d`J׻fLf ,7˾t;Pz˽+h[RUqi]Sb 1+1ZۛDET7d09_Rس22F#J;.՚\v4dC讖+-%/sS[O+ oB!< 6'>z4o#BWiAt䥉:u*q!JJyV2<fҕRRKh*lz.Jjmk+ֺVk[K)" cpZ,n+(Ud~ǬQFarc fmhl/l^d86o~?J 'ps +9;syk<';8 Rƶ/Df)`i[- 16K曭0%jXqΛ^7GAH'Q$-/C걏 W7ak.ӿFC m.xo֓$A蹭Aށ4y;J=g@}6^HVbM(yO(e/[j;YlE,pG z]*}EB@dAtj\\&_ݦV-<;_%S>l~p9L?S{w_`燽 ^! qa*dx^ŋ5}S]my)ߵ%^R`Iy!!]Dž i6cII]/ )}%ސ[k`ޒd8 C}>|Z`N`BJ Qm/ IqABdFK_^˽v1y]T=V _n^BeM1b\eU"տ h&raq&^ >]zVJ_"q$~H5:!ZZ]JZ}#8 %L֤ZIhc=r S .(%b ہAe6>c\ɍY?n%"TB]"$>GkF[&lN]e:mf(e)<`$Bb H3Vٕ1 fBvVMb%qe d AP &H4F"$Z{hc'\K']g#;b~cBMtr"B>:V-Զ9uV^hWb&ދJXRdRٻ|'QZ~ehO%pq!DNՋ`rDBh06[U2N0'l=3N]{FiHgGlbhʦ*z)Z"uVZyJ#& ڥbhviҦi6B't2- !!BS)ij(ZB656`B)甾(蝒**Z{Q** ۬;+bj *+*jgִRkVPZkj`zlu뷊+긎k붢kf뺲kNkk=kν+JR+֫++¦š+Þk ^7DľPkjrlǂ,,b,ĎlȢlʒʦɖɖllZlͲl,ά,ֲ,*2m:`,>RFmbm^mrmnmׂm |mvؒm֚jmҪJmRm­2mڭղm޾ҭ.-m:&Fn..brn^nBbn.V..BN.­.n-.;xmahjongg-3.7/xmahjongg.60000644000076400007640000002301310213403202012331 00000000000000.\" -*- mode: nroff -*- .ds V 3.7 .ds E " \-\- .if t .ds E \(em .de OP .BR "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de OA .IR "\fB\\$1\& \|\fI\\$2" "\\$3" "\\$4" "\\$5" "\\$6" .. .de QO .RB ` "\\$1" "'\\$2" .. .de Sp .if n .sp .if t .sp 0.4 .. .de Es .Sp .RS 5 .nf .. .de Ee .fi .RE .PP .. .TH XMAHJONGG 6 "5 Jan 2000" "Version \*V" .SH NAME xmahjongg \- colorful solitaire Mah Jongg game ' .SH SYNOPSIS .B xmahjongg \%[\fB--display\fP \fIdisplay\fP] \%[options] ' .SH DESCRIPTION Real Mah Jongg is a social game that originated in China thousands of years ago. Four players, named after the four winds, take tiles from a wall in turn. The best tiles are made of ivory and wood; they click pleasantly when you knock them together. Computer Solitaire Mah Jongg .RB ( xmahjongg being one of the sillier examples) is nothing like that but it's fun, or it must be, since there are like 300 shareware versions available for Windows. This is for X11 and it's free. ' .SH HOW TO PLAY The object is to remove all Mah Jongg tiles from the playing field by taking one matching pair at a time. Generally, two tiles match if they have identical pictures on top. There are some exceptions: any season tile (spring, summer, autumn, or winter) matches any other season, and any flower tile (bamboo, orchid, plum, or chrysathemum) matches any other flower. There are 144 tiles in all\*Eone of each season and flower, and four copies of each of the following: 1 to 9 dots; 1 to 9 bamboo sticks; characters for 1 to 9; the four winds (north, south, east, and west); and three dragons (red, green, and white). .PP Only .I free tiles can be removed. A tile is free if its entire top face is unobstructed and either its left or its right edge is open. (When looking at the left and right edges, only tiles on the same level count.) .PP The rules are simple, but winning, it turns out, can be pretty hard. It's easy to make a move that causes a stalemate thirty or more moves later. What's worse, the .B \-\-any\-boards option lets .B xmahjongg create boards that cannot be solved at all! ' .SH CONTROLS AND APPEARANCE To select a free tile, simply click it with the left mouse button and it will light up. Click it again to deselect it. If you try to select a non-free tile, .B xmahjongg will beep at you. To remove a matched pair, just select one of the pair and click on the other one. The number in the upper left corner tells you how many tiles you have left. This is all you really need to know to play the game. .PP .B Xmahjongg comes with several features that may dismay purists, but make the game more pleasant to play. First is the .IR "match count" , an array of small gold coins in the upper middle. Each coin represents one potential match on the board. (If three mutually matching tiles are free, it counts as three matches, and if four are free, that's six matches.) This will let you know when the game is over (no gold coins means no matches\*Ea dead end) and when you're getting close. .PP The five buttons along the top right have the following functions: .TP 5 .BR New " (keystroke: " n ")" Start a new game. ' .TP .BR Quit " (keystroke: " q ")" Quit .BR xmahjongg . ' .TP .BR Undo " (keystroke: " u ")" Undoes your last move. You can undo multiple moves by clicking multiple times. If you change your mind about undoing a move, hold down Shift while you click the Undo button (or press .BR r ) to redo it. ' .TP .BR Hint " (keystroke: " h ")" Gives you a hint by flashing a set of free matching tiles. You can cycle through all existing matches by clicking multiple times. If you select a tile and then click Hint, .B xmahjongg will flash any free tiles that match that tile, or beep if there aren't any. ' .TP .BR Clean " (keystroke: " c ")" Cleans the board by automatically removing obvious matches. A match is obvious if it involves all the remaining tiles of a given type. (For example, if there are 2 green dragons left and they are both free, they form an obvious match; but if there are 4 left and only 3 are free, they don't.) Cleaning the board is guaranteed not to cause a stalemate later. ' .TP .BR Solve " (no button; keystroke: " s ")" If you get stuck, press the .B s key. After the board is restored to its original state, .B xmahjongg will show you one way to solve it by removing tiles two at a time. Press .B s again to speed up the solution, or press .B Esc to stop. This won't work if you gave the \-\-any\-boards option (see below). ' .PP Additionally, the .B Escape key deselects any selected tile. ' .SH KEYBOARD TRAVERSAL You can use the arrow keys and the spacebar to play .B xmahjongg without using the mouse. These keys control the .IR cursor , which is shown as a flashing tile. The arrow keys move the cursor around on the board in the obvious directions. The spacebar is like clicking the mouse button on the cursor tile: it either selects the tile or removes a matching pair. .PP The hint key, `h', is also useful for playing without the mouse. Experiment with `h', the spacebar, and the Return key to see how this works. When a hint is active, the spacebar is like clicking on one of the flashing hint tiles, while the Return key is like clicking on two of them (so it removes the tiles in one stroke). This method gives the fastest playing speed. ' .SH OPTIONS ' If you get bored with .BR xmahjongg 's original layout and appearance, never fear: it comes with several tilesets (tile images) and layouts (tile arrangements). In addition to these, .B xmahjongg can read layout files from the original xmahjongg, KDE Mahjongg, and Kyodai Mahjongg, and tilesets in KDE Mahjongg, Gnome Mahjongg, and Kyodai Mahjongg format. (However, tilesets must be converted to GIF format before .B xmahjongg can read them.) See the .OP \-l and .OP \-t options. ' .PP Long option names can be abbreviated to their unique prefixes. .PD 0 .TP 5 .OA \-\-number N .TP 5 .OA \-n N ' Start with board number \fIN\fP. ' .TP 5 .OA \-l layout .TP 5 .OA \-\-layout layout ' Use the specified game layout. .B xmahjongg comes with several layouts. The normal layout is called .BR default ; to see the other ones' names, run .RB ` "xmahjongg \-\-list" '. You can also use an arbitrary layout by giving its filename. .B Xmahjongg can read layouts in its own simple format, in KDE kmahjongg format, or in Kyodai Mahjongg format. (Kyodai Mahjongg is one of the more popular Windows Mah Jongg solitaire games. It's got 3D tiles and all sorts of stuff. See http://www.kyodai.com for more information. You can download a zip archive with more than 100 different layouts, mostly usable with .BR xmahjongg , from http://www.kyodai.com/.) ' .Sp .TP 5 .OA \-\-tileset tileset ' Use the specified tileset to draw the Mah Jongg tiles. .B Xmahjongg comes with several extra tilesets, particularly .B small (perfect for smaller screens). There are others too; run .RB ` "xmahjongg \-\-list" ' for a complete listing. ' .Sp .TP 5 .OA \-\-background image .TP 5 .OA \-\-bg image ' The background image is set to .IR image . Run .RB ` "xmahjongg \-\-list" ' to see the backgrounds that come with .BR xmahjongg , or use an arbitrary GIF as a background image by giving its filename. ' .Sp .TP 5 .OP \-\-list ' Lists all the layouts, tilesets, and backgrounds that came with .BR xmahjongg , then exits. ' .Sp .TP 5 .OA \-\-solvable\-boards ' Always create solvable boards. This is the default. ' .Sp .TP 5 .OA \-\-any\-boards ' Allow any legal board, some of which will be solvable and some of which won't. ' .Sp .TP 5 .OA \-\-display display ' Sets the X display to .IR display . ' .Sp .TP 5 .OA \-\-name name ' Specifies the application name under which resources are found, rather than the default ``xmahjongg''. Since .B xmahjongg itself does not use the resource database, this is mostly useful for communication with your window manager. ' .Sp .TP 5 .OA \-\-geometry geometry ' This standard X option specifies the preferred size and position for the .B xmahjongg window. ' .Sp .TP 5 .OP \-\-help ' Prints usage information and exits. ' .Sp .TP .OP \-\-version ' Prints the version number and some quickie warranty information and exits. ' .PD ' .SH BUGS Please email suggestions, additions, patches and bugs to eddietwo@lcs.mit.edu. The following features have not made it into 3.0 as of yet: .IP * 2 Tournament mode. .IP * 2 Board setup mode. ' .SH HISTORY .B xmahjongg version 3 is a complete rewrite by Eddie Kohler of .B xmahjongg versions 1 and 2 by Jeff S. Young . .PP The default tileset was originally created in color by Dorothy Robinson with Mark A. Holm . The publically available version was in black-and-white. Holm copyrighted the tiles in 1988, giving permission to copy and distribute for non-profit purposes. The significantly altered color version that comes with .B xmahjongg was created by Eddie Kohler in 1993. The `small' tileset was found at http://www.mahjongg.com/, and is presumably by Berrie Bloem. The `gnome' and `gnome2' tilesets were created by Jonathan Buzzard and Max Watson. The `dorothys' and `dorwhite' tilesets were made by Dorothy Robinson . The `real' tileset was scanned by Mark Sanctuary . .PP Many of the layouts are based on layouts designed for Kyodai Mahjongg, a fun Windows Mah Jongg game. In particular, `arena', `ceremonial', `deepwell', `farandole', and `theater' are by Naoki Haga, and `hourglass' and `papillon' are by Vincent Krebs. Kyodai Mahjongg's Web homepage is http://www.kyodai.com/. ' .SH AUTHOR .na Eddie Kohler, eddietwo@lcs.mit.edu .br http://www.pdos.lcs.mit.edu/~eddietwo/ .PP http://www.lcdf.org/~eddietwo/xmahjongg/ .br The .B xmahjongg home page. ' xmahjongg-3.7/Makefile.in0000644000076400007640000005750110213403306012343 00000000000000# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure INSTALL NEWS TODO depcomp install-sh \ missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive man6dir = $(mandir)/man6 am__installdirs = "$(DESTDIR)$(man6dir)" NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign check-news SUBDIRS = liblcdf src man_MANS = xmahjongg.6 # # Installation # LAYOUTS = default bridge wedges ceremonial farandole arena theater \ deepwell hourglass arrow papillon schoon \ rat ox tiger hare dragon snake horse ram monkey rooster dog boar TILESETS = thin.gif small.gif thick.gif gnome.gif gnome2.gif dorothys.gif \ dorwhite.gif real.gif BACKGROUNDS = default.gif green.gif # # Distribution # EXTRA_DIST = \ xmahjongg.6 \ xmahjongg.spec \ include/lcdf/clp.h \ include/lcdf/inttypes.h \ include/lcdf/permstr.hh \ include/lcdf/straccum.hh \ include/lcdf/string.hh \ include/lcdf/vector.hh include/lcdf/vector.cc \ include/lcdfgif/gif.h \ include/lcdfgif/gifx.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 uninstall-info-am: install-man6: $(man6_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man6dir)" || $(mkdir_p) "$(DESTDIR)$(man6dir)" @list='$(man6_MANS) $(dist_man6_MANS) $(nodist_man6_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.6*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 6*) ;; \ *) ext='6' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man6dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$inst"; \ done uninstall-man6: @$(NORMAL_UNINSTALL) @list='$(man6_MANS) $(dist_man6_MANS) $(nodist_man6_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.6*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 6*) ;; \ *) ext='6' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man6dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man6dir)/$$inst"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/include/lcdf $(distdir)/include/lcdfgif @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(MANS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man6dir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-data-local install-man install-exec-am: install-info: install-info-recursive install-man: install-man6 installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-local uninstall-man uninstall-info: uninstall-info-recursive uninstall-man: uninstall-man6 .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-recursive ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-recursive \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-exec \ install-exec-am install-info install-info-am install-man \ install-man6 install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-info-am uninstall-local uninstall-man uninstall-man6 install-share: $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/layouts $(DESTDIR)$(pkgdatadir)/tiles $(DESTDIR)$(pkgdatadir)/backgrounds for i in $(LAYOUTS); do \ $(INSTALL_DATA) $(srcdir)/share/layouts/$$i $(DESTDIR)$(pkgdatadir)/layouts; done for i in $(TILESETS); do \ $(INSTALL_DATA) $(srcdir)/share/tiles/$$i $(DESTDIR)$(pkgdatadir)/tiles; done for i in $(BACKGROUNDS); do \ $(INSTALL_DATA) $(srcdir)/share/backgrounds/$$i $(DESTDIR)$(pkgdatadir)/backgrounds; done install-data-local: install-share uninstall-local: -cd $(DESTDIR)$(pkgdatadir)/layouts; rm -f $(LAYOUTS) -cd $(DESTDIR)$(pkgdatadir)/tiles; rm -f $(TILESETS) -cd $(DESTDIR)$(pkgdatadir)/backgrounds; rm -f $(BACKGROUNDS) -rmdir $(DESTDIR)$(pkgdatadir)/layouts $(DESTDIR)$(pkgdatadir)/tiles $(DESTDIR)$(pkgdatadir)/backgrounds -rmdir $(DESTDIR)$(pkgdatadir) dist-hook: mkdir $(distdir)/share mkdir $(distdir)/share/layouts mkdir $(distdir)/share/tiles mkdir $(distdir)/share/backgrounds for l in $(LAYOUTS); do cp -p $(srcdir)/share/layouts/$$l $(distdir)/share/layouts; done for t in $(TILESETS); do cp -p $(srcdir)/share/tiles/$$t $(distdir)/share/tiles; done for b in $(BACKGROUNDS); do cp -p $(srcdir)/share/backgrounds/$$b $(distdir)/share/backgrounds; done mkdir $(distdir)/images cp -p $(srcdir)/images/*.gif $(distdir)/images rpm: dist buildarch=`rpm --showrc | awk '/^build arch/ { print $$4; }'` ; \ mkdir -p /tmp/rpm-xmj/SOURCES /tmp/rpm-xmj/RPMS/$$buildarch \ /tmp/rpm-xmj/BUILD ; \ echo 'include: /usr/lib/rpm/rpmrc' > /tmp/rpm-xmj/rc ; \ echo 'macrofiles: /usr/lib/rpm/macros:/tmp/rpm-xmj/macros' >> /tmp/rpm-xmj/rc ; \ echo '%_topdir /tmp/rpm-xmj' > /tmp/rpm-xmj/macros ; \ cp logo.gif $(PACKAGE)-$(VERSION).tar.gz /tmp/rpm-xmj/SOURCES ; \ rpm --rcfile /tmp/rpm-xmj/rc -bb xmahjongg.spec ; \ cp /tmp/rpm-xmj/RPMS/$$buildarch/*.rpm . rm -rf /tmp/rpm-xmj # # Maintenance # srclinks: test -d $(srcdir)/include || mkdir $(srcdir)/include test -d $(srcdir)/include/lcdf || mkdir $(srcdir)/include/lcdf test -d $(srcdir)/include/lcdfgif || mkdir $(srcdir)/include/lcdfgif cd $(srcdir); for i in clp ; do \ ln -sf ../../liblcdf/liblcdf/$$i.c liblcdf/$$i.c ; \ ln -sf ../../../liblcdf/include/lcdf/$$i.h include/lcdf/$$i.h ; done cd $(srcdir); for i in fixlibc.c vectorv.cc fmalloc.c ; do \ ln -sf ../../liblcdf/liblcdf/$$i liblcdf/$$i ; done cd $(srcdir); for i in vector ; do \ ln -sf ../../../liblcdf/include/lcdf/$$i.cc include/lcdf/$$i.cc ; \ ln -sf ../../../liblcdf/include/lcdf/$$i.hh include/lcdf/$$i.hh ; done cd $(srcdir); for i in permstr straccum string ; do \ ln -sf ../../../liblcdf/include/lcdf/$$i.hh include/lcdf/$$i.hh ; \ ln -sf ../../liblcdf/liblcdf/$$i.cc liblcdf/$$i.cc ; done cd $(srcdir); for i in inttypes.h ; do \ ln -sf ../../../liblcdf/include/lcdf/$$i include/lcdf/$$i ; done cd $(srcdir); for i in gif.h gifx.h ; do \ ln -sf ../../../liblcdf/include/lcdfgif/$$i include/lcdfgif/$$i ; done cd $(srcdir); for i in giffunc.c gifread.c giftoc.c gifx.c ; do \ ln -sf ../../liblcdf/liblcdfgif/$$i liblcdf/$$i ; done versionize: perl -pi -e "s/^\\.ds V.*/.ds V $(VERSION)/;" $(top_srcdir)/xmahjongg.6 perl -pi -e "s/^Version: .*/Version: $(VERSION)/; s/$(PACKAGE)-[\w.]+\.tar\.gz/$(PACKAGE)-$(VERSION).tar.gz/;" $(top_srcdir)/xmahjongg.spec .PHONY: srclinks versionize rpm # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xmahjongg-3.7/depcomp0000755000076400007640000003554510126442331011663 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2004-05-31.23 # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # Dependencies are output in .lo.d with libtool 1.4. # With libtool 1.5 they are output both in $dir.libs/$base.o.d # and in $dir.libs/$base.o.d and $dir$base.o.d. We process the # latter, because the former will be cleaned when $dir.libs is # erased. tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir$base.o.d" tmpdepfile3="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" tmpdepfile3="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" elif test -f "$tmpdepfile2"; then tmpdepfile="$tmpdepfile2" else tmpdepfile="$tmpdepfile3" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: xmahjongg-3.7/src/0000777000076400007640000000000010213403362011143 500000000000000xmahjongg-3.7/src/solvable.cc0000664000076400007640000001450207547625047013227 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "solvable.hh" #include "tileset.hh" #include "tile.hh" #include #define INVALID(t) (t->mark_val() & 1) #define TOUCHED(t) (t->mark_val() & ~1) #define VALIDATE(t) (t->set_mark_val(TOUCHED(t))) #define INVALIDATE(t) (t->set_mark_val(3)) SolvableMaker::SolvableMaker(Game *game) : _game(game), _tileset(game->tileset()), _null_tile(game->null_tile()), _tiles(game->tiles()) { } void SolvableMaker::print_level(int ll) const { _null_tile->reset(false); for (int r = 2; r < TILE_ROWS - 2; r++) { for (int c = 0; c < TILE_COLS; c++) { Tile *t = grid(r, c, ll); if (r > 0 && grid(r-1, c, ll) == t) fprintf(stderr, t != _null_tile ? "^^^ " : " "); else if (t->real()) fprintf(stderr, "%c%c%c ", TOUCHED(t) ? '*' : '-', INVALID(t) ? '-' : 'O', !t->open() ? 'X' : '-'); else if (t != _null_tile) fprintf(stderr, "::: "); else fprintf(stderr, " "); c++; } fprintf(stderr, "\n"); } } void SolvableMaker::block_row(Tile *t, bool move_left) { int rr = t->row(); int cc = move_left ? t->col()-1 : t->col()+2; int ll = t->lev(); for (int r = rr; r < rr + 2; r++) { Tile *side = grid(r, cc, ll); if (side->real() && !INVALID(side)) { INVALIDATE(side); block_row(side, move_left); } } } int SolvableMaker::blank_distance(Tile *t, bool move_left, bool first) const { if (!t->real()) return t == _null_tile ? -1 : 0; int rr = t->row(); int cc = move_left ? t->col()-1 : t->col()+2; int ll = t->lev(); Tile *side = grid(rr, cc, ll); int d = blank_distance(side, move_left, false); if (side->row() != rr) { int d2 = blank_distance(grid(rr+1, cc, ll), move_left, false); if (d2 > d) d = d2; } if (first) return d; else return d < 0 ? d : 1 + d; } void SolvableMaker::unblock_tile(Tile *t) { // We can unblock a tile only if, on both sides, it immediately adjoins // a used tile -- or there's no used tile accessible. if (INVALID(t)) if (blank_distance(t, true) <= 0 && blank_distance(t, false) <= 0) VALIDATE(t); } void SolvableMaker::unblock_sides(Tile *t) { int rr = t->row(), cc = t->col(), ll = t->lev(); Tile *side = grid(rr, cc-1, ll); unblock_tile(side); if (side->row() != rr) unblock_tile(grid(rr+1, cc-1, ll)); side = grid(rr, cc+2, ll); unblock_tile(side); if (side->row() != rr) unblock_tile(grid(rr+1, cc+2, ll)); } void SolvableMaker::choose(Tile *t) { bool started_new_row = !TOUCHED(t); t->reset(false); // Mark all tiles reachable to the left and right. block_row(t, true); block_row(t, false); if (started_new_row) // Unmark tiles at the immediate left and right ONLY if we're starting a // new row. unblock_sides(t); } Tile * SolvableMaker::pick(int tiles_done) { int ntiles = _tiles.size(); int offset = zrand() % (ntiles - tiles_done); int original_offset = offset; // First, choose a tile. We choose the `offset'th real open tile. while (1) { // Look for the tile. for (int tnum = 0; tnum < ntiles; tnum++) { Tile *t = _tiles[tnum]; if (t->real() && t->open() && !INVALID(t)) { if (offset == 0) { choose(t); return t; } offset--; } } // If offset wasn't decremented, there are no available tiles; fail. if (offset == original_offset) return 0; // Reduce offset to be between 0 and (# available tiles - 1). offset = zrand() % (original_offset - offset); } } void SolvableMaker::init_tiles() { int ntiles = _tiles.size(); // Clear all tile blockages for (int i = 0; i < ntiles; i++) _tiles[i]->reset(true); // Block tiles above for (int i = 0; i < ntiles; i++) { int rr = _tiles[i]->row(); int cc = _tiles[i]->col(); int ll = _tiles[i]->lev(); for (int r = rr; r < rr + 2; r++) { grid(r, cc, ll+1)->block_upper(); grid(r, cc+1, ll+1)->block_upper(); } } // Make sure the null tile is set up properly! It cannot be marked, since // above we assume that all non-real tiles are unmarked. _null_tile->reset(false); } bool SolvableMaker::try_assign(int *permuted_tiles) { int ntiles = _tiles.size(); init_tiles(); // Now, pick tiles in pairs, and build up the solution in reverse order _solution.clear(); for (int i = 0; i < ntiles / 2; i++) { Tile *t1 = pick(i * 2); Tile *t2 = pick(i * 2 + 1); if (!t1 || !t2) return false; _solution.push_back(Move(t1, t2)); int permuted_val = permuted_tiles[i] * 2; t1->assign(permuted_val, _tileset->match(permuted_val)); t2->assign(permuted_val + 1, _tileset->match(permuted_val)); // Unblock tiles above and to the sides unblock_sides(t1); unblock_sides(t2); for (int k = 0; k < 2; k++) { Tile *t = k ? t1 : t2; int rr = t->row(), cc = t->col(), ll = t->lev(); for (int r = rr; r < rr + 2; r++) { grid(r, cc, ll+1)->unblock_upper(); grid(r, cc+1, ll+1)->unblock_upper(); } } } return true; } bool SolvableMaker::assign(uint32_t seed) { /* assign creates a board which is guaranteed to be solvable. I thought for a long time about how to do this but impotently! I was thinking you wanted a function which, given a board, would return true (solvable) or false (not solvable). While this would still be nice for early warnings -- as soon as you fuck up and lose the game, xmahjongg would warn you -- it's a pretty hard problem. CREATING a solvable board is much easier; it's the reverse of solving the board: just drop down tiles two at a time! */ int ntiles = _tiles.size(); int *permuted_tiles = new int[ntiles / 2]; // Decide on assignment order for (int i = 0; i < ntiles / 2; i++) permuted_tiles[i] = i; seed &= 0x3FFFFFFFU; zrand_seed(seed); for (int i = ntiles / 2 - 1; i > 0; i--) { int j = zrand() % (i+1); int tmp = permuted_tiles[i]; permuted_tiles[i] = permuted_tiles[j]; permuted_tiles[j] = tmp; } int retries = 0; while (!try_assign(permuted_tiles)) retries++; //fprintf(stderr, "RRRRe %d\n", retries); // Reverse the solution Vector reversed_solution = _solution; _solution.clear(); for (int i = reversed_solution.size() - 1; i >= 0; i--) _solution.push_back(reversed_solution[i]); delete[] permuted_tiles; return true; } xmahjongg-3.7/src/swwidget.hh0000664000076400007640000000225506721336316013260 00000000000000#ifndef SWWIDGET_HH #define SWWIDGET_HH #include "swgeneral.hh" class SwWidget: public SwDrawable { SwWindow *_swwindow; int _x; int _y; int _width; int _height; bool _visible; public: SwWidget(SwWindow *); virtual ~SwWidget() { } Display *display() const { return _swwindow->display(); } Window window() const { return _swwindow->window(); } int depth() const { return _swwindow->depth(); } int x() const { return _x; } int y() const { return _y; } int x_pos() const { return _x; } // in case x is a var. int y_pos() const { return _y; } // in case y is a var. int width() const { return _width; } int height() const { return _height; } bool visible() const { return _visible; } void set_visible() { _visible = true; } void set_position(int x, int y) { _x = x; _y = y; } void set_size(int w, int h) { _width = w; _height = h; } Gif_XContext *get_gif_x_context(); void draw_subimage(Pixmap, Pixmap, int, int, int, int, int, int); void clear_area(int, int, int, int); void invalidate() { invalidate(0, 0, _width, _height); } void invalidate(int x, int y, int w, int h); }; #endif xmahjongg-3.7/src/moment.hh0000664000076400007640000000333506721336314012720 00000000000000#ifndef MOMENT_HH #define MOMENT_HH #include class Moment { long _sec; long _usec; static const long MicroPerSec = 1000000; static Moment genesis; Moment(Moment *); public: Moment() { } Moment(long sec, long usec = 0) : _sec(sec), _usec(usec) { } Moment(const struct timeval &t) : _sec(t.tv_sec), _usec(t.tv_usec) { } static Moment now(); operator struct timeval() const; long sec() const { return _sec; } long usec() const { return _usec; } Moment &operator+=(const Moment &); Moment &operator-=(const Moment &); friend Moment operator+(const Moment &, const Moment &); friend Moment operator-(const Moment &, const Moment &); friend bool operator>=(const Moment &, const Moment &); friend bool operator>(const Moment &, const Moment &); }; inline Moment & Moment::operator+=(const Moment &a) { _sec += a._sec; if ((_usec += a._usec) >= MicroPerSec) { _sec++; _usec -= MicroPerSec; } return *this; } inline Moment & Moment::operator-=(const Moment &a) { _sec -= a._sec; if ((_usec -= a._usec) < 0) { _sec--; _usec += MicroPerSec; } return *this; } inline Moment operator+(const Moment &a, const Moment &b) { Moment c = a; return c += b; } inline Moment operator-(const Moment &a, const Moment &b) { Moment c = a; return c -= b; } inline bool operator>=(const Moment &a, const Moment &b) { return a._sec > b._sec || (a._sec == b._sec && a._usec >= b._usec); } inline bool operator>(const Moment &a, const Moment &b) { return a._sec > b._sec || (a._sec == b._sec && a._usec > b._usec); } inline Moment::operator struct timeval() const { struct timeval t; t.tv_sec = _sec; t.tv_usec = _usec; return t; } #endif xmahjongg-3.7/src/kmjts.cc0000664000076400007640000001363707547625047012560 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "kmjts.hh" #include "tile.hh" #include "game.hh" #include "swgeneral.hh" #include #define NPICTURES (Tileset::IVORY_NPICTURES) #define NIMAGES (2*NPICTURES + 1) #define NACROSS 9 #define NDOWN 5 KyodaiTileset::KyodaiTileset(Gif_Stream *gfs, Gif_XContext *gifx) : Tileset("ivory"), _gfs(gfs), _gifx(gifx), _colormap(0), _hi_colormap(0), _background_colormap(0), _image_error(ieNone), _background(None), _background_mask(None) { initialize_images(); if (check()) { initialize(); _gfs->refcount++; } else _gfs = 0; } KyodaiTileset::~KyodaiTileset() { Gif_DeleteColormap(_colormap); Gif_DeleteColormap(_hi_colormap); Gif_DeleteColormap(_background_colormap); Display *display = _gifx->display; if (_gfs && _images.size()) for (int i = 0; i < NIMAGES; i++) { if (_images[i]) XFreePixmap(display, _images[i]); } if (_background) XFreePixmap(display, _background); if (_background_mask) XFreePixmap(display, _background_mask); Gif_DeleteStream(_gfs); } void KyodaiTileset::initialize_images() { _images.assign(NIMAGES, None); check_images(); } void KyodaiTileset::check_images() { if (_gfs == 0 || Gif_ImageCount(_gfs) != 1) { _image_error = ieBadGif; return; } Gif_Image *gfi = Gif_GetImage(_gfs, 0); if (!_gfs->global && !gfi->local) { _image_error = ieBadGif; return; } _image_error = ieNone; } bool KyodaiTileset::check() const { return _image_error == ieNone; } void KyodaiTileset::initialize() { Gif_Image *gfi = Gif_GetImage(_gfs, 0); _colormap = Gif_CopyColormap(gfi->local ? gfi->local : _gfs->global); _hi_colormap = Gif_CopyColormap(_colormap); // highlight color: 255, 215, 0 for (int i = 0; i < _hi_colormap->ncol; i++) { Gif_Color *c = &_hi_colormap->col[i]; c->green = (c->green * 215) / 255; c->blue = 0; } int border = 8, shadow = 1; for (Gif_Extension *gfex = _gfs->extensions; gfex; gfex = gfex->next) if (gfex->application && strcmp(gfex->application, "xmahjongg") == 0) { sscanf((char *)gfex->data, "border=%u", &border); sscanf((char *)gfex->data, "shadow=%d", &shadow); } _xborder = _yborder = border; _shadow = shadow; _width = gfi->width / NACROSS; _height = gfi->height / NDOWN; /* create `_background' */ Gif_Stream *bgfs = Gif_NewStream(); Gif_Image *bgfi = Gif_NewImage(); _background_colormap = Gif_NewFullColormap(10, 128); Gif_AddImage(bgfs, bgfi); bgfi->width = _width + _xborder; bgfi->height = _height + _yborder; Gif_CreateUncompressedImage(bgfi); bgfi->transparent = 9; memset(bgfi->image_data, 9, bgfi->width * bgfi->height); // set colors: 0-3 = vertical border, 4-7 = horizontal border Gif_Color *col = _background_colormap->col; for (int i = 0; i < 4; i++) { col[i].red = 211 + ((209 - 211)*i)/3; // 226,219,165 col[i].green = 201 + ((188 - 201)*i)/3; col[i].blue = 148 + ((146 - 148)*i)/3; col[i+4].red = 181 + ((168 - 181)*i)/3; col[i+4].green = 170 + ((162 - 170)*i)/3; col[i+4].blue = 86 + ((114 - 86)*i)/3; } col[8].red = 155; col[8].green = 138; col[8].blue = 31; for (int dy = 0; dy < border; dy++) { int x = (_shadow & 1 ? dy : _width + _xborder - dy - 1); int y1 = (_shadow & 2 ? dy + 1 : border - dy); for (int y = 0; y < _height - 1; y++) { int c = (dy ? ((y/10) + (zrand()%3 - 2)) % 8 : 12); bgfi->img[y+y1][x] = (c >= 4 ? c - 4 : 3 - c); } } for (int dx = 0; dx < border; dx++) { int y = (_shadow & 2 ? dx : _height + _yborder - dx - 1); int x1 = (_shadow & 1 ? dx + 1 : border - dx); for (int x = 0; x < _width - 1; x++) { int c = (dx ? ((x/5) + (zrand()%3 - 2)) % 8 : 8); bgfi->img[y][x+x1] = (c >= 4 ? c : 7 - c); } } for (int d = 0; d < border; d++) { int y = (_shadow & 2 ? d : _height + _yborder - d - 1); int x = (_shadow & 1 ? d : _width + _xborder - d - 1); int y2 = (_shadow & 2 ? y+1 : y-1); int x2 = (_shadow & 1 ? x+1 : x-1); bgfi->img[y][x] = bgfi->img[y2][x] = bgfi->img[y][x2] = 8; } _background = Gif_XImageColormap(_gifx, bgfs, _background_colormap, bgfi); _background_mask = Gif_XMask(_gifx, bgfs, bgfi); Gif_DeleteStream(bgfs); } static int mapping[] = { 27, 28, 29, 30, /* 0-3: seasons */ 36, 37, 38, 39, /* 4-7: plants; switch w/seasons?? */ 40, 41, 42, /* 8-10: dragons */ 31, 32, 33, 34, /* 11-14: winds */ 0, 1, 2, 3, 4, 5, 6, 7, 8, /* 15-23: circles */ 9, 10, 11, 12, 13, 14, 15, 16, 17, /* 24-32: bamboo */ 18, 19, 20, 21, 22, 23, 24, 25, 26, /* 33-41: characters */ }; void KyodaiTileset::draw(SwDrawable *drawable, short x, short y, short which) { if (!_images[which]) { Gif_Image *gfi = Gif_GetImage(_gfs, 0); Gif_UncompressImage(gfi); Gif_Colormap *gfcm = _colormap; int pos; if (which == NIMAGES - 1) pos = 43; // blank else if (which >= NPICTURES) { pos = mapping[which - NPICTURES]; gfcm = _hi_colormap; } else pos = mapping[which]; _images[which] = Gif_XSubImageColormap (_gifx, gfi, gfcm, (pos%NACROSS)*_width, (pos/NACROSS)*_height, _width, _height); } drawable->draw_image(_background, _background_mask, _width + _xborder, _height + _yborder, x, y); drawable->draw_image(_images[which], _width, _height, (_shadow & 1 ? x + _xborder : x), (_shadow & 2 ? y + _yborder : y)); } void KyodaiTileset::draw_normal(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, which); } void KyodaiTileset::draw_lit(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, which + NPICTURES); } void KyodaiTileset::draw_obscured(const Tile *, SwDrawable *drawable, short x, short y) { draw(drawable, x, y, NIMAGES - 1); } xmahjongg-3.7/src/kdets.cc0000664000076400007640000001225107547625047012531 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "kdets.hh" #include "tile.hh" #include "game.hh" #include "swgeneral.hh" #include #define NPICTURES (Tileset::IVORY_NPICTURES) #define NIMAGES (2*NPICTURES) #define NACROSS 9 #define NDOWN 5 #define BG_WIDTH 40 #define BG_HEIGHT 56 #define FACE_WIDTH 34 #define FACE_HEIGHT 50 #define FACE_XOFF 5 #define FACE_YOFF 1 #define NORMAL_BG_MAPPING 43 #define HIGHLIGHT_BG_MAPPING 44 KDETileset::KDETileset(Gif_Stream *gfs, Gif_XContext *gifx) : Tileset("ivory"), _gfs(gfs), _gifx(gifx), _colormap(0), _background_colormap(0), _image_error(ieNone), _background(None), _background_mask(None), _h_background(None), _h_background_mask(None) { initialize_images(); if (check()) { initialize(); _gfs->refcount++; } else _gfs = 0; } KDETileset::~KDETileset() { Gif_DeleteColormap(_colormap); Gif_DeleteColormap(_background_colormap); Display *display = _gifx->display; if (_gfs && _images.size()) for (int i = 0; i < NIMAGES; i++) { if (_images[i]) XFreePixmap(display, _images[i]); } if (_background) XFreePixmap(display, _background); if (_background_mask) XFreePixmap(display, _background_mask); if (_h_background) XFreePixmap(display, _h_background); if (_h_background_mask) XFreePixmap(display, _h_background_mask); Gif_DeleteStream(_gfs); } void KDETileset::initialize_images() { _images.assign(NIMAGES, None); check_images(); } void KDETileset::check_images() { if (_gfs == 0 || Gif_ImageCount(_gfs) != 1) { _image_error = ieBadGif; return; } Gif_Image *gfi = Gif_GetImage(_gfs, 0); if (!_gfs->global && !gfi->local) { _image_error = ieBadGif; return; } if (gfi->width != 360 || gfi->height != 280) { _image_error = ieBadSize; return; } _image_error = ieNone; } bool KDETileset::check() const { return _image_error == ieNone; } Pixmap KDETileset::get_tile(int which, Pixmap *mask, bool big) { Gif_Image *gfi = Gif_GetImage(_gfs, 0); Gif_UncompressImage(gfi); int left = (which % NACROSS) * BG_WIDTH + (big ? 0 : FACE_XOFF); int top = (which / NACROSS) * BG_HEIGHT + (big ? 0 : FACE_YOFF); int width = (big ? BG_WIDTH : FACE_WIDTH); int height = (big ? BG_HEIGHT : FACE_HEIGHT); bool restore_trans = gfi->transparent < 0; if (restore_trans) gfi->transparent = gfi->img[top][left]; Pixmap img = Gif_XSubImage(_gifx, _gfs, gfi, left, top, width, height); *mask = Gif_XSubMask(_gifx, gfi, left, top, width, height); if (restore_trans) gfi->transparent = -1; return img; } void KDETileset::initialize() { Gif_Image *gfi = Gif_GetImage(_gfs, 0); _colormap = Gif_CopyColormap(gfi->local ? gfi->local : _gfs->global); _xborder = BG_WIDTH - FACE_WIDTH - 2; _yborder = BG_HEIGHT - FACE_HEIGHT - 2; _shadow = 1; _width = FACE_WIDTH + 2; _height = FACE_HEIGHT + 2; // create `_background' and `_h_background' _background = get_tile(NORMAL_BG_MAPPING, &_background_mask, true); _h_background = get_tile(HIGHLIGHT_BG_MAPPING, &_h_background_mask, true); } static int mapping[] = { 27, 28, 29, 30, /* 0-3: seasons */ 39, 40, 41, 42, /* 4-7: plants; switch w/seasons?? */ 36, 37, 28, /* 8-10: dragons */ 31, 32, 33, 34, /* 11-14: winds */ 9, 10, 11, 12, 13, 14, 15, 16, 17, /* 15-23: circles */ 18, 19, 20, 21, 22, 23, 24, 25, 26, /* 24-32: bamboo */ 0, 1, 2, 3, 4, 5, 6, 7, 8, /* 33-41: characters */ }; void KDETileset::draw(SwDrawable *drawable, short x, short y, short which) { if (!_images[which]) { // create new pixmap Pixmap pix = XCreatePixmap(_gifx->display, _gifx->drawable, BG_WIDTH, BG_HEIGHT, _gifx->depth); if (!pix) return; // copy background onto pixmap XCopyArea(_gifx->display, (which >= NPICTURES ? _h_background : _background), pix, _gifx->image_gc, 0, 0, BG_WIDTH, BG_HEIGHT, 0, 0); // create subimage and copy it onto background Pixmap img, mask; int pos = (which >= NPICTURES ? which - NPICTURES : which); img = get_tile(mapping[pos], &mask); XSetClipMask(_gifx->display, _gifx->image_gc, mask); XSetClipOrigin(_gifx->display, _gifx->image_gc, FACE_XOFF, FACE_YOFF); XCopyArea(_gifx->display, img, pix, _gifx->image_gc, 0, 0, _width, _height, FACE_XOFF, FACE_YOFF); XSetClipMask(_gifx->display, _gifx->image_gc, None); XFreePixmap(_gifx->display, img); XFreePixmap(_gifx->display, mask); _images[which] = pix; } Pixmap mask = (which >= NPICTURES ? _h_background_mask : _background_mask); drawable->draw_image(_images[which], mask, BG_WIDTH, BG_HEIGHT, x, y); } void KDETileset::draw_normal(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, which); } void KDETileset::draw_lit(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, which + NPICTURES); } void KDETileset::draw_obscured(const Tile *, SwDrawable *drawable, short x, short y) { drawable->draw_image(_background, _background_mask, _width + _xborder, _height + _yborder, x, y); } xmahjongg-3.7/src/swwidget.cc0000664000076400007640000000206007027227223013234 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "swwidget.hh" SwWidget::SwWidget(SwWindow *swwindow) : _swwindow(swwindow), _visible(false) { } Gif_XContext * SwWidget::get_gif_x_context() { return _swwindow->get_gif_x_context(); } void SwWidget::draw_subimage(Pixmap src, Pixmap mask, int src_x, int src_y, int w, int h, int x, int y) { if (x < 0) { w += x; src_x -= x; x = 0; } if (y < 0) { h += y; src_y -= y; y = 0; } if (x + w > _width) w = _width - x; if (y + h > _height) h = _height - y; if (w >= 0 && h >= 0) _swwindow->draw_subimage(src, mask, src_x, src_y, w, h, x + _x, y + _y); } void SwWidget::clear_area(int x, int y, int w, int h) { if (x < 0) { w += x; x = 0; } if (y < 0) { h += y; y = 0; } if (x + w > _width) w = _width - x; if (y + h > _height) h = _height - y; if (w >= 0 && h >= 0) _swwindow->clear_area(x + _x, y + _y, w, h); } void SwWidget::invalidate(int x, int y, int w, int h) { _swwindow->invalidate(x + _x, y + _y, w, h); } xmahjongg-3.7/src/swgeneral.hh0000664000076400007640000000621107723547502013412 00000000000000#ifndef SWGENERAL_HH #define SWGENERAL_HH #include #include class SwDrawable { SwDrawable(const SwDrawable &); SwDrawable &operator=(const SwDrawable &); public: SwDrawable() { } virtual ~SwDrawable(); virtual Gif_XContext *get_gif_x_context() = 0; void draw_image(Pixmap src, int w, int h, int x, int y); void draw_image(Pixmap src, Pixmap mask, int w, int h, int x, int y); virtual void draw_subimage(Pixmap src, Pixmap mask, int src_x, int src_y, int w, int h, int x, int y) = 0; virtual void clear_area(int x, int y, int w, int h); virtual void invalidate(int x, int y, int w, int h); }; class SwWindow: public SwDrawable { Display *_display; Window _window; int _depth; GC _copy_gc; GC _masked_image_gc; Gif_XContext *_gifx; public: SwWindow(Display *, Window, int = -1); ~SwWindow(); Display *display() const { return _display; } Window window() const { return _window; } int depth() const { return _depth; } Gif_XContext *get_gif_x_context(); void draw_subimage(Pixmap, Pixmap, int, int, int, int, int, int); void clear_area(int, int, int, int); }; class SwClippedWindow: public SwWindow { bool _clipping; int _clip_left; int _clip_top; int _clip_right; int _clip_bottom; void do_clip(int &x, int &y, int &w, int &h) const; public: SwClippedWindow(Display *, Window, int = -1); bool clipped() const { return _clipping; } void unclip() { _clipping = false; } void intersect_clip(int x, int y, int w, int h); void union_clip(int x, int y, int w, int h); void draw_subimage(Pixmap, Pixmap, int, int, int, int, int, int); void clear_area(int, int, int, int); void invalidate(int, int, int, int); }; // class SwImage { SwImage(const SwImage &); SwImage &operator=(const SwImage &); protected: Display *_display; Pixmap _source; Pixmap _mask; int _width; int _height; public: SwImage(Display *d, Pixmap s, int w, int h) { set_image(d, s, 0, w, h); } SwImage(Display *d, Pixmap s, Pixmap m, int w, int h) { set_image(d, s, m, w, h); } SwImage() { set_image(0, 0, 0, 0, 0); } virtual ~SwImage(); void set_image(Display *d, Pixmap s, Pixmap m, int w, int h) { _display = d; _source = s; _mask = m; _width = w; _height = h; } virtual void draw(SwDrawable *, int x, int y); }; class SwGifImage: public SwImage { Gif_Stream *_gfs; Gif_Image *_gfi; bool _made; void initialize(Gif_Stream *, Gif_Image *); void create_pixmaps(SwDrawable *); public: SwGifImage(Gif_Stream *gfs, Gif_Image *gfi) { initialize(gfs, gfi); } SwGifImage(Gif_Stream *gfs, int n); ~SwGifImage(); void draw(SwDrawable *, int x, int y); }; inline void SwDrawable::draw_image(Pixmap src, int w, int h, int x, int y) { draw_subimage(src, 0, 0, 0, w, h, x, y); } inline void SwDrawable::draw_image(Pixmap src, Pixmap mask, int w, int h, int x, int y) { draw_subimage(src, mask, 0, 0, w, h, x, y); } inline SwGifImage::SwGifImage(Gif_Stream *gfs, int image_number) { initialize(gfs, Gif_GetImage(gfs, image_number)); } #endif xmahjongg-3.7/src/hint.cc0000664000076400007640000000504406721340333012344 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "hint.hh" #include "game.hh" #include "board.hh" #include "tile.hh" Moment Hint::flash_on_delay(0, 720000); Moment Hint::flash_off_delay(0, 400000); Hint::Hint(Board *b) : _board(b), _game(b->game()), _on(0), _which(0), _state(false), _alarm(this), _nchoices(0), _choices( new int[ _game->nmatches() ] ) { _game->add_hook(this); } Hint::~Hint() { turn_off(); delete[] _choices; } void Hint::show(bool state) { if (!_on || _state == state) return; _state = state; for (int i = 0; i < _tiles.size(); i++) if (!_board->tile_flag(_tiles[i], Board::fKeepLit)) _board->set_lit(_tiles[i], state); _board->flush(); Moment when = Moment::now(); if (state) when += flash_on_delay; else when += flash_off_delay; _alarm.schedule(when); } void Hint::get_choices() { int i; int max_match = _game->nmatches(); _nchoices = 0; for (i = 0; i < max_match; i++) if (_game->free_count(i) >= 2) { _choices[ _nchoices ] = i; _nchoices++; } } bool Hint::get_tiles(int which) { _tiles.clear(); if (which >= 0 && which < _nchoices) { int tileclass = _choices[which]; const Vector &t = _game->tiles(); for (int i = 0; i < t.size(); i++) if (t[i]->real() && t[i]->open() && t[i]->match() == tileclass) _tiles.push_back( t[i] ); } return _tiles.size() != 0; } bool Hint::find(int match) { if (!_on) { get_choices(); _on = true; } else { show(false); _board->deselect(); } _which = -1; for (int i = 0; i < _nchoices; i++) if (_choices[i] == match) { _skip_which = i; get_tiles(i); show(true); return true; } turn_off(); return false; } void Hint::next() { if (_board->selected() && !_on) { if (!find( _board->selected()->match() )) { _board->bell(); _board->deselect(); } return; } if (!_on) { get_choices(); _on = true; } else { show(false); _which++; if (_which == _skip_which) _which++; _board->deselect(); } get_tiles(_which); if (_tiles.size()) show(true); else { turn_off(); _board->bell(); } } void Hint::turn_off() { if (_on) show(false); _on = false; _which = 0; _skip_which = -1; _tiles.clear(); } void Hint::alarm() { show(!_state); } void Hint::start_hook(Game *) { if (_on) turn_off(); } void Hint::add_tile_hook(Game *, Tile *) { if (_on) turn_off(); } void Hint::remove_tile_hook(Game *, Tile *) { if (_on) turn_off(); } xmahjongg-3.7/src/matches.cc0000664000076400007640000000327407027227215013034 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "matches.hh" MatchCount::MatchCount(SwWindow *window, Gif_Stream *gfs, const char *name) : SwWidget(window), _game(0), _one_image(None), _one_mask(None), _count(0) { Gif_Image *gfi = Gif_GetNamedImage(gfs, name); if (gfi) { Gif_XContext *gifx = get_gif_x_context(); _one_image = Gif_XImage(gifx, gfs, gfi); _one_mask = Gif_XMask(gifx, gfs, gfi); _one_width = Gif_ImageWidth(gfi); _one_height = Gif_ImageHeight(gfi); } } void MatchCount::set_game(Game *g) { assert(!_game); _game = g; _game->add_hook(this); } void MatchCount::draw(int new_count, bool fast_display) { if (!fast_display) _count = 0; int side = width() / _one_width; if (side == 0) side = 1; int level = (_count ? (_count - 1)/side : 0); int new_level = (new_count ? (new_count - 1)/side : 0); if (level > new_level) { clear_area(0, (new_level + 1) * _one_height, width(), (level - new_level) * _one_height); _count = (new_level + 1) * side; level = new_level; } if (_count > new_count) { int pos = new_count % side; clear_area(pos * _one_width, level * _one_height, (_count - new_count) * _one_width, _one_height); } else { int pos = _count % side; int y = (_count/side) * _one_height; for (int i = _count; i < new_count; i++) { int x = pos * _one_width; draw_image(_one_image, _one_mask, _one_width, _one_height, x, y); if (++pos >= side) { pos = 0; y += _one_height; } } } _count = new_count; } void MatchCount::start_hook(Game *g) { change(g->possible_moves()); } void MatchCount::move_made_hook(Game *g) { change(g->possible_moves()); } xmahjongg-3.7/src/kdets.hh0000664000076400007640000000175307723547501012542 00000000000000#ifndef KDETS_HH #define KDETS_HH #include #include #include "tileset.hh" class KDETileset: public Tileset { enum ImageError { ieNone = 0, ieBadGif, ieBadSize, }; Gif_Stream *_gfs; Gif_XContext *_gifx; Gif_Colormap *_colormap; Gif_Colormap *_background_colormap; int _image_error; Vector _images; Pixmap _background; Pixmap _background_mask; Pixmap _h_background; Pixmap _h_background_mask; void initialize_images(); void check_images(); bool check() const; void initialize(); Pixmap get_tile(int, Pixmap *, bool = false); void draw(SwDrawable *, short, short, short); public: KDETileset(Gif_Stream *, Gif_XContext *); ~KDETileset(); bool ok() const { return _gfs; } void draw_normal(const Tile *, SwDrawable *, short x, short y); void draw_lit(const Tile *, SwDrawable *, short x, short y); void draw_obscured(const Tile *, SwDrawable *, short x, short y); }; #endif xmahjongg-3.7/src/gmjts.hh0000664000076400007640000000152607723547501012552 00000000000000#ifndef GMJTS_HH #define GMJTS_HH #include #include #include "tileset.hh" class GnomeMjTileset: public Tileset { enum ImageError { ieNone = 0, ieBadGif, ieBadSize, }; Gif_Stream *_gfs; Gif_XContext *_gifx; Gif_Colormap *_colormap; int _image_error; Vector _images; Vector _masks; void initialize_images(); void check_images(); bool check() const; void initialize(); void draw(SwDrawable *, short, short, short); public: GnomeMjTileset(Gif_Stream *, Gif_XContext *); ~GnomeMjTileset(); bool ok() const { return _gfs; } void draw_normal(const Tile *, SwDrawable *, short x, short y); void draw_lit(const Tile *, SwDrawable *, short x, short y); void draw_obscured(const Tile *, SwDrawable *, short x, short y); }; #endif xmahjongg-3.7/src/Makefile.in0000644000076400007640000004166210213402602013131 00000000000000# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(xmahjongg_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = xmahjongg$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_xmahjongg_OBJECTS = alarm.$(OBJEXT) board.$(OBJEXT) \ button.$(OBJEXT) counter.$(OBJEXT) game.$(OBJEXT) \ gmjts.$(OBJEXT) hint.$(OBJEXT) images.$(OBJEXT) \ kdets.$(OBJEXT) kmjts.$(OBJEXT) main.$(OBJEXT) \ matches.$(OBJEXT) moment.$(OBJEXT) panel.$(OBJEXT) \ random.$(OBJEXT) solution.$(OBJEXT) solvable.$(OBJEXT) \ swgeneral.$(OBJEXT) swwidget.$(OBJEXT) tile.$(OBJEXT) \ tileset.$(OBJEXT) traverse.$(OBJEXT) xmj3ts.$(OBJEXT) xmahjongg_OBJECTS = $(am_xmahjongg_OBJECTS) xmahjongg_DEPENDENCIES = ../liblcdf/liblcdf.a DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(xmahjongg_SOURCES) DIST_SOURCES = $(xmahjongg_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign xmahjongg_SOURCES = \ alarm.hh alarm.cc \ board.hh board.cc \ button.hh button.cc \ counter.hh counter.cc \ game.hh game.cc \ gmjts.hh gmjts.cc \ hint.hh hint.cc \ images.c \ kdets.hh kdets.cc \ kmjts.hh kmjts.cc \ main.cc \ matches.hh matches.cc \ moment.hh moment.cc \ panel.hh panel.cc \ random.cc \ solution.hh solution.cc \ solvable.hh solvable.cc \ swgeneral.hh swgeneral.cc \ swwidget.hh swwidget.cc \ tile.hh tile.cc \ tileset.hh tileset.cc \ traverse.hh traverse.cc \ xmj3ts.hh xmj3ts.cc BUILT_SOURCES = images.c INCLUDES = $(X_CFLAGS) -I$(top_srcdir)/include xmahjongg_LDADD = $(LDADD) ../liblcdf/liblcdf.a @X_LIBS@ @X_PRE_LIBS@ -lX11 @X_EXTRA_LIBS@ # # Dependencies # IMAGES = $(top_srcdir)/images/buttons.gif $(top_srcdir)/images/digits.gif MOSTLYCLEANFILES = images.c all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) xmahjongg$(EXEEXT): $(xmahjongg_OBJECTS) $(xmahjongg_DEPENDENCIES) @rm -f xmahjongg$(EXEEXT) $(CXXLINK) $(xmahjongg_LDFLAGS) $(xmahjongg_OBJECTS) $(xmahjongg_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alarm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/board.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/button.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/counter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmjts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/images.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdets.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kmjts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matches.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moment.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solution.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solvable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swgeneral.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swwidget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tileset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/traverse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmj3ts.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cc.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-info-am images.c: $(IMAGES) ../liblcdf/giftoc ../liblcdf/giftoc -extern -makename $(IMAGES) > $@ # # Maintenance # srclinks: for i in clp.h clp.c fmalloc.c permstr.hh permstr.cc strerror.c \ vector.hh vector.cc ; do \ ln -sf $$HOME/src/edlib/$$i $$i ; done for i in gif.h giffunc.c gifread.c giftoc.c gifx.h gifx.c ; do \ ln -sf $$HOME/src/giflib/$$i $$i ; done versionize: perl -pi -e "s/^\\.ds V.*/.ds V $(VERSION)/;" xmahjongg.6 perl -pi -e "s/^Version: .*/Version: $(VERSION)/; s/$(PACKAGE)-[\w.]+\.tar\.gz/$(PACKAGE)-$(VERSION).tar.gz/;" rpm.spec .PHONY: srclinks versionize rpm # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xmahjongg-3.7/src/swgeneral.cc0000664000076400007640000001117207547625047013407 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "swgeneral.hh" #include SwDrawable::~SwDrawable() { } void SwDrawable::clear_area(int, int, int, int) { } void SwDrawable::invalidate(int, int, int, int) { } // SwWindow::SwWindow(Display *display, Window window, int depth) : _display(display), _window(window), _depth(depth), _gifx(0) { if (_depth <= 0) { XWindowAttributes attr; XGetWindowAttributes(_display, _window, &attr); _depth = attr.depth; } _copy_gc = XCreateGC(_display, _window, 0, NULL); _masked_image_gc = XCreateGC(_display, _window, 0, NULL); } SwWindow::~SwWindow() { XFreeGC(_display, _copy_gc); XFreeGC(_display, _masked_image_gc); delete _gifx; } Gif_XContext * SwWindow::get_gif_x_context() { if (!_gifx) _gifx = Gif_NewXContext(_display, _window); return _gifx; } void SwWindow::draw_subimage(Pixmap source, Pixmap mask, int src_x, int src_y, int width, int height, int x, int y) { if (source && width > 0 && height > 0) { GC image_gc; if (mask) { image_gc = _masked_image_gc; XSetClipMask(_display, image_gc, mask); XSetClipOrigin(_display, image_gc, x - src_x, y - src_y); } else image_gc = _copy_gc; XCopyArea(_display, source, _window, image_gc, src_x, src_y, width, height, x, y); } } void SwWindow::clear_area(int x, int y, int width, int height) { if (width > 0 && height > 0) XClearArea(_display, _window, x, y, width, height, False); } // SwClippedWindow::SwClippedWindow(Display *display, Window window, int depth) : SwWindow(display, window, depth), _clipping(false) { } void SwClippedWindow::intersect_clip(int left, int top, int w, int h) { int right = left + w; int bottom = top + h; if (_clipping) { if (left < _clip_left) left = _clip_left; if (right > _clip_right) right = _clip_right; if (top < _clip_top) top = _clip_top; if (bottom > _clip_bottom) bottom = _clip_bottom; } _clip_left = left; _clip_right = right; _clip_top = top; _clip_bottom = bottom; _clipping = true; } void SwClippedWindow::union_clip(int left, int top, int w, int h) { int right = left + w; int bottom = top + h; if (_clipping) { if (left > _clip_left) left = _clip_left; if (right < _clip_right) right = _clip_right; if (top > _clip_top) top = _clip_top; if (bottom < _clip_bottom) bottom = _clip_bottom; } _clip_left = left; _clip_right = right; _clip_top = top; _clip_bottom = bottom; _clipping = true; } void SwClippedWindow::do_clip(int &x, int &y, int &width, int &height) const { if (_clipping) { if (x + width > _clip_right) width = _clip_right - x; if (y + height > _clip_bottom) height = _clip_bottom - y; if (x < _clip_left) { width -= _clip_left - x; x = _clip_left; } if (y < _clip_top) { height -= _clip_top - y; y = _clip_top; } } } void SwClippedWindow::draw_subimage(Pixmap source, Pixmap mask, int src_x, int src_y, int width, int height, int x, int y) { short old_x = x, old_y = y; do_clip(x, y, width, height); if (width > 0 && height > 0) SwWindow::draw_subimage(source, mask, src_x + x - old_x, src_y + y - old_y, width, height, x, y); } void SwClippedWindow::clear_area(int x, int y, int width, int height) { do_clip(x, y, width, height); SwWindow::clear_area(x, y, width, height); } void SwClippedWindow::invalidate(int x, int y, int width, int height) { do_clip(x, y, width, height); SwWindow::invalidate(x, y, width, height); } // SwImage::~SwImage() { if (_source) XFreePixmap(_display, _source); if (_mask) XFreePixmap(_display, _mask); } void SwImage::draw(SwDrawable *drawable, int x, int y) { if (_source) drawable->draw_subimage(_source, _mask, 0, 0, _width, _height, x, y); } SwGifImage::~SwGifImage() { if (_gfi) { _gfi->refcount--; if (!_gfi->refcount) Gif_DeleteImage(_gfi); } _gfs->refcount--; if (!_gfs->refcount) Gif_DeleteStream(_gfs); } void SwGifImage::initialize(Gif_Stream *gfs, Gif_Image *gfi) { _gfs = gfs; _gfi = gfi; _gfs->refcount++; if (_gfi) _gfi->refcount++; } void SwGifImage::create_pixmaps(SwDrawable *drawable) { if (!_gfi) return; Gif_XContext *gifx = drawable->get_gif_x_context(); Pixmap source = Gif_XImage(gifx, _gfs, _gfi); Pixmap mask = None; if (_gfi->transparent >= 0) mask = Gif_XMask(gifx, _gfs, _gfi); set_image(gifx->display, source, mask, _gfi->width, _gfi->height); _made = true; } void SwGifImage::draw(SwDrawable *drawable, int x, int y) { if (!_made) create_pixmaps(drawable); if (_source) drawable->draw_subimage(_source, _mask, 0, 0, _width, _height, x, y); } xmahjongg-3.7/src/panel.hh0000664000076400007640000000377107317500502012516 00000000000000#ifndef PANEL_HH #define PANEL_HH #include #include "swgeneral.hh" class Tileset; class Button; class Hint; class Tile; class Game; class Board; class MatchCount; class FancyCounter; class SolutionDisplay; class Traversal; class Panel: public SwClippedWindow { bool _visible; short _window_width; short _window_height; Board *_board; Pixmap _background; FancyCounter *_tile_count; MatchCount *_match_count; SolutionDisplay *_solution; Traversal *_traversal; short _scan_mark_x; short _scan_mark_y; int _redraw_left; int _redraw_top; int _redraw_right; int _redraw_bottom; bool _need_redraw; void resize(int, int); enum Command { comNone, comHint, comUndo, comRedo, comNew, comQuit, comClean, comSolve, comDeselect, comCheckSolve, }; enum TraversalCommand { comTravLeft = 0, comTravRight = 1, comTravUp = 2, comTravDown = 3, comTravAnchor, comTravTake, }; void tile_command(Game *, Tile *); void command(Game *, Command, Button *, bool, Time = CurrentTime); void traversal_command(Game *, TraversalCommand); void traversal_take_command(Game *, bool); public: Button *new_but; Button *undo_but; Button *quit_but; Button *hint_but; Button *clean_but; public: Panel(Display *, Window); Board *board() const { return _board; } void set_board(Board *); void set_background(Pixmap); void set_tile_count(FancyCounter *); void set_match_count(MatchCount *); void set_solution(SolutionDisplay *); // drawing and beeping bool visible() const { return _visible; } void invalidate(int x, int y, int w, int h); void redraw(); void redraw_all(); // scan void scan_mark(int, int); void scan_dragto(int, int); void draw_controls(); void bell() const { XBell(display(), 0); } void flush() const { XFlush(display()); } // events void handle(Game *, XEvent *); void key_press(Game *, KeySym, unsigned); void click(Game *, int, int, unsigned, Time); }; #endif xmahjongg-3.7/src/counter.cc0000664000076400007640000000256706721340332013067 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "counter.hh" extern Gif_Record digits_gif; static Pixmap digits[10]; static Pixmap masks[10]; static int digit_width, digit_height; static void setup_digits(Gif_XContext *gifx) { if (digits[0]) return; Gif_Stream *gfs = Gif_ReadRecord(&digits_gif); assert(gfs->nimages == 10); digit_width = Gif_ImageWidth(Gif_GetImage(gfs, 0)); digit_height = Gif_ImageHeight(Gif_GetImage(gfs, 0)); for (int i = 0; i < 10; i++) { Gif_Image *gfi = Gif_GetImage(gfs, i); digits[i] = Gif_XImage(gifx, gfs, gfi); masks[i] = Gif_XMask(gifx, gfs, gfi); } Gif_DeleteStream(gfs); } FancyCounter::FancyCounter(SwWindow *parent, int num_digits) : SwWidget(parent), _digits(num_digits), _value(0) { setup_digits(get_gif_x_context()); set_size(digit_width * num_digits, digit_height); } void FancyCounter::draw() { clear_area(0, 0, width(), height()); int v = _value; for (int d = _digits - 1; d >= 0; d--) { int digit = v % 10; draw_image(digits[digit], masks[digit], digit_width, digit_height, d * digit_width, 0); v /= 10; if (v == 0) break; } } FancyTileCounter::FancyTileCounter(SwWindow *window) : FancyCounter(window, 3) { } void FancyTileCounter::start_hook(Game *g) { set_value(g->nremaining()); } void FancyTileCounter::move_made_hook(Game *g) { set_value(g->nremaining()); } xmahjongg-3.7/src/images.c0000644000076400007640000004713510213403312012475 00000000000000#include "config.h" #include static const unsigned char buttons_gif_data[] = { 71,73,70,56,57,97,38,0,56,0,244,0,0,0,0,0,204,204,204,255, 255,255,119,136,153,47,79,79,112,128,144,0,0,0,255,50,46,138,16,0, 255,126,111,154,154,154,211,211,211,255,165,0,175,113,0,248,211,19,191,118, 122,34,38,38,255,255,0,255,248,220,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,33,206,4,104,105,110,116,0,33,249,4, 1,0,0,0,0,44,0,0,0,0,38,0,56,0,0,5,254,32,32,142, 100,105,158,104,170,174,108,107,188,240,219,206,192,27,220,248,45,211,168,157, 255,58,3,207,100,192,9,128,57,225,112,84,12,8,158,200,228,178,102,124, 30,163,186,101,211,122,197,6,148,180,166,19,234,197,129,93,55,110,217,28, 174,118,215,223,153,216,9,151,162,235,200,179,106,142,103,223,251,118,44,124, 128,122,41,131,95,136,69,62,63,133,61,121,64,135,141,39,145,144,121,109, 64,3,3,55,153,150,151,152,153,154,157,158,57,160,161,140,83,131,160,162, 67,139,56,170,73,146,114,164,156,129,83,34,124,175,89,182,36,98,185,113, 187,37,189,180,177,168,155,180,191,192,76,48,165,49,201,188,4,4,49,5, 5,196,172,6,208,4,5,217,217,59,206,53,209,49,6,212,222,183,215,216, 218,218,221,206,215,225,226,213,60,47,216,208,232,234,235,230,208,245,228,237, 228,147,48,222,249,252,202,213,8,72,68,136,30,128,193,222,213,48,152,80, 208,59,25,10,39,185,48,8,166,27,68,139,205,246,92,28,8,113,33,69, 101,43,50,98,4,185,144,100,72,37,59,29,212,165,68,169,112,165,73,151, 2,29,10,252,248,177,36,205,147,47,89,230,36,200,179,167,207,159,36,66, 0,0,33,206,3,110,101,119,0,33,249,4,1,0,0,0,0,44,0,0, 0,0,38,0,56,0,0,5,254,32,32,142,100,105,158,104,170,154,70,219, 174,112,233,186,71,253,198,164,59,206,117,239,223,49,23,98,102,64,248,142, 61,96,138,134,236,33,158,80,232,79,213,66,70,159,86,35,246,160,204,25, 157,219,166,239,187,53,156,138,223,131,116,28,29,59,109,102,89,186,13,198, 174,183,233,184,72,88,63,134,181,100,53,101,122,104,115,97,106,134,111,137, 92,57,126,105,136,134,129,145,54,59,143,107,144,118,116,150,88,64,69,117, 120,87,151,155,95,132,160,161,167,115,108,164,149,100,168,161,110,125,140,123, 174,109,175,111,130,101,172,168,136,159,169,184,70,9,165,135,170,170,128,125, 193,94,143,142,142,151,188,7,200,172,98,184,203,212,208,179,202,212,217,188, 9,214,45,195,89,77,135,192,157,205,98,229,142,220,122,0,133,210,177,204, 79,193,234,236,237,152,145,82,214,215,244,189,182,207,234,235,223,210,92,245, 72,39,3,141,190,98,135,8,202,193,118,16,91,60,22,6,15,182,83,200, 226,156,196,129,93,146,49,188,136,15,34,64,137,20,81,120,251,72,47,164, 200,121,28,96,31,194,24,73,242,8,183,142,84,70,234,123,169,18,199,58, 62,98,104,102,180,201,163,6,205,120,254,108,66,36,162,67,168,209,163,72, 147,42,77,250,162,232,77,121,80,131,60,189,73,181,147,153,166,65,151,196, 193,74,181,43,87,28,55,184,18,186,186,53,235,153,178,123,172,146,237,26, 4,109,81,177,107,193,142,77,11,53,238,210,187,120,243,234,221,11,35,4, 0,33,206,4,113,117,105,116,0,33,249,4,1,0,0,0,0,44,0,0, 0,0,38,0,56,0,0,5,254,32,32,142,100,105,158,104,170,174,108,235, 190,112,44,207,116,109,223,128,161,239,60,158,239,130,160,80,216,155,233,130, 138,161,146,168,139,25,150,80,168,225,117,20,38,163,203,38,235,185,188,98, 135,218,84,21,234,37,131,85,220,104,89,185,14,155,210,234,53,118,122,130, 127,239,231,183,25,31,165,151,236,2,114,124,68,122,67,130,124,11,11,65, 126,35,112,135,119,137,138,139,133,131,66,137,76,85,110,57,72,120,145,11, 112,60,92,140,155,149,2,60,152,71,154,57,143,74,161,162,167,170,6,94, 99,89,161,152,147,111,179,128,168,180,153,117,186,180,188,187,166,40,160,193, 188,139,166,132,117,146,139,195,166,99,169,203,111,158,137,207,173,118,163,141, 6,213,220,205,115,105,73,218,219,222,159,222,68,120,226,43,58,214,182,199, 108,196,91,59,36,167,86,129,156,10,227,78,225,247,73,249,250,50,142,40, 24,56,16,154,15,114,161,14,42,92,200,176,161,67,121,244,0,214,112,163, 170,161,196,136,97,50,210,209,56,15,205,198,41,32,63,230,248,177,173,133, 22,141,34,42,80,166,188,72,114,101,73,149,45,215,137,116,25,19,166,71, 154,45,155,132,28,169,83,94,199,149,59,113,86,20,195,242,70,207,135,36, 139,218,24,58,35,4,0,33,206,4,114,111,99,107,0,33,249,4,1,0, 0,0,0,44,0,0,0,0,20,0,20,0,0,5,95,32,32,142,100,105, 154,70,154,158,168,193,188,239,202,2,46,108,55,6,91,51,78,223,191,56, 20,204,71,236,5,73,53,7,143,184,60,138,146,202,101,212,231,132,14,129, 212,220,243,245,179,49,26,217,145,181,1,252,134,183,75,51,216,108,212,162, 149,224,95,220,249,46,18,233,79,178,189,173,107,196,169,120,37,41,126,132, 50,51,79,42,110,135,139,140,140,33,0,33,206,4,117,110,100,111,0,33, 249,4,1,0,0,0,0,44,0,0,0,0,38,0,56,0,0,5,254,32, 32,142,100,105,158,104,170,174,108,235,190,112,44,207,180,104,220,248,93,159, 120,226,255,184,221,232,246,43,2,117,53,131,113,233,67,32,99,68,230,18, 225,148,41,165,76,106,245,117,197,102,183,173,174,55,251,84,137,199,83,112, 234,140,54,82,13,43,229,227,33,157,219,191,240,117,194,206,239,247,211,121, 60,123,126,132,124,128,40,114,133,138,116,69,90,129,36,137,139,133,141,142, 38,145,146,126,148,149,144,131,152,132,63,90,111,37,151,158,134,77,161,106, 164,165,115,160,168,143,68,171,127,167,161,101,87,177,119,179,180,156,63,177, 154,186,187,188,158,190,155,192,193,146,173,174,130,75,139,195,162,202,123,203, 184,205,106,163,62,166,99,168,206,136,214,215,82,217,101,60,182,178,105,180, 143,122,198,140,110,174,230,107,6,84,193,228,196,46,55,239,95,229,51,244, 90,205,224,48,56,217,247,66,0,248,91,23,112,84,142,32,5,119,240,75, 8,137,29,195,33,14,31,10,140,104,16,162,13,56,8,47,78,132,232,16, 99,30,29,30,61,106,68,8,18,163,165,143,129,42,144,168,68,185,81,228, 201,141,22,91,162,116,153,49,230,147,149,26,97,222,100,135,147,102,200,145, 50,17,149,204,169,115,232,69,138,18,147,42,93,154,48,4,0,33,206,5, 99,108,101,97,110,0,33,249,4,1,0,0,2,0,44,0,0,0,0,38, 0,56,0,0,5,254,160,32,142,100,105,158,104,170,174,108,235,190,112,44, 207,36,0,208,47,64,16,55,206,234,187,158,15,5,128,236,130,67,34,196, 136,76,158,138,71,158,243,201,108,78,71,197,42,79,120,205,110,131,182,176, 24,87,20,71,207,96,90,25,138,70,219,100,186,101,123,46,205,209,131,144, 178,188,238,2,182,253,71,75,76,92,42,128,81,134,135,130,124,133,110,119, 59,130,70,132,79,135,142,137,131,133,90,149,90,144,139,37,108,136,109,123, 120,130,146,2,54,153,154,153,89,165,122,160,143,153,162,163,146,122,142,177, 4,182,164,158,75,174,81,184,170,187,53,187,103,182,183,168,104,192,193,121, 195,168,196,103,111,186,194,189,204,116,207,84,209,129,198,110,165,201,215,175, 142,219,38,89,221,183,212,224,79,226,188,71,213,49,171,223,67,237,127,230, 57,101,206,242,112,123,235,87,166,145,250,231,253,34,249,254,221,8,40,208, 94,18,130,239,158,85,11,83,99,32,192,129,8,223,72,236,49,241,161,41, 135,12,9,174,83,8,209,226,66,138,179,184,48,188,104,202,98,73,44,32, 31,195,137,20,50,146,228,71,147,158,40,186,36,89,178,98,199,153,49,89, 234,212,73,243,229,191,159,64,131,234,11,1,0,33,206,9,99,108,101,97, 110,45,108,105,116,0,33,249,4,1,0,0,2,0,44,0,0,0,0,38, 0,56,0,0,5,254,160,32,142,100,105,158,104,170,174,108,235,190,112,44, 207,100,20,209,111,68,16,55,206,234,187,158,15,21,129,236,130,67,34,196, 136,76,158,138,71,158,243,201,108,78,71,197,42,79,120,205,18,0,128,160, 109,76,198,21,193,224,168,90,76,59,3,180,235,163,77,166,91,198,239,210, 28,126,247,238,219,243,46,64,113,97,106,75,76,92,42,130,106,132,131,134, 128,137,107,140,120,134,70,136,79,81,146,123,95,127,150,53,112,154,90,148, 143,37,80,95,154,59,127,124,148,157,17,111,167,133,112,111,16,172,16,125, 147,112,169,170,179,38,103,159,176,191,81,134,136,89,153,113,185,4,199,178, 92,196,192,193,190,176,195,75,153,199,200,207,114,150,89,181,205,71,214,115, 74,210,219,120,222,41,217,218,206,154,157,84,134,211,226,233,68,217,197,107, 227,49,204,123,238,129,224,113,243,102,103,106,251,73,94,182,92,33,85,105, 224,147,123,252,12,242,18,240,79,97,67,131,15,125,140,17,49,110,34,150, 27,61,230,88,228,133,177,35,69,143,12,61,118,4,73,106,89,70,144,26, 42,133,120,251,55,207,162,198,143,20,107,156,228,40,243,162,74,146,43,89, 101,12,201,144,103,207,148,63,103,98,171,120,243,166,79,162,10,147,42,93, 106,48,4,0,33,206,8,104,105,110,116,45,108,105,116,0,33,249,4,1, 0,0,0,0,44,0,0,0,0,38,0,56,0,0,5,254,32,32,142,100, 105,158,104,170,174,108,27,189,240,219,206,192,43,221,248,45,211,168,157,255, 186,8,207,20,1,26,37,194,225,168,120,52,38,135,204,166,83,25,205,9, 174,130,41,175,122,195,122,179,191,167,235,247,253,134,105,220,114,249,60,198, 169,213,57,177,170,250,94,227,228,169,104,29,174,155,233,247,102,125,109,18, 128,129,72,126,110,88,17,2,139,141,139,88,119,136,93,88,3,101,149,144, 130,44,127,87,151,94,157,96,135,146,132,148,151,3,159,145,104,137,164,166, 134,120,43,155,2,166,172,152,161,80,170,178,94,168,84,155,184,160,59,74, 34,122,189,186,192,193,63,178,113,197,37,81,200,196,202,198,55,205,174,202, 76,205,181,207,193,17,6,6,178,3,219,191,216,53,4,4,219,219,5,5, 211,192,47,227,4,5,237,237,224,216,17,228,229,230,233,187,236,239,238,241, 207,243,245,246,225,150,204,203,231,14,221,61,124,236,248,5,140,161,48,96, 13,24,11,15,134,147,33,177,159,16,57,13,73,100,212,120,113,153,196,141, 217,106,20,171,72,241,201,175,146,38,51,99,188,42,41,146,226,195,139,41, 87,238,56,25,243,161,64,23,73,102,138,209,25,82,83,206,154,54,131,10, 157,243,179,101,71,158,48,69,18,189,217,147,38,83,135,80,163,74,157,58, 36,4,0,33,206,7,110,101,119,45,108,105,116,0,33,249,4,1,0,0, 0,0,44,0,0,0,0,38,0,56,0,0,5,254,32,32,142,100,105,158, 104,170,154,81,219,174,112,233,186,71,253,198,164,59,206,117,239,223,49,23, 98,22,65,248,142,61,96,138,134,236,33,158,80,232,79,213,66,70,159,86, 35,246,160,204,25,157,219,166,239,187,141,156,138,223,131,116,28,29,59,109, 102,89,186,13,198,174,183,233,184,72,88,63,134,181,100,53,101,122,104,115, 97,106,134,111,137,92,57,126,105,136,134,129,145,54,59,143,107,144,118,116, 150,88,64,69,117,120,87,151,155,95,132,160,161,167,115,108,164,149,100,168, 161,110,125,140,123,174,109,175,111,130,101,172,168,136,159,169,184,70,9,165, 135,170,170,128,125,193,94,143,142,142,151,188,7,200,172,98,184,203,212,208, 179,202,212,217,188,9,214,45,195,89,77,135,192,157,205,98,229,142,220,122, 0,133,210,177,204,79,193,234,236,237,152,145,82,214,215,244,189,182,207,234, 235,223,210,92,245,72,39,3,141,190,98,135,8,202,193,118,16,91,60,22, 6,15,182,83,200,226,156,196,129,93,146,49,188,136,15,34,64,137,20,81, 120,251,72,47,164,200,121,28,96,31,194,24,73,242,8,183,142,84,70,234, 123,169,18,199,58,62,98,104,102,180,201,163,6,205,120,254,108,66,36,162, 67,168,209,163,72,147,42,77,250,162,232,77,121,80,131,60,189,73,181,147, 153,166,65,151,196,193,74,181,43,87,28,55,184,18,186,186,53,235,153,178, 123,172,146,237,26,4,109,81,177,107,193,142,77,11,53,238,210,187,120,243, 234,221,11,35,4,0,33,206,8,113,117,105,116,45,108,105,116,0,33,249, 4,1,0,0,0,0,44,0,0,0,0,38,0,56,0,0,5,254,32,32, 142,100,105,158,104,170,174,108,235,190,112,44,207,116,109,223,64,164,239,60, 158,239,130,160,80,216,155,233,130,138,161,146,168,139,69,150,80,104,228,117, 20,38,163,203,38,235,185,188,98,135,218,84,21,234,37,131,85,220,104,89, 185,14,155,210,234,53,118,122,130,127,239,231,183,25,31,165,151,236,2,114, 124,68,122,67,130,124,11,11,65,126,35,112,135,119,137,138,139,133,131,66, 137,66,6,153,6,139,140,57,72,120,145,11,155,152,154,163,157,128,119,165, 164,154,2,110,34,17,143,74,165,153,65,179,173,157,57,94,180,81,179,163, 2,172,173,117,186,190,75,189,67,187,184,185,171,196,203,187,89,40,112,192, 197,170,191,213,147,117,146,181,204,199,206,180,190,201,57,161,137,219,188,204, 224,58,226,6,151,169,190,73,224,63,17,145,153,235,214,95,238,43,232,162, 60,79,206,106,193,91,59,72,240,48,20,232,147,130,119,84,210,36,89,24, 200,85,141,35,10,34,70,188,229,163,209,62,135,21,51,106,220,200,177,227, 27,70,24,111,184,9,169,17,161,192,128,175,59,252,104,9,179,15,31,157, 38,83,86,198,252,97,177,133,204,154,52,83,226,68,163,178,103,206,159,36, 79,234,28,202,210,39,192,161,57,97,210,140,57,211,37,202,148,76,119,6, 253,232,177,166,73,145,77,171,78,133,17,2,0,33,206,8,117,110,100,111, 45,108,105,116,0,33,249,4,1,0,0,0,0,44,0,0,0,0,38,0, 56,0,0,5,254,32,32,142,100,105,158,104,170,174,108,235,190,112,44,207, 180,24,221,248,93,159,120,226,255,184,221,232,246,43,2,117,181,136,113,233, 67,32,99,68,230,18,225,148,41,165,76,106,245,117,197,102,183,173,174,55, 251,84,137,199,83,112,234,140,54,82,35,43,229,227,33,157,219,191,240,117, 194,206,239,247,211,121,60,123,126,132,124,128,40,114,133,138,116,69,90,129, 36,137,139,133,141,142,38,145,146,126,148,149,144,131,152,132,63,90,111,37, 151,158,134,77,161,106,164,165,115,160,168,143,68,171,127,167,161,101,87,177, 119,179,180,156,63,177,154,186,187,188,158,190,155,192,193,146,173,174,130,75, 139,195,162,202,123,203,184,205,106,163,62,166,99,168,206,136,214,215,82,217, 101,60,182,178,105,180,143,122,198,140,110,174,230,107,17,84,193,228,196,46, 55,239,95,229,51,244,90,205,224,48,56,217,247,66,0,248,91,23,112,84, 142,32,5,119,240,75,8,137,29,195,33,14,31,10,140,104,16,162,13,56, 8,47,78,132,232,16,99,30,29,30,61,106,68,8,18,163,165,143,129,42, 144,168,68,185,81,228,201,141,22,91,162,116,153,49,230,147,149,26,97,222, 100,135,147,102,200,145,50,17,149,204,169,115,232,69,138,18,147,42,93,154, 48,4,0,59,}; const Gif_Record buttons_gif = { buttons_gif_data, 3624 }; static const unsigned char digits_gif_data[] = { 71,73,70,56,57,97,36,0,38,0,243,0,0,255,0,0,85,26,139,218, 112,214,210,105,30,112,128,144,255,165,0,255,255,0,0,205,0,205,0,0, 165,42,42,106,90,205,255,215,0,139,35,35,0,100,0,25,25,112,0,0, 0,33,249,4,1,0,0,4,0,44,0,0,0,0,36,0,38,0,0,3, 173,72,186,220,254,48,202,73,171,189,11,232,141,169,14,96,168,117,207,23, 8,104,10,142,164,2,128,104,24,198,1,208,190,244,160,239,176,80,119,56, 144,78,38,28,192,126,151,160,177,182,49,25,125,54,139,146,233,248,60,145, 30,33,182,116,140,102,141,222,72,48,44,14,128,165,167,45,228,117,174,140, 179,234,201,43,94,93,97,230,100,46,189,188,103,224,239,118,114,129,104,125, 25,131,110,135,107,105,121,138,109,18,111,136,142,143,139,95,133,126,93,147, 102,150,134,87,44,126,83,140,141,105,76,77,71,146,149,39,62,68,57,155, 13,108,75,41,42,102,167,132,67,68,182,161,110,115,59,60,84,45,159,68, 190,191,85,77,185,195,199,200,201,202,203,204,36,9,0,33,249,4,1,0, 0,2,0,44,0,0,0,0,36,0,38,0,0,3,141,40,186,220,254,48, 202,73,43,184,53,179,27,2,208,25,215,121,224,36,118,6,89,62,103,80, 4,233,183,110,192,232,22,111,60,43,39,254,186,48,85,73,228,179,1,117, 171,154,241,194,201,9,65,74,166,76,80,115,78,161,24,71,53,120,221,53, 182,72,175,246,248,20,47,192,101,51,149,220,85,163,219,230,183,250,203,158, 111,234,118,30,62,47,207,175,173,126,127,92,129,125,51,82,135,108,135,76, 22,70,54,78,141,29,112,99,62,148,56,48,6,152,153,152,105,44,144,158, 141,146,95,138,163,164,161,129,167,168,169,170,171,172,115,9,0,33,249,4, 1,0,0,2,0,44,0,0,0,0,36,0,38,0,0,4,162,80,200,73, 171,189,56,235,205,187,247,64,40,142,192,135,133,65,170,174,65,104,82,64, 122,204,52,189,150,111,60,179,171,221,230,43,132,112,40,84,29,126,159,88, 170,200,11,48,143,184,78,140,217,34,41,17,1,104,242,230,170,160,176,72, 105,170,155,153,134,57,34,49,54,250,218,40,217,237,178,243,28,183,124,233, 117,216,18,159,23,220,249,121,87,85,125,118,50,128,117,40,71,135,113,74, 80,112,132,141,139,140,134,143,144,148,104,100,110,70,85,86,86,146,19,102, 138,77,77,149,133,115,53,168,169,159,18,102,163,174,165,133,68,178,179,69, 176,166,174,163,182,94,157,188,36,132,191,192,193,194,195,196,197,29,17,0, 33,249,4,1,0,0,1,0,44,0,0,0,0,36,0,38,0,0,4,188, 48,200,73,171,189,56,235,205,187,255,1,32,142,36,136,137,73,170,174,162, 73,1,170,34,207,74,186,36,128,27,166,242,26,219,56,19,44,81,83,145, 120,192,220,7,86,188,41,37,195,154,115,137,156,86,152,73,15,246,22,180, 108,187,156,239,243,74,76,88,195,190,241,171,124,222,144,70,39,54,88,231, 149,207,233,208,168,249,174,27,253,218,120,67,68,69,124,116,48,11,10,92, 133,134,43,137,53,106,129,126,42,128,120,19,88,101,144,149,59,77,139,129, 156,153,149,151,148,94,111,160,155,89,110,105,25,162,157,150,114,166,172,166, 174,82,41,153,122,123,178,80,85,133,177,90,101,184,100,191,163,23,183,181, 71,194,181,84,131,62,63,123,173,196,49,52,51,64,207,39,130,204,70,185, 110,165,111,154,222,223,28,17,0,33,249,4,1,0,0,1,0,44,0,0, 0,0,36,0,38,0,0,4,163,48,200,73,171,189,56,235,205,123,5,128, 39,82,0,19,142,98,105,162,158,186,178,155,42,188,112,38,211,181,229,206, 103,254,49,140,2,131,231,251,1,133,196,226,196,133,196,249,84,165,102,239, 9,4,5,135,78,24,52,16,197,78,107,165,83,55,153,219,114,175,100,109, 117,137,206,166,214,108,105,217,57,118,119,204,113,175,58,91,255,222,225,63, 114,40,97,24,125,131,128,129,122,111,118,103,130,127,38,32,145,146,86,82, 147,26,46,64,153,154,153,77,155,126,108,65,5,162,163,164,164,67,2,168, 168,140,152,155,173,109,158,54,147,178,146,109,178,74,134,74,36,181,185,186, 142,188,184,188,103,154,159,79,182,193,44,17,0,33,249,4,1,0,0,1, 0,44,0,0,0,0,36,0,38,0,0,4,156,48,200,73,171,189,56,235, 205,187,247,64,40,142,100,248,81,0,163,174,108,11,156,83,58,204,116,77, 51,47,28,164,109,191,230,176,148,98,72,44,14,113,186,157,111,9,60,165, 74,80,147,238,153,4,33,171,28,42,118,243,140,54,147,188,165,74,10,102, 216,206,227,106,88,60,187,6,85,198,162,106,224,118,50,20,98,188,185,110, 197,65,225,123,95,29,34,24,60,120,116,130,91,74,135,124,138,18,60,136, 142,22,144,141,142,66,145,146,49,119,152,153,143,115,149,91,151,160,88,66, 129,157,139,166,157,97,156,150,50,109,137,83,33,159,105,106,35,61,132,161, 46,184,146,36,167,190,191,23,17,0,33,249,4,1,0,0,1,0,44,0, 0,0,0,36,0,38,0,0,4,199,48,200,73,107,24,56,99,203,123,197, 77,40,134,155,103,74,96,83,20,163,56,156,94,170,146,218,208,188,176,101, 55,192,92,82,191,28,42,212,99,225,132,167,93,241,134,132,41,125,151,90, 16,105,91,190,118,173,219,212,244,52,62,137,61,151,176,26,98,17,105,93, 146,243,108,230,105,39,160,37,147,203,62,31,129,110,243,93,231,158,245,246, 120,114,128,67,125,122,73,121,115,124,136,106,116,130,28,105,137,141,80,138, 142,107,86,143,117,145,49,136,131,144,131,124,151,148,101,154,29,100,70,165, 117,159,31,156,168,172,150,147,162,167,107,51,164,112,169,135,163,170,23,183, 116,180,186,187,174,152,190,57,105,157,163,181,173,97,111,40,59,134,77,74, 202,25,101,206,77,81,34,0,202,43,98,213,64,50,35,25,220,165,82,225, 228,229,230,231,232,233,234,66,17,0,33,249,4,1,0,0,1,0,44,0, 0,0,0,36,0,38,0,0,4,118,48,200,73,171,189,56,235,205,187,223, 64,40,142,100,41,114,128,163,174,108,235,58,0,234,12,116,109,223,54,44, 191,124,27,203,141,160,112,72,28,234,64,189,100,227,136,84,153,158,171,31, 104,212,73,49,63,30,171,20,187,219,114,155,222,111,70,43,238,150,205,231, 177,51,173,33,179,49,238,119,37,46,167,208,235,129,59,94,95,231,191,253, 127,107,120,19,128,108,133,105,135,101,137,138,130,131,121,141,142,139,95,86, 87,123,144,131,84,142,111,17,0,33,249,4,1,0,0,1,0,44,1,0, 0,0,35,0,38,0,0,4,177,48,200,73,39,184,248,214,205,249,101,96, 8,106,93,73,1,224,49,102,163,105,162,140,202,0,21,76,187,94,220,110, 54,94,235,134,89,78,232,179,232,136,195,91,17,165,50,40,121,187,37,16, 249,163,226,152,140,224,243,20,149,54,173,129,94,209,40,211,86,183,94,144, 89,34,30,115,203,194,182,251,173,158,205,208,115,246,49,8,206,135,97,112, 125,99,31,118,123,93,110,48,113,41,117,130,47,33,74,128,140,120,37,137, 91,145,89,135,142,125,151,107,87,153,70,83,141,92,162,88,152,147,103,46, 88,157,154,167,122,95,173,160,164,83,176,160,167,170,162,85,130,137,171,158, 153,187,184,67,119,44,152,192,29,132,34,34,36,126,108,25,205,203,207,208, 209,210,211,212,213,17,0,33,249,4,1,0,0,1,0,44,0,0,0,0, 36,0,38,0,0,4,197,48,200,73,171,189,56,235,205,49,248,32,208,117, 96,98,158,9,56,122,231,113,156,203,114,126,43,5,152,174,89,154,177,94, 7,183,196,43,37,146,124,96,190,81,112,88,172,220,94,178,20,9,151,188, 60,19,209,38,75,88,101,65,187,150,43,56,204,205,102,150,99,107,57,13, 92,107,207,107,169,250,251,246,98,217,87,89,125,206,75,231,229,27,104,102, 100,116,83,113,123,127,123,100,135,124,122,134,95,128,54,84,142,26,65,140, 141,145,106,92,119,153,19,130,157,158,119,67,148,91,133,100,81,144,138,161, 110,77,71,81,151,149,147,58,71,156,155,164,129,40,61,125,68,176,28,59, 40,62,137,63,70,33,42,127,160,195,70,189,201,146,169,195,52,78,199,170, 177,197,104,179,204,150,40,57,68,204,196,192,51,211,53,213,208,221,229,230, 231,232,23,17,0,59,}; const Gif_Record digits_gif = { digits_gif_data, 1946 }; xmahjongg-3.7/src/tileset.cc0000664000076400007640000000466207547625047013077 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "tileset.hh" #include Tileset::Tileset(short ntiles, short npictures, short nmatches) : _ntiles(ntiles), _npictures(npictures), _nmatches(nmatches), _pictures(ntiles, -1), _matches(ntiles, -1) { } Tileset::Tileset(const char *name) { if (strcmp(name, "ivory") == 0) initialize_ivory(); else assert(0 && "bad Tileset name"); } /***** * THE IVORY TILE SET ORGANIZATION * * There are 144 tiles. * * Tile pictures are as follows: * 0-3 seasons (spring, summer, autumn, winter) * 4-7 plants (bamboo, orchid, plum, chrysanthemum) * 8-10 dragons (green, white, red) * 11-14 winds (north, south, east, west) * 15-23 circles (1-9) * 24-32 bamboo (1-9) * 33-41 characters (1-9) * * Tile matches are as follows: * 0 seasons * 1 plants * 2-4 dragons (green, white, red) * 5-8 winds (north, south, east, west) * 9-17 circles (1-9) * 18-26 bamboo (1-9) * 27-35 characters (1-9) **/ void Tileset::initialize_ivory() { // Set up the _pictures and _matches arrays as required according to the // plan laid out above. _ntiles = IVORY_NTILES; _npictures = IVORY_NPICTURES; _nmatches = IVORY_NMATCHES; _pictures.assign(_ntiles, -1); _matches.assign(_ntiles, -1); // Seasons and flowers: one match per 4 tiles, one picture per tile. for (int t = 0; t < 8; t++) { _pictures[t] = t; _matches[t] = t / 4; } // Everything else: one match and one picture per 4 tiles. int cur_picture = 8; int cur_match = 2; for (int t = 8; t < _ntiles; t += 4) { for (int j = 0; j < 4; j++) { _pictures[t+j] = cur_picture; _matches[t+j] = cur_match; } cur_picture++; cur_match++; } } static const char *ivory_picture_names[] = { "season-1", "season-2", "season-3", "season-4", "flower-1", "flower-2", "flower-3", "flower-4", "dragon-1", "dragon-2", "dragon-3", "wind-1", "wind-2", "wind-3", "wind-4", "dot-1", "dot-2", "dot-3", "dot-4", "dot-5", "dot-6", "dot-7", "dot-8", "dot-9", "bamboo-1", "bamboo-2", "bamboo-3", "bamboo-4", "bamboo-5", "bamboo-6", "bamboo-7", "bamboo-8", "bamboo-9", "character-1", "character-2", "character-3","character-4", "character-5", "character-6", "character-7", "character-8","character-9", }; const char * Tileset::ivory_picture_name(int p) { assert(p >= 0 && p < IVORY_NPICTURES); return ivory_picture_names[p]; } xmahjongg-3.7/src/xmj3ts.cc0000664000076400007640000002036607547625050012647 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "xmj3ts.hh" #include "tile.hh" #include "swgeneral.hh" #include #define NPICTURES (Tileset::IVORY_NPICTURES) Xmj3Tileset::Xmj3Tileset(Gif_Stream *gfs, Gif_XContext *gifx) : Tileset("ivory"), _gfs(gfs), _gifx(gifx), _colormap(0), _image_error(ieNone) { initialize_images(); if (check()) { initialize(); _gfs->refcount++; } else _gfs = 0; } Xmj3Tileset::~Xmj3Tileset() { Gif_DeleteColormap(_colormap); Display *display = _gifx->display; if (_gfs && _images.size()) for (int i = 0; i < Gif_ImageCount(_gfs); i++) { if (_images[i]) XFreePixmap(display, _images[i]); if (_masks[i]) XFreePixmap(display, _masks[i]); } Gif_DeleteStream(_gfs); } /***** * code to create & use the map of tile names to picture numbers **/ static int nsearch_pictures; static const char **search_picture_names; static int *search_picture_numbers; static int sort_picture_names(const void *v1, const void *v2) { int i1 = *(int *)v1, i2 = *(int *)v2; return strcmp(search_picture_names[i1], search_picture_names[i2]); } #define RANGE_ALL (NPICTURES + 7) static const char *special_picture_names[] = { "season", "flower", "dragon", "wind", "dot", "bamboo", "character", "all" }; static void initialize_picture_names() { if (search_picture_names) return; assert(Tileset::IVORY_NPICTURES == NPICTURES); int npictures = NPICTURES + 8; search_picture_names = new const char *[npictures]; search_picture_numbers = new int[npictures]; for (int i = 0; i < NPICTURES; i++) { search_picture_names[i] = Tileset::ivory_picture_name(i); search_picture_numbers[i] = i; } for (int i = 0; i < 8; i++) { int j = NPICTURES + i; search_picture_names[j] = special_picture_names[i]; search_picture_numbers[j] = j; } nsearch_pictures = npictures; qsort(search_picture_numbers, npictures, sizeof(int), &sort_picture_names); const char **x = search_picture_names; search_picture_names = new const char *[npictures]; for (int i = 0; i < npictures; i++) search_picture_names[i] = x[search_picture_numbers[i]]; delete[] x; } static int find_picture_name(const char *name) { if (name == 0) return -1; int l = 0, r = nsearch_pictures - 1; while (l <= r) { int m = (l + r) / 2; int comparison = strcmp(name, search_picture_names[m]); if (comparison < 0) r = m - 1; else if (comparison > 0) l = m + 1; else return search_picture_numbers[m]; } return -1; } /******/ void Xmj3Tileset::map_one_image(const char *name_rest, int image_index, ImageType which, Vector &genericity) { if (*name_rest == '-' || *name_rest == ' ' || *name_rest == '.') name_rest++; int range; if (*name_rest == 0) range = RANGE_ALL; else range = find_picture_name(name_rest); if (range < 0) return; int left, right; switch (range) { case NPICTURES: /* seasons */ left = 0; right = 3; break; case NPICTURES+1: /* flowers */ left = 4; right = 7; break; case NPICTURES+2: /* dragons */ left = 8; right = 10; break; case NPICTURES+3: /* winds */ left = 11; right = 14; break; case NPICTURES+4: /* dots */ left = 15; right = 23; break; case NPICTURES+5: /* bamboos */ left = 24; right = 32; break; case NPICTURES+6: /* characters */ left = 33; right = 41; break; case RANGE_ALL: left = 0; right = 41; break; default: left = right = range; break; } Vector *references = 0; if (which == itFace) references = &_face_ref; else if (which == itBase) references = &_base_ref; else if (which == itSelected) references = &_selected_ref; else if (which == itObscured) references = &_obscured_ref; short new_genericity = right - left; genericity[image_index] = new_genericity; for (int i = left; i <= right; i++) { short old_image = (*references)[i]; if (old_image == -1 || genericity[old_image] > new_genericity) (*references)[i] = image_index; } } void Xmj3Tileset::initialize_images() { if (_gfs == 0) { _image_error = ieBadGif; return; } initialize_picture_names(); _base_ref.assign(NPICTURES, -1); _selected_ref.assign(NPICTURES, -1); _obscured_ref.assign(NPICTURES, -1); _face_ref.assign(NPICTURES, -1); Vector genericity(Gif_ImageCount(_gfs), NPICTURES + 1); for (int imagei = 0; imagei < Gif_ImageCount(_gfs); imagei++) { Gif_Image *gfi = Gif_GetImage(_gfs, imagei); const char *name = gfi->identifier; if (!name || name[0] == 0) ; else if (strncmp(name, "base", 4) == 0) map_one_image(name + 4, imagei, itBase, genericity); else if (strncmp(name, "selected", 8) == 0) map_one_image(name + 8, imagei, itSelected, genericity); else if (strncmp(name, "obscured", 8) == 0) map_one_image(name + 8, imagei, itObscured, genericity); else map_one_image(name, imagei, itFace, genericity); } _images.assign(Gif_ImageCount(_gfs), None); _masks.assign(Gif_ImageCount(_gfs), None); check_images(); } void Xmj3Tileset::check_images() { _image_error = ieNone; // All four kinds of image must exist for every tile for (int i = 0; i < NPICTURES; i++) if (_base_ref[i] < 0 || _selected_ref[i] < 0 || _obscured_ref[i] < 0) { _image_error = ieNoBase; return; } // Check the sizes of all the images // Assume it's broken. _image_error = ieBadSize; Gif_Image *gfi = Gif_GetImage(_gfs, _obscured_ref[0]); int w = gfi->width; int h = gfi->height; for (int i = 0; i < NPICTURES; i++) { Gif_Image *gfi = Gif_GetImage(_gfs, _base_ref[i]); if (gfi->width != w || gfi->height != h) return; gfi = Gif_GetImage(_gfs, _selected_ref[i]); if (gfi->width != w || gfi->height != h) return; gfi = Gif_GetImage(_gfs, _obscured_ref[i]); if (gfi->width != w || gfi->height != h) return; gfi = Gif_GetImage(_gfs, _face_ref[i]); if (gfi->width > w || gfi->height > h) return; } // If we get here, all is hunky-dory! _image_error = ieNone; } bool Xmj3Tileset::check() const { // Stream must exist & have global colormap if (!_gfs->global || _image_error != ieNone) return false; // OK return true; } void Xmj3Tileset::initialize() { _colormap = Gif_CopyColormap(_gfs->global); int border = 4, shadow = 1; for (Gif_Extension *gfex = _gfs->extensions; gfex; gfex = gfex->next) if (gfex->application && strcmp(gfex->application, "xmahjongg") == 0) { sscanf((char *)gfex->data, "border=%u", &border); sscanf((char *)gfex->data, "shadow=%d", &shadow); } _xborder = _yborder = border; _shadow = shadow; Gif_Image *gfi = Gif_GetImage(_gfs, _base_ref[0]); _width = gfi->width - _xborder; _height = gfi->height - _yborder; } void Xmj3Tileset::draw(SwDrawable *drawable, short x, short y, short base, short face) { if (base >= 0) { if (!_images[base]) { Gif_Image *gfi = Gif_GetImage(_gfs, base); _images[base] = Gif_XImageColormap(_gifx, _gfs, _colormap, gfi); _masks[base] = Gif_XMask(_gifx, _gfs, gfi); } drawable->draw_image(_images[base], _masks[base], _width + _xborder, _height + _yborder, x, y); } if (face >= 0) { Gif_Image *facei = Gif_GetImage(_gfs, face); if (!_images[face]) { _images[face] = Gif_XImageColormap(_gifx, _gfs, _colormap, facei); _masks[face] = Gif_XMask(_gifx, _gfs, facei); } int dx = (_shadow & 1 ? _xborder : 0) + facei->left; int dy = (_shadow & 2 ? _yborder : 0) + facei->top; drawable->draw_image(_images[face], _masks[face], facei->width, facei->height, x + dx, y + dy); } } void Xmj3Tileset::draw_normal(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, _base_ref[which], _face_ref[which]); } void Xmj3Tileset::draw_lit(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, _selected_ref[which], _face_ref[which]); } void Xmj3Tileset::draw_obscured(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, _obscured_ref[which], -1); } xmahjongg-3.7/src/matches.hh0000664000076400007640000000104406721336314013040 00000000000000#ifndef MATCHES_HH #define MATCHES_HH #include "swwidget.hh" #include "game.hh" class MatchCount: public SwWidget, public GameHooks { Game *_game; Pixmap _one_image; Pixmap _one_mask; int _one_width; int _one_height; int _count; void draw(int, bool fast_display); public: MatchCount(SwWindow *, Gif_Stream *, const char *); void set_game(Game *); void change(int m) { draw(m, true); } void draw() { draw(_count, false); } void start_hook(Game *); void move_made_hook(Game *); }; #endif xmahjongg-3.7/src/solvable.hh0000664000076400007640000000126207540426312013223 00000000000000#ifndef SOLVABLE_HH #define SOLVABLE_HH #include "game.hh" class SolvableMaker { Game *_game; Tileset *_tileset; Tile *_null_tile; const Vector &_tiles; Vector _solution; Tile *grid(int r, int c, int l) const { return _game->grid(r, c, l); } void print_level(int) const; void block_row(Tile *, bool); int blank_distance(Tile *, bool, bool = true) const; void unblock_tile(Tile *); void unblock_sides(Tile *); void choose(Tile *); void init_tiles(); Tile *pick(int); bool try_assign(int *); public: SolvableMaker(Game *); bool assign(uint32_t); const Vector &solution() const { return _solution; } }; #endif xmahjongg-3.7/src/alarm.hh0000664000076400007640000000137306721336312012513 00000000000000#ifndef ALARM_HH #define ALARM_HH #include "moment.hh" #include class Alarm; class AlarmHooks { public: virtual ~AlarmHooks() { } virtual void alarm(); virtual void alarm(Alarm *); }; class Alarm { bool _dead; bool _scheduled; Moment _moment; AlarmHooks *_hook; Alarm *_next; static Alarm *alarms; void unschedule(); public: Alarm() : _scheduled(0), _hook(0) { } Alarm(AlarmHooks *h) : _scheduled(0), _hook(h) { } ~Alarm() { if (_scheduled) unschedule(); } const Moment &moment() const { return _moment; } bool dead() const { return _dead || !_scheduled; } void schedule(const Moment &); void kill() { _dead = true; } static void x_wait(Display *); }; #endif xmahjongg-3.7/src/button.hh0000664000076400007640000000170707317500501012726 00000000000000#ifndef BUTTON_HH #define BUTTON_HH #include "panel.hh" #include "alarm.hh" #include "swwidget.hh" class Button: public AlarmHooks, public SwWidget { Gif_XContext *_gifx; Pixmap _normal; Pixmap _normal_mask; Pixmap _lit; Pixmap _lit_mask; int _state; // 0 off, 1 lit, 2 flashing Alarm _flash_alarm; void change_state(int); bool handle_track_event(XEvent *); public: Button(SwWindow *); bool set_normal(Gif_Stream *, const char *); bool set_lit(Gif_Stream *, const char *); void draw(); bool within(int, int) const; bool track(Time); void flash(); void alarm(); }; inline void Button::draw() { if (_state > 0) draw_image(_lit, _lit_mask, width(), height(), 0, 0); else draw_image(_normal, _normal_mask, width(), height(), 0, 0); } inline bool Button::within(int xval, int yval) const { return xval >= x() && yval >= y() && xval < x() + width() && yval < y() + height(); } #endif xmahjongg-3.7/src/hint.hh0000664000076400007640000000157107615267744012400 00000000000000#ifndef HINT_HH #define HINT_HH #include "alarm.hh" #include #include "game.hh" class Board; class Tile; class Hint: public AlarmHooks, public GameHooks { Board *_board; Game *_game; bool _on; int _which; int _skip_which; bool _state; Alarm _alarm; Vector _tiles; int _nchoices; int *_choices; static Moment flash_on_delay; static Moment flash_off_delay; void show(bool state); void get_choices(); bool get_tiles(int); public: Hint(Board *); ~Hint(); bool on() const { return _on; } bool find(int match); void next(); void turn_off(); void alarm(); const Vector &tiles() const { return _tiles; } int ntiles() const { return _tiles.size(); } void start_hook(Game *); void add_tile_hook(Game *, Tile *); void remove_tile_hook(Game *, Tile *); }; #endif xmahjongg-3.7/src/alarm.cc0000664000076400007640000000257206721340332012500 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "alarm.hh" void AlarmHooks::alarm() { } void AlarmHooks::alarm(Alarm *) { alarm(); } Alarm *Alarm::alarms = 0; void Alarm::schedule(const Moment &m) { if (_scheduled) unschedule(); _moment = m; Alarm *prev = 0, *a = alarms; while (a && m >= a->_moment) { prev = a; a = a->_next; } if (prev) prev->_next = this; else alarms = this; _next = a; _scheduled = true; _dead = false; } void Alarm::unschedule() { if (alarms == this) alarms = _next; else { Alarm *prev; for (prev = alarms; prev->_next != this; prev = prev->_next) ; prev->_next = _next; } _scheduled = false; } void Alarm::x_wait(Display *display) { fd_set fds; int x_fd = ConnectionNumber(display); FD_ZERO(&fds); while (1) { Moment time = Moment::now(); while (alarms && time >= alarms->_moment) { Alarm *a = alarms; alarms = a->_next; a->_scheduled = false; if (!a->_dead) a->_hook->alarm(a); } if (XPending(display)) return; FD_SET(x_fd, &fds); int selectval; if (alarms) { struct timeval timeout = alarms->_moment - time; selectval = select(x_fd + 1, &fds, 0, 0, &timeout); } else selectval = select(x_fd + 1, &fds, 0, 0, 0); if (selectval > 0 && FD_ISSET(x_fd, &fds)) return; } } xmahjongg-3.7/src/panel.cc0000664000076400007640000002523107540426312012503 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "matches.hh" #include "panel.hh" #include "tile.hh" #include "game.hh" #include "button.hh" #include "board.hh" #include "hint.hh" #include "solution.hh" #include "traverse.hh" #include "counter.hh" #include extern bool solvable_boards; extern Moment last_new_board; Panel::Panel(Display *d, Window w) : SwClippedWindow(d, w), _visible(false), _window_width(-1), _window_height(-1), _board(0), _background(None), _tile_count(0), _match_count(0), _solution(0), _traversal(0), _need_redraw(false) { } void Panel::scan_mark(int original_x, int original_y) { _scan_mark_x = original_x; _scan_mark_y = original_y; } void Panel::scan_dragto(int x, int y) { int dx = x - _scan_mark_x; int dy = y - _scan_mark_y; _board->move(_board->x() + dx, _board->y() + dy); _scan_mark_x = x; _scan_mark_y = y; } void Panel::set_board(Board *b) { _board = b; _board->set_visible(); if (_background) _board->set_background(_background); if (_traversal) delete _traversal; _traversal = new Traversal(_board); } void Panel::set_background(Pixmap background) { _background = background; XSetWindowBackgroundPixmap(display(), window(), _background); _board->set_background(_background); } void Panel::set_match_count(MatchCount *mc) { _match_count = mc; _match_count->set_position(100, 12); } void Panel::set_tile_count(FancyCounter *tc) { _tile_count = tc; _tile_count->set_position(10, 12); } void Panel::set_solution(SolutionDisplay *sol) { if (_solution) delete _solution; _solution = sol; } void Panel::draw_controls() { new_but->draw(); undo_but->draw(); quit_but->draw(); hint_but->draw(); clean_but->draw(); } void Panel::resize(int x, int y) { if (_window_width == x && _window_height == y) return; _window_width = x; _window_height = y; int quit_x = _window_width - quit_but->width() - 10; int new_x = quit_x - new_but->width() - 10; int undo_x = new_x - undo_but->width() - 10; int clean_x = undo_x - clean_but->width() - 10; int hint_x = clean_x - hint_but->width() - 10; quit_but->set_position(quit_x, 10); new_but->set_position(new_x, 10); undo_but->set_position(undo_x, 10); hint_but->set_position(hint_x, 10); clean_but->set_position(clean_x, 10); _board->set_size(_window_width, _window_height - _board->y_pos()); _board->center_layout(); // find topmost tile int topmost_tile_y = _board->topmost_tile_y(); _match_count->set_position(_tile_count->x() + _tile_count->width() + 5, 12); _match_count->set_size(hint_x - 10 - _match_count->x(), topmost_tile_y - 12); } void Panel::invalidate(int x, int y, int width, int height) { clear_area(x, y, width, height); if (!_need_redraw) { _redraw_left = x; _redraw_top = y; _redraw_right = x + width; _redraw_bottom = y + height; } else { if (x < _redraw_left) _redraw_left = x; if (y < _redraw_top) _redraw_top = y; if (x + width > _redraw_right) _redraw_right = x + width; if (y + height > _redraw_bottom) _redraw_bottom = y + height; } _need_redraw = true; } void Panel::redraw_all() { _redraw_left = _redraw_top = 0; _redraw_right = _window_width; _redraw_bottom = _window_height; _need_redraw = true; redraw(); } void Panel::redraw() { if (!_need_redraw || !_visible) return; _redraw_left -= 2; _redraw_top -= 2; _redraw_right += 2; _redraw_bottom += 2; if (_redraw_left < 0) _redraw_left = 0; if (_redraw_top < 0) _redraw_top = 0; if (_redraw_right > _window_width) _redraw_right = _window_width; if (_redraw_bottom > _window_height) _redraw_bottom = _window_height; intersect_clip(_redraw_left, _redraw_top, _redraw_right - _redraw_left, _redraw_bottom - _redraw_top); _tile_count->draw(); _match_count->draw(); short row1, col1, row2, col2; _board->unposition(_redraw_left, _redraw_top, &row1, &col1); _board->unposition(_redraw_right, _redraw_bottom, &row2, &col2); row1 -= 2, col1 -= 2, row2++, col2++; if (col1 < 0) col1 = 0; if (row1 < 0) row1 = 0; if (col2 >= TILE_COLS - 1) col2 = TILE_COLS - 2; if (row2 >= TILE_ROWS - 1) row2 = TILE_ROWS - 2; _board->draw_area(row1, col1, row2, col2); draw_controls(); unclip(); _need_redraw = false; } int butler(Game *g) { int nmatch = g->nmatches(); int i; for (i = 0; i < nmatch; i++) if (g->left_count(i) > 0 && g->left_count(i) == g->free_count(i)) { Vector gg; const Vector &t = g->tiles(); for (int j = 0; j < t.size(); j++) if (t[j]->real() && t[j]->open() && t[j]->match() == i) gg.push_back( t[j] ); g->move(gg[0], gg[1], false); if (gg.size() > 2) g->move(gg[2], gg[3], false); return butler(g) + 1; } return 0; } void Panel::tile_command(Game *g, Tile *t) { /* Turn off transients */ if (_solution) _solution->turn_off(); _board->hint()->turn_off(); _traversal->turn_off(); Tile *pend = _board->selected(); if (!t->open()) { _board->bell(); return; } if (!pend) _board->select(t); else if (pend == t) _board->deselect(); else if (pend->match() == t->match()) { _board->deselect(); g->move(pend, t); } else { _board->deselect(); _board->select(t); } _traversal->set_cursor(t); } void Panel::command(Game *g, Command com, Button *button, bool keyboard, Time when) { if (com != comHint) _board->hint()->turn_off(); if (com != comSolve && com != comNone && _solution) _solution->turn_off(); if (com != comNone && com != comHint) _board->deselect(); _traversal->turn_off(); if (keyboard) { if (button) button->flash(); } else { if (button && !button->track(when)) return; } switch (com) { case comNew: { // randomize next board number by factoring in time between news // (don't want the next board after # K0 to always be # K1) int diff = (Moment::now() - last_new_board).usec() / 100; last_new_board = Moment::now(); for (int i = 0; i < diff % 16; i++) zrand(); g->start(zrand(), solvable_boards); break; } case comQuit: exit(0); break; case comHint: _board->hint()->next(); break; case comClean: if (butler(g)) g->mark_user_move(); break; case comUndo: g->undo(); break; case comRedo: g->redo(); break; case comSolve: if (_solution) { if (_solution->on()) _solution->change_speed(true); else _solution->turn_on(this); } break; case comDeselect: // already deselected above break; case comCheckSolve: case comNone: // nothing to do break; } } void Panel::traversal_take_command(Game *g, bool take) { Hint *hint = _board->hint(); Tile *cursor = _traversal->cursor(); Tile *selected = _board->selected(); if (!cursor && !hint->on()) bell(); else if (!cursor) _traversal->with_hint(hint, take); else if (!selected) _board->select(cursor); else if (selected == cursor) _board->deselect(); else if (selected->match() == cursor->match()) { _board->deselect(); g->move(selected, cursor); } else { _board->deselect(); _board->select(cursor); } } void Panel::traversal_command(Game *g, TraversalCommand command) { if (_solution) _solution->turn_off(); switch (command) { case comTravLeft: case comTravRight: _board->hint()->turn_off(); _traversal->next_horiz(command == comTravRight); break; case comTravUp: case comTravDown: _board->hint()->turn_off(); _traversal->next_vert(command == comTravDown); break; case comTravTake: case comTravAnchor: traversal_take_command(g, command == comTravTake); break; } } void Panel::click(Game *g, int x, int y, unsigned state, Time when) { if (Tile *t = _board->find_tile(x, y)) tile_command(g, t); else if (hint_but->within(x, y)) command(g, comHint, hint_but, false, when); else if (undo_but->within(x, y)) command(g, state & ShiftMask ? comRedo : comUndo, undo_but, false, when); else if (new_but->within(x, y)) command(g, comNew, new_but, false, when); else if (quit_but->within(x, y)) command(g, comQuit, quit_but, false, when); else if (clean_but->within(x, y)) command(g, comClean, clean_but, false, when); else command(g, comNone, 0, false, when); } void Panel::key_press(Game *g, KeySym key, unsigned state) { if (key == XK_Escape) command(g, comDeselect, 0, true); else if (key == XK_H || key == XK_h) command(g, comHint, hint_but, true); else if (key == XK_R || key == XK_r || ((key == XK_U || key == XK_u) && (state & ShiftMask))) command(g, comRedo, undo_but, true); else if (key == XK_U || key == XK_u) command(g, comUndo, undo_but, true); else if ((key == XK_C || key == XK_c) && !(state & ControlMask)) command(g, comClean, clean_but, true); else if (key == XK_Q || key == XK_q) command(g, comQuit, quit_but, true); else if ((key == XK_S || key == XK_s) && !(state & ControlMask)) command(g, comSolve, 0, true); else if (key == XK_X || key == XK_x) command(g, comCheckSolve, 0, true); else if (key == XK_N || key == XK_n) command(g, comNew, new_but, true); else if (key == XK_Left) traversal_command(g, comTravLeft); else if (key == XK_Right) traversal_command(g, comTravRight); else if (key == XK_Up) traversal_command(g, comTravUp); else if (key == XK_Down) traversal_command(g, comTravDown); else if (key == XK_space) traversal_command(g, comTravAnchor); else if (key == XK_Return || key == XK_KP_Enter) traversal_command(g, comTravTake); } void Panel::handle(Game *game, XEvent *e) { switch (e->type) { case Expose: invalidate(e->xexpose.x, e->xexpose.y, e->xexpose.width, e->xexpose.height); break; case ButtonPress: if (e->xbutton.button == 1) click(game, e->xbutton.x, e->xbutton.y, e->xbutton.state, e->xbutton.time); /*else if (e->xbutton.button == 2) scan_mark(e->xbutton.x, e->xbutton.y);*/ break; case MotionNotify: /*if (e->xmotion.state & Button2Mask) scan_dragto(e->xmotion.x, e->xmotion.y);*/ break; case KeyPress: key_press(game, XKeycodeToKeysym(display(), e->xkey.keycode, 0), e->xkey.state); break; case ConfigureNotify: resize(e->xconfigure.width, e->xconfigure.height); break; case MapNotify: if (_window_width < 0) { XWindowAttributes attr; XGetWindowAttributes(display(), window(), &attr); resize(attr.width, attr.height); } _visible = true; break; case UnmapNotify: _visible = false; break; } } xmahjongg-3.7/src/tile.cc0000664000076400007640000000043506721340334012337 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "tile.hh" Tile::Tile() : _real(false), _mark_val(0), _coverage(0), _blocked(0) { } Tile::Tile(short r, short c, short l) : _real(true), _mark_val(0), _row(r), _col(c), _lev(l), _coverage(0), _blocked(0) { } xmahjongg-3.7/src/board.hh0000664000076400007640000000576307034720762012521 00000000000000#ifndef BOARD_HH #define BOARD_HH #include "game.hh" #include "panel.hh" #include "swwidget.hh" #include "tile.hh" class Hint; class Board: public GameHooks, public SwWidget { Panel *_panel; Game *_game; Tileset *_tileset; bool _redraw_live; short _layout_x; short _layout_y; short _topmost_tile; short _botmost_tile; short _leftmost_tile; short _rightmost_tile; short _tile_width; short _tile_height; short _tile_xborder; short _tile_yborder; short _tile_shadow; Vector _tile_flags; bool _buffering; Pixmap _buffer; int _buffer_w; int _buffer_h; int _buffer_x; int _buffer_y; static const int NMASK = 10; Pixmap _mask[NMASK]; int _mask_tile[NMASK]; int _mask_next_mru[NMASK]; int _mask_prev_mru[NMASK]; int _mask_mru; int _masking; GC _masking_gc; Tile *_masking_tile; GC _copygc; GC _orgc; GC _erasegc; GC _maskgc; GC _mask_one_gc; GC _mask_zero_gc; Tile *_selected; Hint *_hint; Vector _display_order; void display_order_dfs(Game *, Tile *); void copy_buffer(); void buffer_on(int x, int y); void buffer_off(); void mark_mask_used(int); int lru_mask() const; void mark_around(Tile *, bool up, bool down); void draw_neighborhood(Tile *, int); public: enum TileFlag { fLit = 1, fKeepLit = 2, }; Board(Panel *, Game *, Tileset *); virtual ~Board(); Game *game() const { return _game; } int topmost_tile_y() const; void tile_layout_size(int *, int *) const; void set_tileset(Tileset *); void set_background(Pixmap); void center_layout(); void position(Tile *, short *x, short *y) const; void unposition(int x, int y, short *r, short *c) const; Tile *find_tile(short, short) const; // should be in a common widget structure void move(int, int); void set_tile_flag(Tile *, TileFlag, bool); bool tile_flag(Tile *, TileFlag) const; void light(Tile *t) { set_lit(t, true); } void unlight(Tile *t) { set_lit(t, false); } void set_lit(Tile *, bool); bool lit(Tile *t) const; void draw(Tile *); void draw_area(short rowtop, short colleft, short rowbot, short colright); void draw_marked(); void draw_subimage(Pixmap, Pixmap, int, int, int, int, int, int); void bell() { _panel->bell(); } void flush() { _panel->flush(); } Tile *selected() const { return _selected; } void select(Tile *); void deselect(); void clear_traversal(); Tile *traverse(int); Hint *hint() const { return _hint; } void layout_hook(Game *); void start_hook(Game *); void add_tile_hook(Game *, Tile *); void remove_tile_hook(Game *, Tile *); }; inline void Board::set_tile_flag(Tile *t, TileFlag flag, bool on) { if (on) _tile_flags[t->number()] |= flag; else _tile_flags[t->number()] &= ~flag; } inline bool Board::tile_flag(Tile *t, TileFlag flag) const { return _tile_flags[t->number()] & flag; } inline bool Board::lit(Tile *t) const { return tile_flag(t, fLit); } #endif xmahjongg-3.7/src/gmjts.cc0000664000076400007640000000715407547625047012551 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "gmjts.hh" #include "tile.hh" #include "swgeneral.hh" #include #define NPICTURES (Tileset::IVORY_NPICTURES) #define NIMAGES (2*NPICTURES + 1) #define NACROSS 21 #define NDOWN 4 GnomeMjTileset::GnomeMjTileset(Gif_Stream *gfs, Gif_XContext *gifx) : Tileset("ivory"), _gfs(gfs), _gifx(gifx), _colormap(0), _image_error(ieNone) { initialize_images(); if (check()) { initialize(); _gfs->refcount++; } else _gfs = 0; } GnomeMjTileset::~GnomeMjTileset() { Gif_DeleteColormap(_colormap); Display *display = _gifx->display; if (_gfs && _images.size()) for (int i = 0; i < NIMAGES; i++) { if (_images[i]) XFreePixmap(display, _images[i]); if (_masks[i]) XFreePixmap(display, _masks[i]); } Gif_DeleteStream(_gfs); } void GnomeMjTileset::initialize_images() { _images.assign(NIMAGES, None); _masks.assign(NIMAGES, None); check_images(); } void GnomeMjTileset::check_images() { if (_gfs == 0 || Gif_ImageCount(_gfs) != 1) { _image_error = ieBadGif; return; } Gif_Image *gfi = Gif_GetImage(_gfs, 0); if (!_gfs->global && !gfi->local) { _image_error = ieBadGif; return; } // Check the size if (gfi->width % NACROSS != 0 || gfi->height % NDOWN != 0) { _image_error = ieBadSize; return; } _image_error = ieNone; } bool GnomeMjTileset::check() const { return _image_error == ieNone; } void GnomeMjTileset::initialize() { Gif_Image *gfi = Gif_GetImage(_gfs, 0); _colormap = Gif_CopyColormap(gfi->local ? gfi->local : _gfs->global); int border = 4, shadow = 1; for (Gif_Extension *gfex = _gfs->extensions; gfex; gfex = gfex->next) if (gfex->application && strcmp(gfex->application, "xmahjongg") == 0) { sscanf((char *)gfex->data, "border=%d", &border); sscanf((char *)gfex->data, "shadow=%d", &shadow); } _xborder = _yborder = border; _shadow = shadow; _width = (gfi->width / NACROSS) - _xborder; _height = (gfi->height / NDOWN) - _yborder; } static int mapping[] = { 33, 34, 35, 36, /* 0-3: seasons */ 38, 39, 40, 41, /* 4-7: plants; switch w/seasons?? */ 14, 37, 13, /* 8-10: dragons */ 9, 11, 12, 10, /* 11-14: winds */ 0, 1, 2, 3, 4, 5, 6, 7, 8, /* 15-23: circles */ 24, 25, 26, 27, 28, 29, 30, 31, 32, /* 24-32: bamboo */ 15, 16, 17, 18, 19, 20, 21, 22, 23, /* 33-41: characters */ }; void GnomeMjTileset::draw(SwDrawable *drawable, short x, short y, short which) { int w = _width + _xborder, h = _height + _yborder; if (!_images[which]) { Gif_Image *gfi = Gif_GetImage(_gfs, 0); Gif_UncompressImage(gfi); int pos; if (which == 2*NPICTURES) pos = 37; // white dragon else if (which >= NPICTURES) pos = mapping[which - NPICTURES] + 42; else pos = mapping[which]; _images[which] = Gif_XSubImageColormap (_gifx, gfi, _colormap, (pos%NACROSS)*w, (pos/NACROSS)*h, w, h); _masks[which] = Gif_XSubMask (_gifx, gfi, (pos%NACROSS)*w, (pos/NACROSS)*h, w, h); } drawable->draw_image(_images[which], _masks[which], w, h, x, y); } void GnomeMjTileset::draw_normal(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, which); } void GnomeMjTileset::draw_lit(const Tile *t, SwDrawable *drawable, short x, short y) { int which = picture(t->number()); assert(which >= 0 && which < NPICTURES); draw(drawable, x, y, which + NPICTURES); } void GnomeMjTileset::draw_obscured(const Tile *t, SwDrawable *drawable, short x, short y) { draw(drawable, x, y, 2*NPICTURES); } xmahjongg-3.7/src/kmjts.hh0000664000076400007640000000165707723547501012563 00000000000000#ifndef KMJTS_HH #define KMJTS_HH #include #include #include "tileset.hh" class KyodaiTileset: public Tileset { enum ImageError { ieNone = 0, ieBadGif, ieBadSize, }; Gif_Stream *_gfs; Gif_XContext *_gifx; Gif_Colormap *_colormap; Gif_Colormap *_hi_colormap; Gif_Colormap *_background_colormap; int _image_error; Vector _images; Pixmap _background; Pixmap _background_mask; void initialize_images(); void check_images(); bool check() const; void initialize(); void draw(SwDrawable *, short, short, short); public: KyodaiTileset(Gif_Stream *, Gif_XContext *); ~KyodaiTileset(); bool ok() const { return _gfs; } void draw_normal(const Tile *, SwDrawable *, short x, short y); void draw_lit(const Tile *, SwDrawable *, short x, short y); void draw_obscured(const Tile *, SwDrawable *, short x, short y); }; #endif xmahjongg-3.7/src/button.cc0000664000076400007640000000453307317500501012714 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "button.hh" Button::Button(SwWindow *window) : SwWidget(window), _normal(0), _normal_mask(0), _lit(0), _lit_mask(0), _state(0), _flash_alarm(this) { } bool Button::set_normal(Gif_Stream *gfs, const char *name) { Gif_Image *gfi = Gif_GetNamedImage(gfs, name); if (!gfi) return 0; Gif_XContext *gifx = get_gif_x_context(); _normal = Gif_XImage(gifx, gfs, gfi); _normal_mask = Gif_XMask(gifx, gfs, gfi); set_size(Gif_ImageWidth(gfi), Gif_ImageHeight(gfi)); return 1; } bool Button::set_lit(Gif_Stream *gfs, const char *name) { Gif_Image *gfi = Gif_GetNamedImage(gfs, name); if (!gfi) return 0; Gif_XContext *gifx = get_gif_x_context(); _lit = Gif_XImage(gifx, gfs, gfi); _lit_mask = Gif_XMask(gifx, gfs, gfi); return 1; } void Button::change_state(int new_state) { int old_state = _state; _state = new_state; if ((old_state == 0) != (new_state == 0)) draw(); } bool Button::handle_track_event(XEvent *e) { switch (e->type) { case ButtonRelease: return (e->xbutton.button != 1); case MotionNotify: { int x1 = x(), x2 = x() + width(), y1 = y(), y2 = y() + height(); while (XCheckTypedEvent(display(), MotionNotify, e)) /* nada */; int xm = e->xmotion.x; int ym = e->xmotion.y; bool should_light = xm >= x1 && ym >= y1 && xm < x2 && ym < y2; if (should_light != _state) { _state = should_light; draw(); } return true; } default: return true; } } bool Button::track(Time time) { if (XGrabPointer(display(), window(), False, ButtonMotionMask | ButtonReleaseMask | OwnerGrabButtonMask, GrabModeAsync, GrabModeSync, None, None, time) != GrabSuccess) return 0; change_state(1); _flash_alarm.kill(); XEvent e; bool more = true; while (more) { XNextEvent(display(), &e); more = handle_track_event(&e); } bool was_lit = _state == 1; change_state(0); XUngrabPointer(display(), CurrentTime); XFlush(display()); while (XCheckMaskEvent(display(), ButtonReleaseMask | ButtonPressMask, &e)) /* nada */; return was_lit; } void Button::alarm() { if (_state == 2) change_state(0); } void Button::flash() { if (_state != 1) { change_state(2); _flash_alarm.schedule(Moment::now() + Moment(0, 100000)); } } xmahjongg-3.7/src/game.cc0000664000076400007640000002756107547625047012342 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "game.hh" #include "solvable.hh" #include "tile.hh" #include "tileset.hh" #include #include #include Tile Game::the_null_tile; Game::Game(Tileset *ts) : _tileset(ts), _nmatches(ts->nmatches()), _taken(0), _left(0), _possible_moves(0), _user_move_pos(0), _grid(new Tile *[TILE_ROWS * TILE_COLS * TILE_LEVS]), _bad_free_count(1), _free_count(new int[_nmatches]), _left_count(new int[_nmatches]) { _user_moves.push_back(0); } Game::~Game() { clear_layout(); delete[] _grid; delete[] _free_count; delete[] _left_count; } void Game::remove_hook(GameHooks *gh) { for (int i = 0; i < _hooks.size(); i++) if (_hooks[i] == gh) { _hooks[i] = _hooks.back(); _hooks.pop_back(); return; } } inline void Game::wipe_info() { _bad_free_count = 1; _possible_moves = -1; } void Game::check_level_blockage(int r, int c, int l) const { Tile *t = grid(r, c, l); if (t->real()) { r = t->row(); c = t->col(); bool left_blocked = grid(r, c-1, l)->real() || grid(r+1, c-1, l)->real(); bool right_blocked = grid(r, c+2, l)->real() || grid(r+1, c+2, l)->real(); t->set_level_blockage(left_blocked && right_blocked); } } void Game::init_blockage() { // reset all tiles for (int i = 0; i < _tiles.size(); i++) _tiles[i]->reset_blockage(); for (int i = 0; i < _tiles.size(); i++) if (_tiles[i]->real()) { Tile *t = _tiles[i]; int rr = t->row(); int cc = t->col(); int ll = t->lev(); // blockage from tiles above if (ll > 0) { for (int r = rr; r < rr + 2; r++) for (int c = cc; c < cc + 2; c++) grid(r, c, ll-1)->block_upper(); } check_level_blockage(rr, cc, ll); } // clear null tile blockage just for kicks null_tile()->reset(false); } uint32_t Game::seed_to_board_number(uint32_t seed, bool solvable) { assert((seed & 0xC0000000U) == 0); return ((seed & 0x3FFF0000) << 1) | (solvable ? 0x10000 : 0) | (seed & 0xFFFF); } void Game::board_number_to_seed(uint32_t board_number, uint32_t &seed, bool &solvable) { assert((board_number & 0x80000000U) == 0); solvable = (board_number & 0x10000) != 0; seed = ((board_number & 0x7FFE0000) >> 1) | (board_number & 0xFFFF); } void Game::assign(uint32_t seed) { int ntiles = _tiles.size(); int *permuted_tiles = new int[ntiles]; for (int i = 0; i < ntiles; i++) permuted_tiles[i] = i; seed &= 0x3FFFFFFFU; zrand_seed(seed); _board_number = seed_to_board_number(seed, false); fprintf(stderr, "board number %u\n", _board_number); for (int i = ntiles - 1; i > 0; i--) { int j = zrand() % (i+1); int tmp = permuted_tiles[i]; permuted_tiles[i] = permuted_tiles[j]; permuted_tiles[j] = tmp; } for (int i = 0; i < ntiles; i++) _tiles[i]->assign( permuted_tiles[i], _tileset->match( permuted_tiles[i] ) ); delete[] permuted_tiles; } void Game::assign_solvable(uint32_t seed) { seed &= 0x3FFFFFFFU; _board_number = seed_to_board_number(seed, true); fprintf(stderr, "board number %u\n", _board_number); SolvableMaker sm(this); sm.assign(seed); _solution = sm.solution(); } void Game::start(uint32_t the_seed, bool solvable) { _taken = 0; _left = _tiles.size(); _solution.clear(); if (solvable) assign_solvable(the_seed); else assign(the_seed); // Make all the tiles real and initialize the blockage. for (int i = 0; i < _left; i++) _tiles[i]->make_real(); init_blockage(); for (int i = 0; i < _nmatches; i++) _left_count[i] = 0; for (int i = 0; i < _left; i++) _left_count[_tiles[i]->match()]++; _moves.clear(); _user_moves.resize(1); _user_move_pos = 0; wipe_info(); for (int i = 0; i < _hooks.size(); i++) _hooks[i]->start_hook(this); } void Game::start_specific(uint32_t board_number) { if (board_number & 0x80000000U) fatal_error("bad board number"); uint32_t seed; bool solvable; board_number_to_seed(board_number, seed, solvable); start(seed, solvable); } void Game::add(Tile *t) { assert(!t->real()); t->make_real(); int rr = t->row(), cc = t->col(), ll = t->lev(); for (int r = rr; r < rr + 2; r++) { if (ll > 0) { grid(r, cc, ll-1)->block_upper(); grid(r, cc+1, ll-1)->block_upper(); } check_level_blockage(r, cc-1, ll); check_level_blockage(r, cc+2, ll); } _left++; _taken--; _left_count[t->match()]++; wipe_info(); for (int i = 0; i < _hooks.size(); i++) _hooks[i]->add_tile_hook(this, t); } void Game::remove(Tile *t) { assert(t->real()); t->make_unreal(); int rr = t->row(), cc = t->col(), ll = t->lev(); for (int r = rr; r < rr + 2; r++) { if (ll > 0) { grid(r, cc, ll-1)->unblock_upper(); grid(r, cc+1, ll-1)->unblock_upper(); } check_level_blockage(r, cc-1, ll); check_level_blockage(r, cc+2, ll); } _left--; _taken++; _left_count[t->match()]--; wipe_info(); for (int i = 0; i < _hooks.size(); i++) _hooks[i]->remove_tile_hook(this, t); } void Game::mark_user_move() { _user_moves.push_back(_moves.size()); _user_move_pos++; for (int i = 0; i < _hooks.size(); i++) _hooks[i]->move_made_hook(this); } void Game::move(Tile *t1, Tile *t2, bool was_user) { if (_user_move_pos < _user_moves.size() - 1) { int move_pos = _user_moves[_user_move_pos]; _moves.resize(move_pos); _user_moves.resize(_user_move_pos + 1); } _moves.push_back(Move(t1, t2)); remove(t1); remove(t2); if (was_user) mark_user_move(); } bool Game::undo() { if (_user_move_pos == 0) return false; int end_move = _user_moves[_user_move_pos] - 1; int start_move = _user_moves[_user_move_pos - 1]; _user_move_pos--; for (int i = end_move; i >= start_move; i--) { // Add tiles in opposite order to removing them or blockage values will // get screwed up add(_moves[i].m2); add(_moves[i].m1); } for (int i = 0; i < _hooks.size(); i++) _hooks[i]->move_made_hook(this); return true; } bool Game::redo() { if (_user_move_pos == _user_moves.size() - 1) return false; _user_move_pos++; int start_move = _user_moves[_user_move_pos - 1]; int end_move = _user_moves[_user_move_pos] - 1; for (int i = start_move; i <= end_move; i++) { remove(_moves[i].m1); remove(_moves[i].m2); } for (int i = 0; i < _hooks.size(); i++) _hooks[i]->move_made_hook(this); return true; } void Game::make_free_count() { int i; int nmatch = _tileset->nmatches(); for (i = 0; i < nmatch; i++) _free_count[i] = 0; for (i = 0; i < _tiles.size(); i++) if (_tiles[i]->real() && _tiles[i]->open()) { int mc = _tiles[i]->match(); _free_count[mc]++; } _bad_free_count = false; } void Game::count_possible_moves() { int nmatch = nmatches(); if (_bad_free_count) make_free_count(); int i, j = 0; for (i = 0; i < nmatch; i++) if (_free_count[i] == 2) j += 1; else if (_free_count[i] == 3) j += 3; else if (_free_count[i] == 4) j += 6; _possible_moves = j; } void Game::clear_layout() { int i; for (i = 0; i < _tiles.size(); i++) delete _tiles[i]; _tiles.clear(); } static int tile_sorter(const void *v1, const void *v2) { Tile *t1 = *(Tile **)v1; Tile *t2 = *(Tile **)v2; if (t1->row() != t2->row()) return t1->row() - t2->row(); if (t1->col() != t2->col()) return t1->col() - t2->col(); return t2->lev() - t1->lev(); } bool Game::init_grid() { // Clear the grid. for (int r = 0; r < TILE_ROWS; r++) for (int c = 0; c < TILE_COLS; c++) for (int l = 0; l < TILE_LEVS; l++) grid(r, c, l) = null_tile(); int tile_count = _tiles.size(); for (int i = 0; i < tile_count; i++) { Tile *t = _tiles[i]; for (int r = t->row(); r < t->row() + 2; r++) for (int c = t->col(); c < t->col() + 2; c++) { // Ensure that any 2 tiles occupy disjoint space. if (grid(r, c, t->lev()) != null_tile()) { fprintf(stderr, "tile overlaps existing tile at %d,%d,%d\n", r, c, t->lev()); return false; } grid(r, c, t->lev()) = t; } } // Sort the tiles in row, then column, then reverse-level order. qsort(&_tiles[0], tile_count, sizeof(Tile *), &tile_sorter); // Done return true; } bool Game::place_tile(int r, int c, int l) { if (r > 1 && c > 1 && l >= 0 && r < TILE_ROWS - 3 && c < TILE_COLS - 3 && l < TILE_LEVS - 1) { _tiles.push_back(new Tile(r, c, l)); return true; } else { fprintf(stderr, "tile out of bounds at %d,%d,%d\n", r, c, l); return false; } } void Game::layout_default() { clear_layout(); int i, j; for (j = 2; j <= 13; j++) { place_tile(2, j*2, 0); place_tile(8, j*2, 0); place_tile(10, j*2, 0); place_tile(16, j*2, 0); } for (j = 3; j <= 12; j++) { place_tile(6, j*2, 0); place_tile(12, j*2, 0); } for (j = 4; j <= 11; j++) { place_tile(4, j*2, 0); place_tile(14, j*2, 0); } for (j = 5; j <= 10; j++) for (i = 2; i <= 7; i++) place_tile(i*2, j*2, 1); for (j = 6; j <= 9; j++) for (i = 3; i <= 6; i++) place_tile(i*2, j*2, 2); for (j = 7; j <= 8; j++) for (i = 4; i <= 5; i++) place_tile(i*2, j*2, 3); place_tile(9, 2, 0); place_tile(9, 28, 0); place_tile(9, 30, 0); place_tile(9, 15, 4); init_grid(); for (j = 0; j < _hooks.size(); j++) _hooks[j]->layout_hook(this); } bool Game::layout_kyodai_file(FILE *f) { // skip `Kyodai 3.0' int c = getc(f); while (c != '\n' && c != EOF) c = getc(f); // skip board identifier c = getc(f); while (c != '\n' && c != EOF) c = getc(f); for (int lev = 0; lev < 5; lev++) for (int row = 0; row < 20; row++) for (int col = 0; col < 34; col++) { c = ' '; while (isspace(c)) c = getc(f); if (c == '0') /* don't place a tile */; else if (c == '1') { if (!place_tile(row + 2, col + 2, lev)) return false; } else { fprintf(stderr, "bad character"); return false; } } return true; } bool Game::layout_young_file(FILE *f) { char buffer[BUFSIZ]; while (!feof(f)) { buffer[0] = 0; fgets(buffer, BUFSIZ, f); int r, c, l; if (sscanf(buffer, " %d %d %d", &r, &c, &l) == 3) if (!place_tile(r+2, c+2, l)) return false; } return true; } bool Game::layout_kmahjongg_file(FILE *f) { char buf[BUFSIZ]; // check for `kmahjongg-layout' buf[0] = 0; fgets(buf, BUFSIZ, f); if (memcmp(buf, "kmahjongg-layout-v1", 19) != 0) { fprintf(stderr, "not a kmahjongg layout file\n"); return false; } // now read file int l = 0; while (!feof(f) && l < TILE_LEVS - 1) { for (int r = 0; r < 16 && !feof(f); r++) { buf[0] = 0; fgets(buf, BUFSIZ, f); for (int c = 0; c < TILE_COLS - 3 && buf[c] && !isspace(buf[c]); c++) if (buf[c] == '1') { if (!place_tile(r + 2, c + 2, l)) return false; } else if (buf[c] == '2' || buf[c] == '3' || buf[c] == '4' || buf[c] == '.') /* ok */; else if (buf[c] == '#') break; else { fprintf(stderr, "bad character\n"); return false; } } l++; } return true; } int Game::layout_file(const char *filename) /* returns -1 on system error, 0 on other error, 1 on no error */ { clear_layout(); FILE *f = fopen(filename, "r"); if (!f) return -1; bool ok; int c = getc(f); ungetc(c, f); if (c == 'K') ok = layout_kyodai_file(f); else if (c == 'k') ok = layout_kmahjongg_file(f); else ok = layout_young_file(f); fclose(f); if (!ok) return 0; else if (_tiles.size() != _tileset->ntiles()) { fprintf(stderr, "%d tiles (should be %d)\n", _tiles.size(), _tileset->ntiles()); return 0; } else if (!init_grid()) { fprintf(stderr, "some tiles occupied the same space\n"); return 0; } for (int j = 0; j < _hooks.size(); j++) _hooks[j]->layout_hook(this); return 1; } void Game::relayout() { for (int j = 0; j < _hooks.size(); j++) _hooks[j]->layout_hook(this); } xmahjongg-3.7/src/tile.hh0000664000076400007640000000253407036213731012353 00000000000000#ifndef TILE_HH #define TILE_HH class Tile { bool _real; int _mark_val; short _number; short _match; short _row; short _col; short _lev; short _coverage; short _blocked; public: Tile(); Tile(short r, short c, short l); short number() const { return _number; } short match() const { return _match; } short row() const { return _row; } short col() const { return _col; } short lev() const { return _lev; } void assign(short no, short m) { _number = no; _match = m; } void reset(bool is_real); void reset_blockage(); void make_real() { _real = true; } void make_unreal() { _real = false; } bool real() const { return _real; } bool open() const { return !_blocked && !_coverage; } bool obscured() const { return _coverage >= 4; } void set_level_blockage(bool b) { _blocked = b; } void block_upper() { _coverage++; } void unblock_upper() { _coverage--; } void mark() { _mark_val = 1; } void unmark() { _mark_val = 0; } bool marked() const { return _mark_val != 0; } void set_mark_val(int m) { _mark_val = m; } int mark_val() const { return _mark_val; } }; inline void Tile::reset_blockage() { _mark_val = 0; _coverage = 0; _blocked = 0; } inline void Tile::reset(bool is_real) { _real = is_real; reset_blockage(); } #endif xmahjongg-3.7/src/xmj3ts.hh0000664000076400007640000000216007723547502012652 00000000000000#ifndef XMJ3TS_HH #define XMJ3TS_HH #include #include #include "tileset.hh" class Xmj3Tileset: public Tileset { enum ImageType { itFace, itBase, itSelected, itObscured }; enum ImageError { ieNone = 0, ieBadGif, ieNoBase, ieBadSize, }; Gif_Stream *_gfs; Gif_XContext *_gifx; Gif_Colormap *_colormap; int _image_error; Vector _face_ref; Vector _base_ref; Vector _selected_ref; Vector _obscured_ref; Vector _images; Vector _masks; void map_one_image(const char *, int, ImageType, Vector &); void initialize_images(); void check_images(); bool check() const; void initialize(); void draw(SwDrawable *, short, short, short, short); public: Xmj3Tileset(Gif_Stream *, Gif_XContext *); ~Xmj3Tileset(); bool ok() const { return _gfs; } void draw_normal(const Tile *, SwDrawable *, short x, short y); void draw_lit(const Tile *, SwDrawable *, short x, short y); void draw_obscured(const Tile *, SwDrawable *, short x, short y); }; #endif xmahjongg-3.7/src/tileset.hh0000664000076400007640000000320707615267744013105 00000000000000#ifndef TILESET_HH #define TILESET_HH #include class Tile; class SwDrawable; class Tileset { protected: int _xborder; int _yborder; int _shadow; int _width; int _height; int _ntiles; int _npictures; int _nmatches; Vector _pictures; Vector _matches; void initialize_ivory(); public: enum Shadow { shadowNW = 0, shadowNE = 1, shadowSW = 2, shadowSE = 3 }; Tileset(short ntiles, short npictures, short nmatches); Tileset(const char *); // set up by name, e.g. "ivory" virtual ~Tileset() { } virtual bool ok() const = 0; int xborder() const { return _xborder; } int yborder() const { return _yborder; } int shadow() const { return _shadow; } int width() const { return _width; } int height() const { return _height; } int ntiles() const { return _ntiles; } int npictures() const { return _npictures; } int nmatches() const { return _nmatches; } short picture(short tile) const { return _pictures[tile]; } short match(short tile) const { return _matches[tile]; } virtual void draw_normal(const Tile *, SwDrawable *, short x, short y) = 0; virtual void draw_lit(const Tile *, SwDrawable *, short x, short y) = 0; virtual void draw_obscured(const Tile *, SwDrawable *, short x, short y) = 0; // Information about the normal tileset, called `ivory'. static const char *ivory_picture_name(int); static const int IVORY_NTILES = 144; static const int IVORY_NPICTURES = 42; static const int IVORY_NMATCHES = 36; }; /* Requirement: If x % 2 == 0 && x >= 0 && x < ntiles(), then match(x) == match(x + 1). */ #endif xmahjongg-3.7/src/traverse.cc0000664000076400007640000002110307547625047013246 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "traverse.hh" #include "board.hh" #include "tile.hh" #include "hint.hh" #include Moment Traversal::flash_on_delay(0, 400000); Moment Traversal::flash_off_delay(0, 150000); Traversal::Traversal(Board *b) : _board(b), _game(b->game()), _on(false), _cursor(0), _alarm(this) { _game->add_hook(this); layout_hook(_game); } Traversal::~Traversal() { _game->remove_hook(this); } void Traversal::show(bool state) { if (!_on || _state == state) return; _state = state; Tile *t = cursor(); if (_state) _board->light(t); else if (_board->selected() != t) _board->unlight(t); _board->flush(); Moment when = Moment::now(); if (state) when += flash_on_delay; else when += flash_off_delay; _alarm.schedule(when); } void Traversal::set_cursor(Tile *cursor) { if (_on && _cursor != cursor) show(false); _cursor = cursor; } void Traversal::turn_on(int r, int c, int l) { if (_on) show(false); assert(r || c || l); _cursor = _game->grid(r, c, l); _on = true; show(true); } void Traversal::turn_on(Tile *t) { if (_on) show(false); assert(t); _cursor = t; _on = true; show(true); } void Traversal::turn_off() { if (_on) show(false); _on = false; for (int i = 0; i < _hint_on.size(); i++) { _board->set_tile_flag(_hint_on[i], Board::fKeepLit, false); _board->unlight(_hint_on[i]); } } void Traversal::clear() { _cursor = 0; _on = false; _hint_on.clear(); } void Traversal::create_horizontal() { /* Horizontal traversal: What a massive pain in the ass traversal has been! Here's the problem. I seem to have an internal "algorithm" for what the traversal pattern should be, but it's based on information from the 2D board -- hard to code -- and even then, I'm not sure how to formalize it!! So the problem is to approximate this, using only relatively local information. To be "as right as possible" without ever being DEAD WRONG. (Being dead wrong some of the time is worse than being partially right all of the time, I assert from experience.) So here is the idea. Consider groups of 2 rows at a time, row r and row r + 1. Sort these together. The End. A slight improvement: Assume all boards are vertically symmetrical, and don't move indiscriminately over the axis of symmetry. This solves this problem: XX XX If X and Y sort together, then Z and Q YYXX XXYY should also sort together. But the presence YY YYMM____axis of M screwed this up: we had 3 groups -- ZZ ZZMM X+Y, M+Z, Q. ZZQQ QQZZ QQ QQ With axis consideration, this won't happen: we won't group M+Z because M is above the axis and Z is on it. */ _horizontal.clear(); const Vector &tiles = _game->tiles(); int ntiles = _game->ntiles(); if (ntiles == 0) return; Vector row_off; int cur_row = -1; for (int i = 0; i < ntiles; i++) if (tiles[i]->row() != cur_row) { row_off.push_back(i); cur_row = tiles[i]->row(); } row_off.push_back(ntiles); row_off.push_back(ntiles); int symmetry_axis = (tiles[ntiles - 1]->row() + tiles[0]->row()) / 2 + 1; for (int rowi = 0; rowi < row_off.size() - 2; /* incremented inside */) { int cur_row = tiles[row_off[rowi]]->row(); while (row_off[rowi+1] < ntiles && tiles[row_off[rowi+1]]->row() == cur_row + 1 && cur_row != symmetry_axis) { // Consider here two rows at a time. int r1 = row_off[rowi]; int r2 = row_off[rowi+1]; while (r1 < row_off[rowi+1] && r2 < row_off[rowi+2]) if (tiles[r1]->col() < tiles[r2]->col()) { _horizontal.push_back(tiles[r1]); r1++; } else { _horizontal.push_back(tiles[r2]); r2++; } for (; r1 < row_off[rowi+1]; r1++) _horizontal.push_back(tiles[r1]); for (; r2 < row_off[rowi+2]; r2++) _horizontal.push_back(tiles[r2]); rowi += 2; cur_row += 2; } // There might be one row left over. if (row_off[rowi] < ntiles && tiles[row_off[rowi]]->row() == cur_row) { for (int r1 = row_off[rowi]; r1 < row_off[rowi+1]; r1++) _horizontal.push_back(tiles[r1]); rowi++; cur_row++; } } } void Traversal::next_horiz(bool right) { int horiz_count = _horizontal.size(); _vertical_pos = -1; int i; if (!_cursor) i = right ? horiz_count - 1 : 0; else for (i = 0; i < horiz_count; i++) if (_horizontal[i] == _cursor) break; assert(i < horiz_count); int delta = right ? 1 : horiz_count - 1; for (int c = 0; c < horiz_count; c++) { i = (i + delta) % horiz_count; if (_horizontal[i]->open() && _horizontal[i]->real()) { turn_on(_horizontal[i]); return; } } turn_off(); } void Traversal::create_vertical() { const Vector &tiles = _game->tiles(); Vector list; for (int i = 0; i < tiles.size(); i++) if (tiles[i]->real() && tiles[i]->open()) list.push_back(tiles[i]); if (_cursor && (!_cursor->real() || !_cursor->open())) list.push_back(_cursor); for (int i = 0; i < list.size(); i++) list[i]->unmark(); _vertical.clear(); _vertical_pos = -1; while (1) { // Find the leftmost unmarked tile. int leftmost = TILE_COLS + 1; for (int i = 0; i < list.size(); i++) if (!list[i]->marked() && list[i]->col() < leftmost) leftmost = list[i]->col(); if (leftmost > TILE_COLS) // no leftmost tile; we're done break; int last_row = -1; for (int r = 0; r < TILE_ROWS; r++) { // Find the closest tile to the leftmost column in this row Tile *closest = 0; int closest_dist = TILE_COLS + 1; for (int i = 0; i < list.size(); i++) if (list[i]->row() == r) { int dist = abs(list[i]->col() - leftmost); if (list[i]->marked()) dist += 4; if (r == last_row + 1) dist += 4; if (dist < closest_dist) { closest = list[i]; closest_dist = dist; } } // Check to see that it is close enough, and that it's not a repeat if (_vertical.size() && _vertical.back() == closest) continue; if (closest_dist > 6) continue; _vertical.push_back(closest); closest->mark(); last_row = r; } } } void Traversal::next_vert(bool down) { if (!_vertical.size()) create_vertical(); int vert_count = _vertical.size(); if (_cursor && _vertical_pos < 0) for (int i = 0; i < vert_count && _vertical_pos < 0; i++) if (_vertical[i] == _cursor) _vertical_pos = i; int i = _vertical_pos; if (i < 0) i = down ? vert_count - 1 : 0; assert(i >= 0 && i < vert_count); int delta = down ? 1 : vert_count - 1; for (int c = 0; c < vert_count; c++) { i = (i + delta) % vert_count; if (_vertical[i]->open() && _vertical[i]->real()) { turn_on(_vertical[i]); _vertical_pos = i; return; } } turn_off(); } void Traversal::with_hint(Hint *hint, bool take) { assert(!_on && hint->ntiles()); const Vector &hints = hint->tiles(); int nhints = hint->ntiles(); int match = hints[0]->match(); Tile *selected = _board->selected(); if (nhints == 2 && (take || selected)) { _game->move(hints[0], hints[1]); } else if (nhints == 4 && (take || selected)) { _game->move(hints[0], hints[1]); hint->find(match); } else if (nhints == 2 || nhints == 4) { _board->select(hints[0]); } else if (!_hint_on.size()) { _hint_on.push_back(hints[0]); _hint_on.push_back(hints[1]); if (selected && hints[1] != selected) _hint_on[0] = selected; goto turn_on_hint; } else if (take) { assert(_hint_on.size() == 2); _game->move(_hint_on[0], _hint_on[1]); } else { int k; for (k = 0; k < 3; k++) if (hints[k] != _hint_on[0] && hints[k] != _hint_on[1]) break; _hint_on[0] = hints[k]; _hint_on[1] = hints[(k+1)%3]; _board->set_tile_flag(hints[(k+2)%3], Board::fKeepLit, false); _board->unlight(hints[(k+2)%3]); turn_on_hint: _board->set_tile_flag(_hint_on[0], Board::fKeepLit, true); _board->set_tile_flag(_hint_on[1], Board::fKeepLit, true); _board->light(_hint_on[0]); _board->light(_hint_on[1]); } } void Traversal::alarm() { show(!_state); } void Traversal::layout_hook(Game *g) { assert(g == _game); create_horizontal(); } void Traversal::start_hook(Game *) { _vertical.clear(); _cursor = 0; _hint_on.clear(); } void Traversal::add_tile_hook(Game *, Tile *) { _vertical.clear(); _hint_on.clear(); } void Traversal::remove_tile_hook(Game *, Tile *) { _vertical.clear(); _hint_on.clear(); } xmahjongg-3.7/src/Makefile.am0000664000076400007640000000277610076763534013152 00000000000000## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = xmahjongg xmahjongg_SOURCES = \ alarm.hh alarm.cc \ board.hh board.cc \ button.hh button.cc \ counter.hh counter.cc \ game.hh game.cc \ gmjts.hh gmjts.cc \ hint.hh hint.cc \ images.c \ kdets.hh kdets.cc \ kmjts.hh kmjts.cc \ main.cc \ matches.hh matches.cc \ moment.hh moment.cc \ panel.hh panel.cc \ random.cc \ solution.hh solution.cc \ solvable.hh solvable.cc \ swgeneral.hh swgeneral.cc \ swwidget.hh swwidget.cc \ tile.hh tile.cc \ tileset.hh tileset.cc \ traverse.hh traverse.cc \ xmj3ts.hh xmj3ts.cc BUILT_SOURCES = images.c INCLUDES = $(X_CFLAGS) -I$(top_srcdir)/include xmahjongg_LDADD = $(LDADD) ../liblcdf/liblcdf.a @X_LIBS@ @X_PRE_LIBS@ -lX11 @X_EXTRA_LIBS@ # # Dependencies # IMAGES = $(top_srcdir)/images/buttons.gif $(top_srcdir)/images/digits.gif MOSTLYCLEANFILES = images.c images.c: $(IMAGES) ../liblcdf/giftoc ../liblcdf/giftoc -extern -makename $(IMAGES) > $@ # # Maintenance # srclinks: for i in clp.h clp.c fmalloc.c permstr.hh permstr.cc strerror.c \ vector.hh vector.cc ; do \ ln -sf $$HOME/src/edlib/$$i $$i ; done for i in gif.h giffunc.c gifread.c giftoc.c gifx.h gifx.c ; do \ ln -sf $$HOME/src/giflib/$$i $$i ; done versionize: perl -pi -e "s/^\\.ds V.*/.ds V $(VERSION)/;" xmahjongg.6 perl -pi -e "s/^Version: .*/Version: $(VERSION)/; s/$(PACKAGE)-[\w.]+\.tar\.gz/$(PACKAGE)-$(VERSION).tar.gz/;" rpm.spec .PHONY: srclinks versionize rpm xmahjongg-3.7/src/moment.cc0000664000076400007640000000132007547625047012711 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "moment.hh" #include #include #ifdef X_GETTIMEOFDAY #define ET_GETTIMEOFDAY(t) X_GETTIMEOFDAY(t) #elif GETTIMEOFDAY_PROTO == 0 extern "C" int gettimeofday(struct timeval *, struct timezone *); #define ET_GETTIMEOFDAY(t) gettimeofday((t), 0) #elif GETTIMEOFDAY_PROTO == 1 #define ET_GETTIMEOFDAY(t) gettimeofday((t)) #else #define ET_GETTIMEOFDAY(t) gettimeofday((t), 0) #endif Moment Moment::genesis((Moment *)0); Moment::Moment(Moment *m) { assert(m == 0); struct timeval tv; ET_GETTIMEOFDAY(&tv); _sec = tv.tv_sec; _usec = tv.tv_usec; } Moment Moment::now() { Moment nowish((Moment *)0); return nowish -= genesis; } xmahjongg-3.7/src/solution.hh0000664000076400007640000000103606721336315013272 00000000000000#ifndef SOLUTION_HH #define SOLUTION_HH #include "alarm.hh" class Game; class Board; class Panel; class SolutionDisplay: public AlarmHooks { Game *_game; Board *_board; bool _on; int _pos; Alarm _alarm; int _state; int _time_scale; void real_turn_off(); Moment delay(long) const; public: SolutionDisplay(Game *, Board *); bool on() const { return _on; } bool turn_on(Panel *); void turn_off() { if (_on) real_turn_off(); } void change_speed(bool faster); void alarm(); }; #endif xmahjongg-3.7/src/game.hh0000664000076400007640000000655307772140121012333 00000000000000#ifndef GAME_HH #define GAME_HH #include #include #include class Tile; class Tileset; class Game; /* must have TILE_ROWS even */ #define TILE_ROWS 24 #define TILE_COLS 38 #define TILE_LEVS 12 struct Move { Tile *m1; Tile *m2; Move() { } Move(Tile *t1, Tile *t2) : m1(t1), m2(t2) { } }; class GameHooks { public: virtual ~GameHooks() { } virtual void layout_hook(Game *) { } virtual void start_hook(Game *) { } virtual void add_tile_hook(Game *, Tile *) { } virtual void remove_tile_hook(Game *, Tile *) { } virtual void move_made_hook(Game *) { } }; class Game { Tileset *_tileset; short _nmatches; Vector _tiles; uint32_t _board_number; short _taken; short _left; short _possible_moves; Vector _moves; Vector _user_moves; int _user_move_pos; Vector _solution; Vector _hooks; Tile **_grid; bool _bad_free_count; int *_free_count; int *_left_count; bool init_grid(); void init_blockage(); void assign(uint32_t); void assign_solvable(uint32_t); void clear_layout(); bool place_tile(int, int, int); void check_level_blockage(int, int, int) const; void wipe_info(); void make_free_count(); void count_possible_moves(); bool layout_young_file(FILE *); bool layout_kyodai_file(FILE *); bool layout_kmahjongg_file(FILE *); static Tile the_null_tile; public: Game(Tileset *); ~Game(); void add_hook(GameHooks *gh) { _hooks.push_back(gh); } void remove_hook(GameHooks *gh); int ntiles() const { return _tiles.size(); } Tile *tile(int i) const { return _tiles[i]; } const Vector &tiles() const { return _tiles; } Tile *&grid(short r, short c, short l) const; Tile *null_tile() const { return &the_null_tile; } Tileset *tileset() const { return _tileset; } uint32_t board_number() const { return _board_number; } void layout_default(); int layout_file(const char *); void relayout(); void start(uint32_t, bool); void start_specific(uint32_t); short nmatches() const { return _nmatches; } short nremaining() const { return _left; } int free_count(int); int left_count(int) const; int possible_moves(); const Vector &solution() const { return _solution; } void add(Tile *); void remove(Tile *); void move(Tile *, Tile *, bool was_user = true); void mark_user_move(); bool undo(); bool redo(); static uint32_t seed_to_board_number(uint32_t, bool); static void board_number_to_seed(uint32_t, uint32_t &, bool &); }; extern void zrand_seed(uint32_t); extern uint32_t zrand(); inline Tile *& Game::grid(short r, short c, short l) const { assert(r>=0 && r=0 && c=0 && l= 0 && i < nmatches()); if (_bad_free_count) make_free_count(); return _free_count[i]; } inline int Game::left_count(int i) const { assert(i >= 0 && i < nmatches()); return _left_count[i]; } inline int Game::possible_moves() { if (_possible_moves < 0) count_possible_moves(); return _possible_moves; } extern void fatal_error(const char *, ...); extern void error(const char *, ...); extern void warning(const char *, ...); #endif xmahjongg-3.7/src/solution.cc0000664000076400007640000000512407027227223013257 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "solution.hh" #include "panel.hh" #include "board.hh" #include "tile.hh" SolutionDisplay::SolutionDisplay(Game *game, Board *board) : _game(game), _board(board), _on(false), _pos(0), _alarm(this), _state(0), _time_scale(3) { } /* State values: 0 initial pause 0.2 s 1 flash on 0.3 s 2 flash off 0.2 s 3 flash on 0.3 s 4 remove 0.1 s -> state 1 */ bool SolutionDisplay::turn_on(Panel *panel) { if (_game->solution().size()) { int moves = 0; while (_game->undo()) moves++; _state = 0; _pos = 0; _on = true; alarm(); _alarm.schedule(Moment::now() + delay(200000 + 25000*moves)); } else { panel->bell(); _on = false; } return _on; } void SolutionDisplay::real_turn_off() { if (_state == 2 || _state == 4) { // Turn off the current highlighted move if necessary Move cur_move = _game->solution()[_pos]; _board->unlight(cur_move.m1); _board->unlight(cur_move.m2); _board->flush(); } _alarm.kill(); _on = false; _time_scale = 3; } Moment SolutionDisplay::delay(long ival) const { ival = ival * 3 / _time_scale; return Moment(0, ival); } void SolutionDisplay::change_speed(bool faster) { if (faster) { if (_time_scale < 100) _time_scale = 2 * _time_scale - 2; } else { if (_time_scale > 3) _time_scale = (_time_scale + 2) / 2; } } void SolutionDisplay::alarm() { if (!_on) return; Moment now = Moment::now(); Move cur_move = _game->solution()[_pos]; switch (_state) { case 0: _alarm.schedule(now + delay(200000)); _state = 1; break; case 1: case 2: case 3: { bool light = _state % 2; _board->set_lit(cur_move.m1, light); _board->set_lit(cur_move.m2, light); _board->flush(); _alarm.schedule(now + delay(light ? 300000 : 200000)); _state++; break; } case 4: if (!cur_move.m1->open() || !cur_move.m2->open()) fatal_error("solution trying to remove non-free tiles!\n\ This is a bug in xmahjongg. Please send mail to eddietwo@mit.edu telling\n\ him so. Include the board number, which is %lu; the board\n\ layout (e.g., \"default\" or \"bridge\"); and xmahjongg's\n\ version number, which you get by running `xmahjongg --version'.", (unsigned long)_game->board_number()); _game->move(cur_move.m1, cur_move.m2); _pos++; if (_pos >= _game->solution().size()) { _on = false; _time_scale = 3; } else { _alarm.schedule(now + delay(100000)); _state = 1; } break; } } xmahjongg-3.7/src/main.cc0000644000076400007640000004614410213402465012326 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "xmj3ts.hh" #include "gmjts.hh" #include "kmjts.hh" #include "kdets.hh" #include "board.hh" #include "panel.hh" #include "game.hh" #include "hint.hh" #include "alarm.hh" #include "button.hh" #include "matches.hh" #include "solution.hh" #include "counter.hh" #include #include #include #include #include #include #include #include #include #include #include const char *program_name; bool solvable_boards = true; Moment last_new_board; static Gif_XContext *gifx; static Gif_Stream *gifbuttons; static MatchCount *matches; extern Gif_Record buttons_gif; #define DISPLAY_OPT 300 #define HELP_OPT 301 #define VERSION_OPT 302 #define NAME_OPT 303 #define GEOMETRY_OPT 304 #define SOLVABLE_OPT 305 #define ANY_BOARD_OPT 306 #define TILESET_OPT 307 #define CONFIG_DIR_OPT 308 #define BOARD_NUMBER_OPT 309 #define LIST_OPT 310 #define BACKGROUND_OPT 311 #define LAYOUT_OPT 312 #define OBSOLETE_OPT 313 static Clp_Option options[] = { { "any-boards", 'a', ANY_BOARD_OPT, 0, Clp_Negate }, { "background", 0, BACKGROUND_OPT, Clp_ArgStringNotOption, 0 }, { "bg", 0, BACKGROUND_OPT, Clp_ArgStringNotOption, 0 }, { "board", 'b', OBSOLETE_OPT, Clp_ArgStringNotOption, 0 }, { "config-dir", 'B', CONFIG_DIR_OPT, Clp_ArgStringNotOption, 0 }, { "display", 'd', DISPLAY_OPT, Clp_ArgStringNotOption, 0 }, { "geometry", 'g', GEOMETRY_OPT, Clp_ArgString, 0 }, { "help", 0, HELP_OPT, 0, 0 }, { "layout", 'l', LAYOUT_OPT, Clp_ArgStringNotOption, 0 }, { "list", 0, LIST_OPT, 0, 0 }, { "name", 0, NAME_OPT, Clp_ArgString, 0 }, { "number", 'n', BOARD_NUMBER_OPT, Clp_ArgInt, Clp_Negate }, { "solvable-boards", 's', SOLVABLE_OPT, 0, Clp_Negate }, { "tileset", 't', TILESET_OPT, Clp_ArgStringNotOption, 0 }, { "version", 0, VERSION_OPT, 0, 0 }, }; void fatal_error(const char *message, ...) { va_list val; va_start(val, message); fprintf(stderr, "%s: ", program_name); vfprintf(stderr, message, val); fputc('\n', stderr); exit(1); } void config_error(const char *kind) { fatal_error("%s\n\ (This probably means I was installed incorrectly. Wizards can try the\n\ `-B CONFIGDIR' option.)", kind); } void error(const char *message, ...) { va_list val; va_start(val, message); fprintf(stderr, "%s: ", program_name); vfprintf(stderr, message, val); fputc('\n', stderr); } void warning(const char *message, ...) { va_list val; va_start(val, message); fprintf(stderr, "%s: warning: ", program_name); vfprintf(stderr, message, val); fputc('\n', stderr); } void short_usage() { fprintf(stderr, "Usage: %s [OPTION]... [LAYOUT]\n\ Try `%s --help' for more information.\n", program_name, program_name); exit(1); } void usage() { printf("\ `Xmahjongg' is a colorful X version of the venerable computer solitaire\n\ Mah Jongg game.\n\ \n\ Usage: %s [OPTION]... [LAYOUT]\n\ \n\ Options are:\n\ -s, --solvable-boards Use only solvable boards (default).\n\ -a, --any-boards Allow any board (opposite of -s).\n\ -n, --number N Start with board number N.\n\ -l, --layout LAYOUT Use the specified layout.\n\ -t, --tileset TILESET Use the specified tileset.\n\ --bg, --background IMAGE Use the specified image for the background.\n\ --list List known layouts, tilesets & backgrounds.\n\ -d, --display DISPLAY Set display to DISPLAY.\n\ --name NAME Set application resource name to NAME.\n\ -g, --geometry GEOM Set window geometry.\n\ -B, --config-dir DIR Look for shared configuration data in DIR.\n\ --help Print this message and exit.\n\ --version Print version number and exit.\n\ \n\ Report bugs to .\n", program_name); } static int permstring_compare(const void *v1, const void *v2) { const PermString *p1 = (const PermString *)v1; const PermString *p2 = (const PermString *)v2; return strcmp(p1->c_str(), p2->c_str()); } static void print_config_dir(const char *format, const char *dir_name, const char *kill_suffix, DIR *dir) { Vector entries; int max_length = 0; int kill_suffix_len = (kill_suffix ? strlen(kill_suffix) : 0); for (struct dirent *dp = readdir(dir); dp; dp = readdir(dir)) if (dp->d_name[0] != '.') { int len = strlen(dp->d_name); // d_namlen isn't portable. if (kill_suffix_len && kill_suffix_len < len && strcmp(kill_suffix, dp->d_name + len - kill_suffix_len) == 0) len -= kill_suffix_len; entries.push_back(PermString(dp->d_name, len)); if (len > max_length) max_length = len; } qsort(&entries[0], entries.size(), sizeof(PermString), permstring_compare); int width = ((max_length + 5) / 4) * 4; int ncolumns = 75 / width; if (ncolumns == 0) ncolumns = 1; if (ncolumns > entries.size()) ncolumns = entries.size(); int height; while (1) { height = ((entries.size() - 1) / ncolumns) + 1; int size = ncolumns * height; if (size < height + entries.size()) break; ncolumns--; } printf(format, dir_name); printf(":\n"); for (int j = 0; j < height; j++) { printf(" "); for (int i = 0; i < ncolumns - 1; i++) printf("%-*s", width, entries[i*height + j].c_str()); if ((ncolumns-1)*height + j < entries.size()) printf("%s\n", entries[(ncolumns-1)*height + j].c_str()); else printf("\n"); } } void print_config_list(const char *config_dir) { int len = strlen(config_dir) + 13; char *buf = new char[len]; sprintf(buf, "%s/layouts", config_dir); DIR *dir = opendir(buf); if (dir == 0) config_error("can't find any layouts!"); print_config_dir("Layouts in `%s/layouts'", config_dir, 0, dir); closedir(dir); sprintf(buf, "%s/tiles", config_dir); dir = opendir(buf); if (dir == 0) config_error("can't find any tilesets!"); print_config_dir("Tilesets in `%s/tiles'", config_dir, ".gif", dir); closedir(dir); sprintf(buf, "%s/backgrounds", config_dir); dir = opendir(buf); if (dir == 0) config_error("can't find any background images!"); print_config_dir("Background images in `%s/backgrounds'", config_dir, ".gif", dir); closedir(dir); delete[] buf; } Button * new_button(Panel *panel, char *name) { char buf[100]; Button *but = new Button(panel); but->set_normal(gifbuttons, name); sprintf(buf, "%s-lit", name); but->set_lit(gifbuttons, buf); return but; } static void make_panel_images(Panel *p) { gifbuttons = Gif_ReadRecord(&buttons_gif); matches = new MatchCount(p, gifbuttons, "rock"); p->set_match_count(matches); p->new_but = new_button(p, "new"); p->undo_but = new_button(p, "undo"); p->quit_but = new_button(p, "quit"); p->hint_but = new_button(p, "hint"); p->clean_but = new_button(p, "clean"); } void panel_loop(Game *game, Panel *panel) { Display *d = panel->display(); XEvent event; while (1) { while (XPending(d)) { XNextEvent(d, &event); panel->handle(game, &event); } panel->redraw(); Alarm::x_wait(d); } } int parse_geometry(const char *const_g, XSizeHints *sh, int screen_width, int screen_height) { char *g = (char *)const_g; sh->flags = 0; if (isdigit(*g)) { sh->flags |= USSize; sh->width = strtol(g, &g, 10); if (g[0] == 'x' && isdigit(g[1])) sh->height = strtol(g + 1, &g, 10); else goto error; } else if (!*g) goto error; if (*g == '+' || *g == '-') { int x_minus, y_minus; sh->flags |= USPosition | PWinGravity; x_minus = *g == '-'; sh->x = strtol(g + 1, &g, 10); if (x_minus) sh->x = screen_width - sh->x - sh->width; y_minus = *g == '-'; if (*g == '-' || *g == '+') sh->y = strtol(g + 1, &g, 10); else goto error; if (y_minus) sh->y = screen_height - sh->y - sh->height; if (x_minus) sh->win_gravity = y_minus ? SouthEastGravity : NorthEastGravity; else sh->win_gravity = y_minus ? SouthWestGravity : NorthWestGravity; } else if (*g) goto error; return 1; error: warning("bad geometry specification"); sh->flags = 0; return 0; } static Visual *visual; static int depth; static Colormap colormap; static void choose_visual(Display *display, int screen_number) { int nv; unsigned int default_visualid = DefaultVisual(display, screen_number)->visualid; Window root_window = RootWindow(display, screen_number); XVisualInfo visi_template; visi_template.screen = screen_number; XVisualInfo *v = XGetVisualInfo(display, VisualScreenMask, &visi_template, &nv); XVisualInfo *best_v = 0; for (int i = 0; i < nv && !best_v; i++) if (v[i].visualid == default_visualid) best_v = &v[i]; if (!best_v) { visual = DefaultVisual(display, screen_number); depth = DefaultDepth(display, screen_number); colormap = DefaultColormap(display, screen_number); } else { /* Which visual to choose? This isn't exactly a simple decision, since we want to avoid colormap flashing while choosing a nice visual. So here's the algorithm: Prefer the default visual, or take a TrueColor visual with strictly greater depth. */ for (int i = 0; i < nv; i++) if (v[i].depth > best_v->depth && v[i].c_class == TrueColor) best_v = &v[i]; visual = best_v->visual; depth = best_v->depth; if (best_v->visualid != default_visualid) colormap = XCreateColormap(display, root_window, visual, AllocNone); else colormap = DefaultColormap(display, screen_number); } if (v) XFree(v); gifx = Gif_NewXContextFromVisual(display, screen_number, visual, depth, colormap); } static Window create_window(Display *display, int screen_number, Pixmap background) { XSetWindowAttributes x_set_attr; unsigned long x_set_attr_mask; x_set_attr.colormap = colormap; x_set_attr.backing_store = NotUseful; x_set_attr.save_under = False; x_set_attr.border_pixel = 0; x_set_attr.background_pixel = 0; x_set_attr.background_pixmap = background; x_set_attr_mask = CWColormap | CWBorderPixel | CWBackingStore | CWSaveUnder | (background ? CWBackPixmap : CWBackPixel); /* Now make the window */ return XCreateWindow (display, RootWindow(display, screen_number), 0, 0, 100, 100, 0, depth, InputOutput, visual, x_set_attr_mask, &x_set_attr); } static Tileset * load_tileset(const char *tileset_name, const char *config_dir) { int len = strlen(tileset_name) + strlen(config_dir) + 15; char *buf = new char[len]; Gif_Stream *gfs; sprintf(buf, "%s/tiles/%s.gif", config_dir, tileset_name); FILE *f = fopen(buf, "rb"); if (!f) f = fopen(tileset_name, "rb"); if (!f) { gfs = 0; error("bad tileset `%s': %s", tileset_name, strerror(errno)); } else { gfs = Gif_FullReadFile(f, GIF_READ_COMPRESSED, 0, 0); fclose(f); } Tileset *tileset = 0; // Xmahjongg tileset? if (gfs && !tileset && Gif_ImageCount(gfs) > 1) tileset = new Xmj3Tileset(gfs, gifx); // Otherwise, check dimensions. int width = 0, height = 0; if (gfs && !tileset) { Gif_Image *gfi = Gif_GetImage(gfs, 0); width = (gfi ? Gif_ImageWidth(gfi) : 0); height = (gfi ? Gif_ImageHeight(gfi) : 0); } // Gnome tileset? if (gfs && !tileset && width > 2*height) tileset = new GnomeMjTileset(gfs, gifx); // KDE tileset? if (gfs && !tileset && width == 360 && height == 280) { tileset = new KDETileset(gfs, gifx); if (!tileset->ok()) { delete tileset; tileset = 0; } } // Kyodai tileset? if (gfs && !tileset) tileset = new KyodaiTileset(gfs, gifx); // Delete tileset if bad if (tileset && !tileset->ok()) { delete tileset; tileset = 0; } delete[] buf; if (gfs && !gfs->refcount) Gif_DeleteStream(gfs); // What if that's not a valid tileset? if (!tileset) { if (strcmp(tileset_name, "thick") == 0) config_error("can't load `thick' tileset!"); else if (f != 0) error("tileset `%s' is invalid", tileset_name); error("using default tileset `thick'"); return load_tileset("thick", config_dir); } return tileset; } static Pixmap load_background(const char *background_name, const char *config_dir, Gif_XContext *gfx) { int len = strlen(background_name) + strlen(config_dir) + 21; char *buf = new char[len]; Gif_Stream *gfs; sprintf(buf, "%s/backgrounds/%s.gif", config_dir, background_name); FILE *normal_f = fopen(buf, "rb"); if (!normal_f) normal_f = fopen(background_name, "rb"); if (!normal_f) { gfs = 0; error("bad background `%s': %s", background_name, strerror(errno)); } else { gfs = Gif_ReadFile(normal_f); fclose(normal_f); } delete[] buf; // What if that's not a valid background? if (gfs && Gif_ImageCount(gfs) == 0) { Gif_DeleteStream(gfs); gfs = 0; } if (!gfs) { if (strcmp(background_name, "default") == 0) config_error("can't load default background!"); else if (normal_f != 0) error("background `%s' is invalid", background_name); error("using default background"); return load_background("default", config_dir, gfx); } Pixmap background = Gif_XImage(gfx, gfs, 0); Gif_DeleteStream(gfs); return background; } int main(int argc, char *argv[]) { // First, parse command-line options. const char *display_name = 0; const char *layout_name = 0; const char *tileset_name = "thick"; const char *background_name = "default"; const char *x_name = 0; const char *geometry = 0; const char *config_dir = PKGDATADIR; bool board_number_given = false; uint32_t board_number = 0; bool do_config_list = false; Clp_Parser *clp = Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options); program_name = Clp_ProgramName(clp); while (1) { int opt = Clp_Next(clp); switch (opt) { case SOLVABLE_OPT: solvable_boards = clp->negated ? 0 : 1; break; case ANY_BOARD_OPT: solvable_boards = clp->negated ? 1 : 0; break; case LAYOUT_OPT: case Clp_NotOption: if (layout_name) fatal_error("only one layout name allowed"); layout_name = clp->arg; break; case BOARD_NUMBER_OPT: board_number = clp->val.i; board_number_given = clp->negated ? 0 : 1; break; case TILESET_OPT: tileset_name = clp->arg; break; case BACKGROUND_OPT: background_name = clp->arg; break; case DISPLAY_OPT: if (display_name) fatal_error("only one --display allowed"); display_name = clp->arg; break; case NAME_OPT: if (x_name) fatal_error("only one --name allowed"); x_name = clp->arg; break; case GEOMETRY_OPT: if (geometry) fatal_error("only one --geometry allowed"); geometry = clp->arg; break; case CONFIG_DIR_OPT: config_dir = clp->arg; break; case VERSION_OPT: printf("LCDF Xmahjongg %s\n", VERSION); printf("\ Copyright (C) 1993-2005 Eddie Kohler and others\n\ This is free software; see the source for copying conditions.\n\ There is NO warranty, not even for merchantability or fitness for a\n\ particular purpose.\n"); exit(0); break; case HELP_OPT: usage(); exit(0); break; case LIST_OPT: do_config_list = true; break; case OBSOLETE_OPT: fatal_error("The `--board' option is obsolete. Use `--layout' instead."); break; case Clp_Done: goto done; case Clp_BadOption: short_usage(); break; default: break; } } done: if (do_config_list) { print_config_list(config_dir); exit(0); } // First, choose the visual and create the tile set. zrand_seed(0x97891); Display *display = XOpenDisplay(display_name); if (!display) fatal_error("could not open display"); int screen_number = DefaultScreen(display); choose_visual(display, screen_number); Tileset *tileset = load_tileset(tileset_name, config_dir); Pixmap background = load_background(background_name, config_dir, gifx); Game *game = new Game(tileset); // Make the window. Window window = create_window(display, screen_number, background); if (window == None) fatal_error("could not create window"); XSelectInput(display, window, ExposureMask | ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask | StructureNotifyMask | Button2MotionMask); Panel *panel = new Panel(display, window); make_panel_images(panel); matches->set_game(game); Board *board = new Board(panel, game, tileset); board->set_position(0, 65); panel->set_board(board); panel->set_background(background); panel->set_solution(new SolutionDisplay(game, board)); FancyTileCounter *tile_counter = new FancyTileCounter(panel); game->add_hook(tile_counter); panel->set_tile_count(tile_counter); // Lay out game. if (!layout_name) game->layout_default(); else { int ok = game->layout_file(layout_name); if (ok < 0) { int len = strlen(layout_name) + strlen(config_dir) + 10; char *buf = new char[len]; sprintf(buf, "%s/layouts/%s", config_dir, layout_name); ok = game->layout_file(buf); delete[] buf; } if (ok < 0) fatal_error("layout %s: %s", layout_name, strerror(errno)); else if (ok == 0) fatal_error("layout %s corrupted", layout_name); } // now we know how big and wide the game is; set up WM hints { XSizeHints *size_hint = XAllocSizeHints(); int wid, hgt; board->tile_layout_size(&wid, &hgt); size_hint->flags = PSize; size_hint->x = size_hint->y = 0; size_hint->width = wid + 38; size_hint->height = hgt + 38 + 56; if (geometry) parse_geometry(geometry, size_hint, DisplayWidth(display, screen_number), DisplayHeight(display, screen_number)); String window_name = (x_name ? x_name : program_name); if (layout_name) window_name += String(" - ") + layout_name; XClassHint class_hint; char *woog[2]; XTextProperty window_name_prop, icon_name_prop; woog[0] = window_name.mutable_c_str(); woog[1] = NULL; XStringListToTextProperty(woog, 1, &window_name_prop); XStringListToTextProperty(woog, 1, &icon_name_prop); class_hint.res_name = (char *)(x_name ? x_name : program_name); class_hint.res_class = "XMahjongg"; XResizeWindow(display, window, size_hint->width, size_hint->height); XSetWMProperties(display, window, &window_name_prop, &icon_name_prop, NULL, 0, size_hint, NULL, &class_hint); XFree(window_name_prop.value); XFree(icon_name_prop.value); board->set_size(size_hint->width, size_hint->height - board->y_pos()); board->center_layout(); } // start game if (board_number_given) { game->start_specific(board_number); solvable_boards = game->solution().size() != 0; } else game->start(getpid() * time(0), solvable_boards); last_new_board = Moment::now(); XMapRaised(display, window); panel_loop(game, panel); exit(0); } xmahjongg-3.7/src/traverse.hh0000664000076400007640000000206707615267744013272 00000000000000#ifndef TRAVERSE_HH #define TRAVERSE_HH #include "alarm.hh" #include "game.hh" #include class Board; class Hint; class Traversal: public AlarmHooks, public GameHooks { Board *_board; Game *_game; bool _on; bool _state; Tile *_cursor; Vector _hint_on; Vector _horizontal; Vector _vertical; int _vertical_pos; Alarm _alarm; static Moment flash_on_delay; static Moment flash_off_delay; void show(bool); void turn_on(int, int, int); void turn_on(Tile *); void clear(); void create_horizontal(); void create_vertical(); public: Traversal(Board *); ~Traversal(); void turn_off(); Tile *cursor() const; void set_cursor(Tile *); void next_horiz(bool right); void next_vert(bool down); void with_hint(Hint *, bool); void alarm(); void layout_hook(Game *); void start_hook(Game *); void add_tile_hook(Game *, Tile *); void remove_tile_hook(Game *, Tile *); }; inline Tile * Traversal::cursor() const { return _on ? _cursor : 0; } #endif xmahjongg-3.7/src/random.cc0000664000076400007640000000437707547625047012711 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "game.hh" #include #include #define M 1000000000 #define M_inv 1.0E-9 #define L 24 #define K 55 #define D 21 /* Random number generator. Uses the subtractive series X[n] = (X[n-55] - X[n-24]) mod M, n >= 55 as suggested in Seminumerical Algorithms, exercise 3.2.2--23. Knuth gives a FORTRAN implementation in section 3.6 for use as a portable random number generator. Michael Coffin */ /* The constant M is machine dependent. It must be even, and integer arithmetic on the range [-M,+M] must be possible. The function random() returns values in the half-open interval [0,M). Minv is just 1/M. Other possible values for L and K can be chosen from Table 1 of Section 3.2.2. The constant D should be relatively prime to K and approximately 0.382*K. (Don't ask me why.) To get a random number in the real interval [X,Y) the recommended formula is (X + (frandom() * (Y-X))). For an integral interval, take the floor. */ /* current state of generator */ static uint32_t X[K]; /* Fibonacci array */ static int cur; /* Current index in array. */ static int curL; /* this is always (cur - L) mod K */ /* seed the generator */ void zrand_seed(uint32_t seed) { int i; uint32_t j, k; /* Make zrandom() repeatable: Always reset X, cur and curL to their initial values. -ed */ cur = 0; curL = K - L; for (i = 0; i < K; i++) X[i] = 0; /* According to Knuth, "This computes a Fibonacci-like sequence; */ /* multiplication of indices by 21 [the constant D] spreads the */ /* values around so as to alleviate initial nonrandomness */ /* problems..." */ seed = seed % M; X[0] = j = seed; k = 1; for (i = 1; i < K; i++) { int which = (D*i) % K; X[which] = k; if (j < k) k -= M; k = j - k; j = X[which]; } /* `warm up' the generator. Three was good enough for Knuth... */ for (i = 0; i < 5 * K; i++) zrand(); } /* return next value in the sequence */ uint32_t zrand() { uint32_t result; result = X[cur] < X[curL] ? M : 0; result += X[cur] - X[curL]; X[cur] = result; cur++; if (cur == K) cur = 0; curL++; if (curL == K) curL = 0; return result; } xmahjongg-3.7/src/board.cc0000664000076400007640000003331007034720751012472 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include "board.hh" #include "panel.hh" #include "tileset.hh" #include "tile.hh" #include "hint.hh" Board::Board(Panel *panel, Game *game, Tileset *tileset) : SwWidget(panel), _panel(panel), _game(game), _tileset(0), _redraw_live(true), _layout_x(0), _layout_y(0), _topmost_tile(-1), _botmost_tile(-1), _leftmost_tile(-1), _rightmost_tile(-1), _buffering(0), _buffer(None), _selected(0) { // set up mask info for (int i = 0; i < NMASK; i++) { _mask[i] = None; _mask_prev_mru[i] = i - 1; _mask_next_mru[i] = (i == NMASK - 1 ? -1 : i + 1); _mask_tile[i] = -1; } _mask_mru = 0; _masking = -1; set_tileset(tileset); _game->add_hook(this); _copygc = XCreateGC(display(), window(), 0, NULL); XGCValues gcv; gcv.function = GXor; _orgc = XCreateGC(display(), window(), GCFunction, &gcv); gcv.foreground = 97; _erasegc = XCreateGC(display(), window(), GCForeground, &gcv); gcv.foreground = 0UL; gcv.background = ~0UL; gcv.function = GXand; _maskgc = XCreateGC(display(), window(), GCForeground | GCBackground | GCFunction, &gcv); gcv.function = GXandInverted; gcv.foreground = ~0UL; _mask_zero_gc = XCreateGC(display(), _mask[0], GCFunction | GCForeground, &gcv); gcv.function = GXor; gcv.foreground = ~0UL; _mask_one_gc = XCreateGC(display(), _mask[0], GCFunction | GCForeground, &gcv); _hint = new Hint(this); } Board::~Board() { delete _hint; // free mask info for (int i = 0; i < NMASK; i++) { if (_mask[i]) XFreePixmap(display(), _mask[i]); _mask[i] = 0; } XFreeGC(display(), _copygc); XFreeGC(display(), _orgc); XFreeGC(display(), _erasegc); XFreeGC(display(), _maskgc); XFreeGC(display(), _mask_one_gc); XFreeGC(display(), _mask_zero_gc); } void Board::set_tileset(Tileset *ts) { _tileset = ts; _tile_width = ts->width(); _tile_height = ts->height(); _tile_xborder = ts->xborder(); _tile_yborder = ts->yborder(); _tile_shadow = ts->shadow(); assert(!_buffering); _buffer_w = _tile_width + _tile_xborder; _buffer_h = _tile_height + _tile_yborder; if (_buffer) XFreePixmap(display(), _buffer); _buffer = XCreatePixmap(display(), window(), _buffer_w, _buffer_h, _panel->depth()); // create new masks for (int i = 0; i < NMASK; i++) { if (_mask[i]) XFreePixmap(display(), _mask[i]); _mask[i] = XCreatePixmap(display(), window(), _buffer_w, _buffer_h, 1); } } void Board::set_background(Pixmap background) { XSetTile(display(), _erasegc, background); XSetFillStyle(display(), _erasegc, FillTiled); } #define CHECK(dr, dc, dl) do { u = g->grid(r+dr, c+dc, l+dl); \ if (u->marked()) display_order_dfs(g, u); } while(0) void Board::display_order_dfs(Game *g, Tile *t) { t->unmark(); int r = t->row(); int c = t->col(); int l = t->lev(); Tile *u; // This loop is to be careful for hypothetical strange boards, where there // might be a bridge over a valley, for example: we have to check ALL // levels above. { int dc_lft = -1, dc_rt = 1, dr_top = 0, dr_bot = 2; for (int dl = 1; dl <= TILE_LEVS - 1 - l; dl++) { for (int dr = dr_top; dr <= dr_bot; dr++) for (int dc = dc_lft; dc <= dc_rt; dc++) if (r+dr >= 0 && r+dr < TILE_ROWS && c+dc >= 0 && c+dc < TILE_COLS) CHECK(dr, dc, dl); (_tile_shadow & 1 ? dc_rt++ : dc_lft--); (_tile_shadow & 2 ? dr_bot++ : dr_top--); } } if (_tile_shadow & 1) { CHECK(0, -1, 0); CHECK(1, -1, 0); CHECK(2, -1, 0); CHECK(2, 0, 0); CHECK(2, 1, 0); } else { CHECK(0, 2, 0); CHECK(1, 2, 0); CHECK(2, 2, 0); CHECK(2, 1, 0); CHECK(2, 0, 0); } _display_order.push_back(t); } #undef CHECK void Board::layout_hook(Game *g) { assert(g == _game); const Vector &tiles = g->tiles(); int ntiles = tiles.size(); _display_order.clear(); if (ntiles == 0) return; // Create the display order. for (int i = 0; i < ntiles; i++) tiles[i]->mark(); for (int i = 0; i < ntiles; i++) if (tiles[i]->marked()) display_order_dfs(g, tiles[i]); assert(_display_order.size() == ntiles); Vector d; for (int j = ntiles - 1; j >= 0; j--) d.push_back(_display_order[j]); _display_order = d; // Find the leftmost, topmost, rightmost, and bottommost tile positions. short top = 0x7FFF, left = 0x7FFF, right = -0x8000, bottom = -0x8000; for (int i = 0; i < ntiles; i++) { short x, y; position(tiles[i], &x, &y); x -= _layout_x; y -= _layout_y; if (x < left) left = x, _leftmost_tile = i; if (y < top) top = y, _topmost_tile = i; if (x + _tile_width > right) right = x + _tile_width, _rightmost_tile = i; if (y + _tile_height > bottom) bottom = y + _tile_height, _botmost_tile = i; } // Center the layout on the board. center_layout(); } int Board::topmost_tile_y() const { short x, y; position(_game->tile(_topmost_tile), &x, &y); return y; } void Board::tile_layout_size(int *width, int *height) const { Tile *tleft = _game->tile(_leftmost_tile); Tile *tright = _game->tile(_rightmost_tile); Tile *ttop = _game->tile(_topmost_tile); Tile *tbot = _game->tile(_botmost_tile); short xx, yy, zz; position(tleft, &xx, &yy); position(tright, &zz, &yy); *width = zz - xx + _tile_width + _tile_xborder; position(ttop, &xx, &yy); position(tbot, &xx, &zz); *height = zz - yy + _tile_height + _tile_yborder; } void Board::center_layout() { if (_game->ntiles() == 0) return; int layout_width, layout_height; tile_layout_size(&layout_width, &layout_height); short xx, yy; _layout_x = 0; position(_game->tile(_leftmost_tile), &xx, &yy); _layout_x = x() + (width() - layout_width) / 2 - xx; _layout_y = 0; position(_game->tile(_topmost_tile), &xx, &yy); _layout_y = y() + (height() - layout_height) / 2 - yy; } void Board::start_hook(Game *g) { _tile_flags.assign(g->ntiles(), 0); if (_panel->visible()) { for (int i = 0; i < _display_order.size(); i++) { Tile *t = _display_order[i]; if (t->real()) draw(t); } } } inline void Board::position(Tile *t, short *x, short *y) const { int r = t->row(), c = t->col(), l = t->lev(); *x = _layout_x + _tile_width * (c >> 1) + (c & 1 ? _tile_width >> 1 : 0) + (_tile_shadow & 1 ? _tile_xborder * l : -_tile_xborder * l); *y = _layout_y + _tile_height * (r >> 1) + (r & 1 ? _tile_height >> 1 : 0) + (_tile_shadow & 2 ? _tile_yborder * l : -_tile_yborder * l); } void Board::unposition(int x, int y, short *r, short *c) const { *c = (x - _layout_x)*2 / _tile_width; *r = (y - _layout_y)*2 / _tile_height; } Tile * Board::find_tile(short x, short y) const { int rl_delta = (_tile_shadow & 2 ? 1 : 0); int cl_delta = (_tile_shadow & 1 ? 1 : 0); int ybord = (_tile_shadow & 2 ? _tile_yborder : -_tile_yborder); int xbord = (_tile_shadow & 1 ? _tile_xborder : -_tile_xborder); for (int l = TILE_LEVS - 1; l >= 0; l--) { int r = (y - _layout_y - ybord * (l+rl_delta))*2 / _tile_height; int c = (x - _layout_x - xbord * (l+cl_delta))*2 / _tile_width; if (r < 0 || r >= TILE_ROWS) continue; if (c < 0 || c >= TILE_COLS) continue; Tile *t = _game->grid(r, c, l); if (t->real()) { short xx, yy; position(t, &xx, &yy); if (x >= xx && y >= yy) return t; } } return 0; } void Board::move(int x, int y) { invalidate(_layout_x, _layout_y, TILE_COLS * _tile_width / 2, TILE_ROWS * _tile_height / 2); _layout_x = x; _layout_y = y; } void Board::copy_buffer() { if (_buffering) _panel->draw_image(_buffer, _buffer_w, _buffer_h, _buffer_x, _buffer_y); } void Board::buffer_on(int x, int y) { _buffer_x = x; _buffer_y = y; _buffering = true; } void Board::buffer_off() { _buffer_x = 0; _buffer_y = 0; _buffering = false; } // masking void Board::mark_mask_used(int maskno) { if (_mask_mru != maskno) { if (_mask_next_mru[maskno] != -1) _mask_prev_mru[ _mask_next_mru[maskno] ] = _mask_prev_mru[maskno]; assert(_mask_prev_mru[maskno] != -1); _mask_next_mru[ _mask_prev_mru[maskno] ] = _mask_next_mru[maskno]; _mask_next_mru[maskno] = _mask_mru; _mask_prev_mru[maskno] = -1; _mask_prev_mru[_mask_mru] = maskno; _mask_mru = maskno; } } int Board::lru_mask() const { int i = _mask_mru; while (_mask_next_mru[i] != -1) i = _mask_next_mru[i]; return i; } void Board::draw_subimage(Pixmap image, Pixmap mask, int src_x, int src_y, int w, int h, int x, int y) { if (_masking < 0 && !_buffering) { _panel->draw_subimage(image, mask, src_x, src_y, w, h, x, y); return; } x -= _buffer_x; y -= _buffer_y; if (_masking >= 0 && mask) XCopyArea(display(), mask, _mask[_masking], _masking_gc, src_x, src_y, w, h, x, y); else if (_masking >= 0) XFillRectangle(display(), _mask[_masking], _masking_gc, x, y, w, h); else if (_buffering && mask) { XCopyPlane(display(), mask, _buffer, _maskgc, src_x, src_y, w, h, x, y, 1); XCopyArea(display(), image, _buffer, _orgc, src_x, src_y, w, h, x, y); } else XCopyArea(display(), image, _buffer, _copygc, src_x, src_y, w, h, x, y); } void Board::draw(Tile *t) { short x, y; position(t, &x, &y); if (_masking >= 0) _masking_gc = (t == _masking_tile ? _mask_one_gc : _mask_zero_gc); if (!t->real()) ; else if (t->obscured()) _tileset->draw_obscured(t, this, x, y); else if (lit(t)) _tileset->draw_lit(t, this, x, y); else _tileset->draw_normal(t, this, x, y); } void Board::draw_marked() { for (int i = 0; i < _display_order.size(); i++) { Tile *t = _display_order[i]; if (t->marked() && t->real()) { draw(t); t->unmark(); } } } void Board::mark_around(Tile *t, bool up, bool down) { if (up) { int colleft = t->col() - 1; int colright = t->col() + 2; int rowtop = t->row() - 1; int rowbot = t->row() + 2; for (int lev = t->lev(); lev < TILE_LEVS; lev++) { for (int col = colleft; col <= colright; col++) for (int row = rowtop; row <= rowbot; row++) if (col >= 0 && col < TILE_COLS && row >= 0 && row < TILE_ROWS) _game->grid(row, col, lev)->mark(); (_tile_shadow & 1 ? colright++ : colleft--); (_tile_shadow & 2 ? rowbot++ : rowtop--); } } if (down) { int colleft = t->col() - 1; int colright = t->col() + 2; int rowtop = t->row() - 1; int rowbot = t->row() + 2; for (int lev = t->lev(); lev >= 0; lev--) { for (int col = colleft; col <= colright; col++) for (int row = rowtop; row <= rowbot; row++) if (col >= 0 && col < TILE_COLS && row >= 0 && row < TILE_ROWS) _game->grid(row, col, lev)->mark(); (_tile_shadow & 1 ? colright++ : colleft--); (_tile_shadow & 2 ? rowbot++ : rowtop--); } } } void Board::draw_neighborhood(Tile *t, int erase) { short x, y; position(t, &x, &y); buffer_on(x, y); switch (erase) { case 0: { // drawing new tile XCopyArea(display(), _panel->window(), _buffer, _copygc, _buffer_x, _buffer_y, _buffer_w, _buffer_h, 0, 0); mark_around(t, true, false); draw_marked(); copy_buffer(); break; } case 1: { // erasing tile XSetTSOrigin(display(), _erasegc, -_buffer_x, -_buffer_y); XFillRectangle(display(), _buffer, _erasegc, 0, 0, _buffer_w, _buffer_h); mark_around(t, true, true); draw_marked(); copy_buffer(); break; } case 2: { // highlighting/unhighlighting tile // find cached mask int themask = -1; for (int i = 0; i < NMASK; i++) if (_mask_tile[i] == t->number()) themask = i; if (themask < 0) { // couldn't find a prepared mask for this tile; create one _masking = themask = lru_mask(); XFillRectangle(display(), _mask[themask], _mask_zero_gc, 0, 0, _buffer_w, _buffer_h); _masking_tile = t; mark_around(t, true, false); draw_marked(); _masking = -1; } // now have correct mask; use it draw(t); XSetClipMask(display(), _copygc, _mask[themask]); XSetClipOrigin(display(), _copygc, _buffer_x, _buffer_y); XCopyArea(display(), _buffer, _panel->window(), _copygc, 0, 0, _buffer_w, _buffer_h, _buffer_x, _buffer_y); XSetClipMask(display(), _copygc, None); mark_mask_used(themask); _mask_tile[themask] = t->number(); break; } } buffer_off(); } void Board::draw_area(short rowtop, short colleft, short rowbot, short colright) { colleft = (colleft < 0 ? 0 : colleft); colright = (colright >= TILE_COLS ? TILE_COLS - 1 : colright); rowtop = (rowtop < 0 ? 0 : rowtop); rowbot = (rowbot >= TILE_ROWS ? TILE_ROWS - 1 : rowbot); for (int lev = 0; lev < TILE_LEVS; lev++) for (int col = colleft; col <= colright; col++) for (int row = rowtop; row <= rowbot; row++) _game->grid(row, col, lev)->mark(); draw_marked(); } void Board::set_lit(Tile *t, bool on) { bool was_on = lit(t); set_tile_flag(t, fLit, on); if (on != was_on && t->real()) draw_neighborhood(t, 2); } void Board::select(Tile *t) { if (_selected) deselect(); light(t); set_tile_flag(t, fKeepLit, true); _selected = t; } void Board::deselect() { if (_selected) { unlight(_selected); set_tile_flag(_selected, fKeepLit, false); _selected = 0; } } void Board::add_tile_hook(Game *g, Tile *t) { assert(g == _game); if (_redraw_live) draw_neighborhood(t, 0); // clear masking tiles for (int i = 0; i < NMASK; i++) _mask_tile[i] = -1; } void Board::remove_tile_hook(Game *g, Tile *t) { assert(g == _game); if (_selected == t) _selected = 0; _tile_flags[t->number()] = 0; if (_redraw_live) draw_neighborhood(t, 1); // clear masking tiles for (int i = 0; i < NMASK; i++) _mask_tile[i] = -1; } xmahjongg-3.7/src/counter.hh0000664000076400007640000000072206721336313013074 00000000000000#ifndef COUNTER_HH #define COUNTER_HH #include "swwidget.hh" #include "game.hh" class Panel; class FancyCounter: public SwWidget { int _digits; int _value; public: FancyCounter(SwWindow *, int); void set_value(int v) { _value = v; draw(); } void draw(); }; class FancyTileCounter: public FancyCounter, public GameHooks { public: FancyTileCounter(SwWindow *); void start_hook(Game *); void move_made_hook(Game *); }; #endif xmahjongg-3.7/install-sh0000755000076400007640000002176610126442331012312 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-09-10.20 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) 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) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $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 if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi 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" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$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 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 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$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 $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: xmahjongg-3.7/TODO0000664000076400007640000000047107600031003010757 00000000000000- From Adam Sulmicki : Here's a feature-wish. To have an option for "show removed tiles" just like it is in the latest KDE version of kmahjongg (not sure if is released as I have used cvs version). Basically a 4x9 board at a side which stacks the blocks which have been removed (up to 4 high). xmahjongg-3.7/aclocal.m40000644000076400007640000011507610213402574012146 00000000000000# generated automatically by aclocal 1.9.2 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # -*- Autoconf -*- # Copyright (C) 2002, 2003 Free Software Foundation, Inc. # Generated from amversion.in; do not edit by hand. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.2])]) # AM_AUX_DIR_EXPAND # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 6 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # serial 7 -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 7 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # This macro actually does too much some checks are only needed if # your package does certain things. But this isn't really a big deal. # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 11 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # -*- Autoconf -*- # Copyright (C) 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 1 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # Copyright (C) 2003, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # # Check to make sure that the build environment is sane. # # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # AM_PROG_INSTALL_STRIP # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 1 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR xmahjongg-3.7/liblcdf/0000777000076400007640000000000010213403361011752 500000000000000xmahjongg-3.7/liblcdf/fixlibc.c0000664000076400007640000000242407020337421013463 00000000000000/* Provide definitions for missing or incorrect libc functions. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef __cplusplus extern "C" { #endif #ifndef HAVE_STRDUP char * strdup(const char *s) { char *t; int l; if (!s) return 0; l = strlen(s) + 1; t = (char *)malloc(l); if (!t) return 0; memcpy(t, s, l); return t; } #endif #ifndef HAVE_STRERROR /* David Mazieres assures me that this definition works. */ char * strerror(int errno) { extern int sys_nerr; extern char *sys_errlist[]; if (errno < 0 || errno >= sys_nerr) return (char *)"bad error number"; else return sys_errlist[errno]; } #endif #ifdef BROKEN_STRTOD /* On NeXTSTEP, Melissa O'Neill reports that strtod consumes whitespace after its argument, which makes mminstance (among other programs) not work. This wrapper gets rid of that whitespace again. (Originally, we suspected strtol too, but it seems to work, at least in NeXTSTEP 3.3 patch 2.) */ double good_strtod(const char *nptr, char **endptr) { double d = strtod(nptr, endptr); if (endptr) while (*endptr > nptr && isspace((*endptr)[-1])) (*endptr)--; return d; } #endif #ifdef __cplusplus } #endif xmahjongg-3.7/liblcdf/giffunc.c0000664000076400007640000004036407622266063013504 00000000000000/* giffunc.c - General functions for the GIF library. Copyright (C) 1997-9 Eddie Kohler, eddietwo@lcs.mit.edu This file is part of the GIF library. The GIF library is free software*. It is distributed under the GNU General Public License, version 2 or later; you can copy, distribute, or alter it at will, as long as this notice is kept intact and this source code is made available. There is no warranty, express or implied. *There is a patent on the LZW compression method used by GIFs, and included in gifwrite.c. Unisys, the patent holder, allows the compression algorithm to be used without a license in software distributed at no cost to the user. The decompression algorithm is not patented. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef __cplusplus extern "C" { #endif Gif_Stream * Gif_NewStream(void) { Gif_Stream *gfs = Gif_New(Gif_Stream); if (!gfs) return 0; gfs->global = 0; gfs->background = 0; gfs->screen_width = gfs->screen_height = 0; gfs->loopcount = -1; gfs->comment = 0; gfs->images = 0; gfs->nimages = gfs->imagescap = 0; gfs->extensions = 0; gfs->errors = 0; gfs->userflags = 0; gfs->refcount = 0; return gfs; } Gif_Image * Gif_NewImage(void) { Gif_Image *gfi = Gif_New(Gif_Image); if (!gfi) return 0; gfi->identifier = 0; gfi->comment = 0; gfi->local = 0; gfi->transparent = -1; gfi->disposal = GIF_DISPOSAL_NONE; gfi->delay = 0; gfi->left = gfi->top = gfi->width = gfi->height = 0; gfi->interlace = 0; gfi->img = 0; gfi->image_data = 0; gfi->free_image_data = Gif_DeleteArrayFunc; gfi->compressed_len = 0; gfi->compressed = 0; gfi->free_compressed = 0; gfi->user_data = 0; gfi->free_user_data = 0; gfi->refcount = 0; return gfi; } Gif_Colormap * Gif_NewColormap(void) { Gif_Colormap *gfcm = Gif_New(Gif_Colormap); if (!gfcm) return 0; gfcm->ncol = 0; gfcm->capacity = 0; gfcm->col = 0; gfcm->refcount = 0; gfcm->userflags = 0; return gfcm; } Gif_Colormap * Gif_NewFullColormap(int count, int capacity) { Gif_Colormap *gfcm = Gif_New(Gif_Colormap); if (!gfcm || capacity <= 0 || count < 0) return 0; if (count > capacity) capacity = count; gfcm->ncol = count; gfcm->capacity = capacity; gfcm->col = Gif_NewArray(Gif_Color, capacity); gfcm->refcount = 0; gfcm->userflags = 0; if (!gfcm->col) { Gif_Delete(gfcm); return 0; } else return gfcm; } Gif_Comment * Gif_NewComment(void) { Gif_Comment *gfcom = Gif_New(Gif_Comment); if (!gfcom) return 0; gfcom->str = 0; gfcom->len = 0; gfcom->count = gfcom->cap = 0; return gfcom; } Gif_Extension * Gif_NewExtension(int kind, const char *app_name) { Gif_Extension *gfex = Gif_New(Gif_Extension); if (!gfex) return 0; gfex->kind = app_name ? 255 : kind; gfex->application = Gif_CopyString(app_name); gfex->data = 0; gfex->position = 0; gfex->stream = 0; gfex->next = 0; gfex->free_data = 0; if (!gfex->application && app_name) { Gif_DeleteExtension(gfex); return 0; } return gfex; } char * Gif_CopyString(const char *s) { int l; char *copy; if (!s) return 0; l = strlen(s); copy = Gif_NewArray(char, l + 1); if (!copy) return 0; memcpy(copy, s, l + 1); return copy; } int Gif_AddImage(Gif_Stream *gfs, Gif_Image *gfi) { if (gfs->nimages >= gfs->imagescap) { if (gfs->imagescap) gfs->imagescap *= 2; else gfs->imagescap = 2; Gif_ReArray(gfs->images, Gif_Image *, gfs->imagescap); if (!gfs->images) return 0; } gfs->images[gfs->nimages] = gfi; gfs->nimages++; gfi->refcount++; return 1; } void Gif_RemoveImage(Gif_Stream *gfs, int inum) { int j; if (inum < 0 || inum >= gfs->nimages) return; Gif_DeleteImage(gfs->images[inum]); for (j = inum; j < gfs->nimages - 1; j++) gfs->images[j] = gfs->images[j+1]; gfs->nimages--; } int Gif_AddCommentTake(Gif_Comment *gfcom, char *x, int xlen) { if (gfcom->count >= gfcom->cap) { if (gfcom->cap) gfcom->cap *= 2; else gfcom->cap = 2; Gif_ReArray(gfcom->str, char *, gfcom->cap); Gif_ReArray(gfcom->len, int, gfcom->cap); if (!gfcom->str || !gfcom->len) return 0; } if (xlen < 0) xlen = strlen(x); gfcom->str[ gfcom->count ] = x; gfcom->len[ gfcom->count ] = xlen; gfcom->count++; return 1; } int Gif_AddComment(Gif_Comment *gfcom, const char *x, int xlen) { char *new_x; if (xlen < 0) xlen = strlen(x); new_x = Gif_NewArray(char, xlen); if (!new_x) return 0; memcpy(new_x, x, xlen); if (Gif_AddCommentTake(gfcom, new_x, xlen) == 0) { Gif_DeleteArray(new_x); return 0; } else return 1; } int Gif_AddExtension(Gif_Stream *gfs, Gif_Extension *gfex, int pos) { Gif_Extension *prev, *trav; if (gfex->stream) return 0; for (prev = 0, trav = gfs->extensions; trav && trav->position <= pos; prev = trav, trav = trav->next) ; if (prev) prev->next = gfex; else gfs->extensions = gfex; gfex->next = trav; return 1; } int Gif_ImageNumber(Gif_Stream *gfs, Gif_Image *gfi) { int i; for (i = 0; i < gfs->nimages; i++) if (gfs->images[i] == gfi) return i; return -1; } void Gif_CalculateScreenSize(Gif_Stream *gfs, int force) { int i; int screen_width = 0; int screen_height = 0; for (i = 0; i < gfs->nimages; i++) { Gif_Image *gfi = gfs->images[i]; /* 17.Dec.1999 - I find this old behavior annoying. */ /* if (gfi->left != 0 || gfi->top != 0) continue; */ if (screen_width < gfi->left + gfi->width) screen_width = gfi->left + gfi->width; if (screen_height < gfi->top + gfi->height) screen_height = gfi->top + gfi->height; } /* Only use the default 640x480 screen size if we are being forced to create a new screen size or there's no screen size currently. */ if (screen_width == 0 && (gfs->screen_width == 0 || force)) screen_width = 640; if (screen_height == 0 && (gfs->screen_height == 0 || force)) screen_height = 480; if (gfs->screen_width < screen_width || force) gfs->screen_width = screen_width; if (gfs->screen_height < screen_height || force) gfs->screen_height = screen_height; } Gif_Stream * Gif_CopyStreamSkeleton(Gif_Stream *gfs) { Gif_Stream *ngfs = Gif_NewStream(); ngfs->global = Gif_CopyColormap(gfs->global); ngfs->background = gfs->background; ngfs->screen_width = gfs->screen_width; ngfs->screen_height = gfs->screen_height; ngfs->loopcount = gfs->loopcount; if (gfs->global && !ngfs->global) { Gif_DeleteStream(ngfs); return 0; } else return ngfs; } Gif_Stream * Gif_CopyStreamImages(Gif_Stream *gfs) { Gif_Stream *ngfs = Gif_CopyStreamSkeleton(gfs); int i; if (!ngfs) return 0; for (i = 0; i < gfs->nimages; i++) { Gif_Image *gfi = Gif_CopyImage(gfs->images[i]); if (!gfi || !Gif_AddImage(ngfs, gfi)) { Gif_DeleteStream(ngfs); return 0; } } return ngfs; } Gif_Colormap * Gif_CopyColormap(Gif_Colormap *src) { int i; Gif_Colormap *dest; if (!src) return 0; dest = Gif_NewFullColormap(src->ncol, src->capacity); if (!dest) return 0; for (i = 0; i < src->ncol; i++) { dest->col[i] = src->col[i]; dest->col[i].haspixel = 0; } return dest; } Gif_Image * Gif_CopyImage(Gif_Image *src) { Gif_Image *dest; uint8_t *data; int i; if (!src) return 0; dest = Gif_NewImage(); if (!dest) return 0; dest->identifier = Gif_CopyString(src->identifier); if (!dest->identifier && src->identifier) goto failure; if (src->comment) { dest->comment = Gif_NewComment(); if (!dest->comment) goto failure; for (i = 0; i < src->comment->count; i++) if (!Gif_AddComment(dest->comment, src->comment->str[i], src->comment->len[i])) goto failure; } dest->local = Gif_CopyColormap(src->local); if (!dest->local && src->local) goto failure; dest->transparent = src->transparent; dest->delay = src->delay; dest->disposal = src->disposal; dest->left = src->left; dest->top = src->top; dest->width = src->width; dest->height = src->height; dest->interlace = src->interlace; if (src->img) { dest->img = Gif_NewArray(uint8_t *, dest->height + 1); dest->image_data = Gif_NewArray(uint8_t, dest->width * dest->height); dest->free_image_data = Gif_DeleteArrayFunc; if (!dest->img || !dest->image_data) goto failure; for (i = 0, data = dest->image_data; i < dest->height; i++) { memcpy(data, src->img[i], dest->width); dest->img[i] = data; data += dest->width; } dest->img[dest->height] = 0; } if (src->compressed) { if (src->free_compressed == 0) dest->compressed = src->compressed; else { dest->compressed = Gif_NewArray(uint8_t, src->compressed_len); dest->free_compressed = Gif_DeleteArrayFunc; memcpy(dest->compressed, src->compressed, src->compressed_len); } dest->compressed_len = src->compressed_len; } return dest; failure: Gif_DeleteImage(dest); return 0; } /** DELETION **/ typedef struct Gif_DeletionHook { int kind; Gif_DeletionHookFunc func; void *callback_data; struct Gif_DeletionHook *next; } Gif_DeletionHook; static Gif_DeletionHook *all_hooks; void Gif_DeleteStream(Gif_Stream *gfs) { Gif_Extension *gfex; Gif_DeletionHook *hook; int i; if (!gfs) return; if (--gfs->refcount > 0) return; Gif_DeleteColormap(gfs->global); Gif_DeleteComment(gfs->comment); for (i = 0; i < gfs->nimages; i++) Gif_DeleteImage(gfs->images[i]); Gif_DeleteArray(gfs->images); gfex = gfs->extensions; while (gfex) { Gif_Extension *next = gfex->next; gfex->stream = 0; Gif_DeleteExtension(gfex); gfex = next; } for (hook = all_hooks; hook; hook = hook->next) if (hook->kind == GIF_T_STREAM) (*hook->func)(GIF_T_STREAM, gfs, hook->callback_data); Gif_Delete(gfs); } void Gif_DeleteImage(Gif_Image *gfi) { Gif_DeletionHook *hook; if (!gfi) return; if (--gfi->refcount > 0) return; for (hook = all_hooks; hook; hook = hook->next) if (hook->kind == GIF_T_IMAGE) (*hook->func)(GIF_T_IMAGE, gfi, hook->callback_data); Gif_DeleteArray(gfi->identifier); Gif_DeleteComment(gfi->comment); Gif_DeleteColormap(gfi->local); if (gfi->image_data && gfi->free_image_data) (*gfi->free_image_data)((void *)gfi->image_data); Gif_DeleteArray(gfi->img); if (gfi->compressed && gfi->free_compressed) (*gfi->free_compressed)((void *)gfi->compressed); if (gfi->user_data && gfi->free_user_data) (*gfi->free_user_data)(gfi->user_data); Gif_Delete(gfi); } void Gif_DeleteColormap(Gif_Colormap *gfcm) { Gif_DeletionHook *hook; if (!gfcm) return; if (--gfcm->refcount > 0) return; for (hook = all_hooks; hook; hook = hook->next) if (hook->kind == GIF_T_COLORMAP) (*hook->func)(GIF_T_COLORMAP, gfcm, hook->callback_data); Gif_DeleteArray(gfcm->col); Gif_Delete(gfcm); } void Gif_DeleteComment(Gif_Comment *gfcom) { int i; if (!gfcom) return; for (i = 0; i < gfcom->count; i++) Gif_DeleteArray(gfcom->str[i]); Gif_DeleteArray(gfcom->str); Gif_DeleteArray(gfcom->len); Gif_Delete(gfcom); } void Gif_DeleteExtension(Gif_Extension *gfex) { if (!gfex) return; if (gfex->data && gfex->free_data) (*gfex->free_data)(gfex->data); Gif_DeleteArray(gfex->application); if (gfex->stream) { Gif_Stream *gfs = gfex->stream; Gif_Extension *prev, *trav; for (prev = 0, trav = gfs->extensions; trav && trav != gfex; prev = trav, trav = trav->next) ; if (trav) { if (prev) prev->next = trav->next; else gfs->extensions = trav->next; } } Gif_Delete(gfex); } /** DELETION HOOKS **/ int Gif_AddDeletionHook(int kind, void (*func)(int, void *, void *), void *cb) { Gif_DeletionHook *hook = Gif_New(Gif_DeletionHook); if (!hook) return 0; Gif_RemoveDeletionHook(kind, func, cb); hook->kind = kind; hook->func = func; hook->callback_data = cb; hook->next = all_hooks; all_hooks = hook; return 1; } void Gif_RemoveDeletionHook(int kind, void (*func)(int, void *, void *), void *cb) { Gif_DeletionHook *hook = all_hooks, *prev = 0; while (hook) { if (hook->kind == kind && hook->func == func && hook->callback_data == cb) { if (prev) prev->next = hook->next; else all_hooks = hook->next; Gif_Delete(hook); return; } prev = hook; hook = hook->next; } } int Gif_ColorEq(Gif_Color *c1, Gif_Color *c2) { return GIF_COLOREQ(c1, c2); } int Gif_FindColor(Gif_Colormap *gfcm, Gif_Color *c) { int i; for (i = 0; i < gfcm->ncol; i++) if (GIF_COLOREQ(&gfcm->col[i], c)) return i; return -1; } int Gif_AddColor(Gif_Colormap *gfcm, Gif_Color *c, int look_from) { int i; if (look_from >= 0) for (i = look_from; i < gfcm->ncol; i++) if (GIF_COLOREQ(&gfcm->col[i], c)) return i; if (gfcm->ncol >= gfcm->capacity) { gfcm->capacity *= 2; Gif_ReArray(gfcm->col, Gif_Color, gfcm->capacity); if (gfcm->col == 0) return -1; } i = gfcm->ncol; gfcm->ncol++; gfcm->col[i] = *c; return i; } Gif_Image * Gif_GetImage(Gif_Stream *gfs, int imagenumber) { if (imagenumber >= 0 && imagenumber < gfs->nimages) return gfs->images[imagenumber]; else return 0; } Gif_Image * Gif_GetNamedImage(Gif_Stream *gfs, const char *name) { int i; if (!name) return gfs->nimages ? gfs->images[0] : 0; for (i = 0; i < gfs->nimages; i++) if (gfs->images[i]->identifier && strcmp(gfs->images[i]->identifier, name) == 0) return gfs->images[i]; return 0; } Gif_Extension * Gif_GetExtension(Gif_Stream *gfs, int id, Gif_Extension *search_from) { if (!search_from) search_from = gfs->extensions; while (search_from) { if (search_from->kind == id) return search_from; search_from = search_from->next; } return 0; } void Gif_ReleaseCompressedImage(Gif_Image *gfi) { if (gfi->compressed && gfi->free_compressed) (*gfi->free_compressed)(gfi->compressed); gfi->compressed = 0; gfi->compressed_len = 0; gfi->free_compressed = 0; } void Gif_ReleaseUncompressedImage(Gif_Image *gfi) { Gif_DeleteArray(gfi->img); if (gfi->image_data && gfi->free_image_data) (*gfi->free_image_data)(gfi->image_data); gfi->img = 0; gfi->image_data = 0; gfi->free_image_data = 0; } int Gif_ClipImage(Gif_Image *gfi, int left, int top, int width, int height) { int new_width = gfi->width, new_height = gfi->height; int y; if (!gfi->img) return 0; if (gfi->left < left) { int shift = left - gfi->left; for (y = 0; y < gfi->height; y++) gfi->img[y] += shift; gfi->left += shift; new_width -= shift; } if (gfi->top < top) { int shift = top - gfi->top; for (y = gfi->height - 1; y >= shift; y++) gfi->img[y - shift] = gfi->img[y]; gfi->top += shift; new_height -= shift; } if (gfi->left + new_width >= width) new_width = width - gfi->left; if (gfi->top + new_height >= height) new_height = height - gfi->top; if (new_width < 0) new_width = 0; if (new_height < 0) new_height = 0; gfi->width = new_width; gfi->height = new_height; return 1; } int Gif_InterlaceLine(int line, int height) { height--; if (line > height / 2) return line * 2 - ( height | 1); else if (line > height / 4) return line * 4 - ((height & ~1) | 2); else if (line > height / 8) return line * 8 - ((height & ~3) | 4); else return line * 8; } int Gif_SetUncompressedImage(Gif_Image *gfi, uint8_t *image_data, void (*free_data)(void *), int data_interlaced) { int i; int width = gfi->width; int height = gfi->height; uint8_t **img; Gif_ReleaseUncompressedImage(gfi); if (!image_data) return 0; img = Gif_NewArray(uint8_t *, height + 1); if (!img) return 0; if (data_interlaced) for (i = 0; i < height; i++) img[ Gif_InterlaceLine(i, height) ] = image_data + width * i; else for (i = 0; i < height; i++) img[i] = image_data + width * i; img[height] = 0; gfi->img = img; gfi->image_data = image_data; gfi->free_image_data = free_data; return 1; } int Gif_CreateUncompressedImage(Gif_Image *gfi) { uint8_t *data = Gif_NewArray(uint8_t, gfi->width * gfi->height); return Gif_SetUncompressedImage(gfi, data, Gif_DeleteArrayFunc, gfi->interlace); } void Gif_Debug(char *x, ...) { va_list val; va_start(val, x); vfprintf(stderr, x, val); fputc(' ', stderr); va_end(val); } #ifdef __cplusplus } #endif xmahjongg-3.7/liblcdf/Makefile.in0000644000076400007640000003413410213402602013735 00000000000000# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(liblcdf_a_SOURCES) $(EXTRA_liblcdf_a_SOURCES) $(giftoc_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : noinst_PROGRAMS = giftoc$(EXEEXT) subdir = liblcdf DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru liblcdf_a_AR = $(AR) $(ARFLAGS) liblcdf_a_LIBADD = am_liblcdf_a_OBJECTS = clp.$(OBJEXT) fmalloc.$(OBJEXT) \ giffunc.$(OBJEXT) gifread.$(OBJEXT) gifx.$(OBJEXT) \ permstr.$(OBJEXT) straccum.$(OBJEXT) string.$(OBJEXT) \ vectorv.$(OBJEXT) liblcdf_a_OBJECTS = $(am_liblcdf_a_OBJECTS) PROGRAMS = $(noinst_PROGRAMS) am_giftoc_OBJECTS = giftoc.$(OBJEXT) giftoc_OBJECTS = $(am_giftoc_OBJECTS) giftoc_LDADD = $(LDADD) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(liblcdf_a_SOURCES) $(EXTRA_liblcdf_a_SOURCES) \ $(giftoc_SOURCES) DIST_SOURCES = $(liblcdf_a_SOURCES) $(EXTRA_liblcdf_a_SOURCES) \ $(giftoc_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign noinst_LIBRARIES = liblcdf.a liblcdf_a_SOURCES = clp.c \ fmalloc.c \ giffunc.c gifread.c gifx.c \ permstr.cc \ straccum.cc \ string.cc \ vectorv.cc EXTRA_liblcdf_a_SOURCES = fixlibc.c giftoc_SOURCES = giftoc.c INCLUDES = $(X_CFLAGS) -I$(top_srcdir)/include all: all-am .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign liblcdf/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign liblcdf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) liblcdf.a: $(liblcdf_a_OBJECTS) $(liblcdf_a_DEPENDENCIES) -rm -f liblcdf.a $(liblcdf_a_AR) liblcdf.a $(liblcdf_a_OBJECTS) $(liblcdf_a_LIBADD) $(RANLIB) liblcdf.a clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) giftoc$(EXEEXT): $(giftoc_OBJECTS) $(giftoc_DEPENDENCIES) @rm -f giftoc$(EXEEXT) $(LINK) $(giftoc_LDFLAGS) $(giftoc_OBJECTS) $(giftoc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixlibc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/giffunc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gifread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/giftoc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gifx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/straccum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vectorv.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cc.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xmahjongg-3.7/liblcdf/permstr.cc0000664000076400007640000002327510150163047013710 00000000000000// -*- related-file-name: "../include/lcdf/permstr.hh" -*- /* permstr.{cc,hh} -- permanent strings * * Copyright (c) 1998-2004 Eddie Kohler * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. This program is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include static PermString::Initializer initializer; PermString::Doodad PermString::zero_char_doodad = { 0, 0, { 0, 0 } }; PermString::Doodad PermString::one_char_doodad[256]; PermString::Doodad* PermString::buckets[NHASH]; PermString::Initializer::Initializer() { static int initialized = 0; if (!initialized) { PermString::static_initialize(); initialized = 1; } } void PermString::static_initialize() { for (int i = 0; i < 256; i++) { one_char_doodad[i].next = 0; one_char_doodad[i].length = 1; one_char_doodad[i].data[0] = i; one_char_doodad[i].data[1] = 0; } } // This scatter array, and the ideas behind it, are stolen from lcc. static int scatter[] = { /* map characters to random values */ 2078917053, 143302914, 1027100827, 1953210302, 755253631, 2002600785, 1405390230, 45248011, 1099951567, 433832350, 2018585307, 438263339, 813528929, 1703199216, 618906479, 573714703, 766270699, 275680090, 1510320440, 1583583926, 1723401032, 1965443329, 1098183682, 1636505764, 980071615, 1011597961, 643279273, 1315461275, 157584038, 1069844923, 471560540, 89017443, 1213147837, 1498661368, 2042227746, 1968401469, 1353778505, 1300134328, 2013649480, 306246424, 1733966678, 1884751139, 744509763, 400011959, 1440466707, 1363416242, 973726663, 59253759, 1639096332, 336563455, 1642837685, 1215013716, 154523136, 593537720, 704035832, 1134594751, 1605135681, 1347315106, 302572379, 1762719719, 269676381, 774132919, 1851737163, 1482824219, 125310639, 1746481261, 1303742040, 1479089144, 899131941, 1169907872, 1785335569, 485614972, 907175364, 382361684, 885626931, 200158423, 1745777927, 1859353594, 259412182, 1237390611, 48433401, 1902249868, 304920680, 202956538, 348303940, 1008956512, 1337551289, 1953439621, 208787970, 1640123668, 1568675693, 478464352, 266772940, 1272929208, 1961288571, 392083579, 871926821, 1117546963, 1871172724, 1771058762, 139971187, 1509024645, 109190086, 1047146551, 1891386329, 994817018, 1247304975, 1489680608, 706686964, 1506717157, 579587572, 755120366, 1261483377, 884508252, 958076904, 1609787317, 1893464764, 148144545, 1415743291, 2102252735, 1788268214, 836935336, 433233439, 2055041154, 2109864544, 247038362, 299641085, 834307717, 1364585325, 23330161, 457882831, 1504556512, 1532354806, 567072918, 404219416, 1276257488, 1561889936, 1651524391, 618454448, 121093252, 1010757900, 1198042020, 876213618, 124757630, 2082550272, 1834290522, 1734544947, 1828531389, 1982435068, 1002804590, 1783300476, 1623219634, 1839739926, 69050267, 1530777140, 1802120822, 316088629, 1830418225, 488944891, 1680673954, 1853748387, 946827723, 1037746818, 1238619545, 1513900641, 1441966234, 367393385, 928306929, 946006977, 985847834, 1049400181, 1956764878, 36406206, 1925613800, 2081522508, 2118956479, 1612420674, 1668583807, 1800004220, 1447372094, 523904750, 1435821048, 923108080, 216161028, 1504871315, 306401572, 2018281851, 1820959944, 2136819798, 359743094, 1354150250, 1843084537, 1306570817, 244413420, 934220434, 672987810, 1686379655, 1301613820, 1601294739, 484902984, 139978006, 503211273, 294184214, 176384212, 281341425, 228223074, 147857043, 1893762099, 1896806882, 1947861263, 1193650546, 273227984, 1236198663, 2116758626, 489389012, 593586330, 275676551, 360187215, 267062626, 265012701, 719930310, 1621212876, 2108097238, 2026501127, 1865626297, 894834024, 552005290, 1404522304, 48964196, 5816381, 1889425288, 188942202, 509027654, 36125855, 365326415, 790369079, 264348929, 513183458, 536647531, 13672163, 313561074, 1730298077, 286900147, 1549759737, 1699573055, 776289160, 2143346068, 1975249606, 1136476375, 262925046, 92778659, 1856406685, 1884137923, 53392249, 1735424165, 1602280572 }; void PermString::initialize(const char* s, int length) { register unsigned char* m = (unsigned char*) s; register unsigned char* mm; if (length < 0) length = (s ? strlen(s) : 0); if (length == 0) { _rep = zero_char_doodad.data; return; } else if (length == 1) { _rep = one_char_doodad[m[0]].data; return; } unsigned int hash; int l; for (hash = 0, l = length, mm = m; l; mm++, l--) hash = (hash << 1) + scatter[*mm]; hash &= (NHASH - 1); Doodad *buck; for (buck = buckets[hash]; buck; buck = buck->next) if (length == buck->length && memcmp(s, buck->data, length) == 0) { _rep = buck->data; return; } // CANNOT USE new because the structure has variable size. buck = (Doodad *)malloc(sizeof(Doodad) + length - 1); buck->next = buckets[hash]; buckets[hash] = buck; buck->length = length; memcpy(buck->data, s, length); buck->data[length] = 0; _rep = buck->data; } PermString::PermString(char c) { unsigned char u = (unsigned char) c; _rep = one_char_doodad[u].data; } bool operator==(PermString a, const char *b) { if (!a || !b) return !a && !b; int l = strlen(b); return a.length() == l && memcmp(a.c_str(), b, l) == 0; } char PermString::operator[](int e) const { assert(e >= 0 && e <= length()); if (e >= 0 && e < length()) return c_str()[e]; else return 0; } static int pspos; static int pscap = 64; static char *psc = (char *)malloc(pscap); static void append(const char *s, int len) { if (pspos + len >= pscap) { pscap *= 2; psc = (char *)realloc(psc, pscap); } memcpy(psc + pspos, s, len); pspos += len; } inline static void extend(int len) { while (pspos + len >= pscap) { pscap *= 2; psc = (char *)realloc(psc, pscap); } } PermString vpermprintf(const char *s, va_list val) { pspos = 0; while (1) { const char *pct = strchr(s, '%'); if (!pct) { if (*s) append(s, strlen(s)); break; } if (pct != s) { append(s, pct - s); s = pct; } int iflag = -1; while (1) switch (*++s) { case '0': /* zeroflag = 1; */ break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (iflag != -1) assert(0 && "Too many decimal flags in permprintf"); iflag = 0; while (*s >= '0' && *s <= '9') { iflag = iflag * 10 + *s - '0'; s++; } break; case '*': { if (iflag != -1) assert(0 && "iflag given"); iflag = va_arg(val, int); break; } case 's': { const char *x = va_arg(val, const char *); if (x) { if (iflag < 0) append(x, strlen(x)); else append(x, iflag); } goto pctdone; } case 'c': { char c = (char)(va_arg(val, int) & 0xFF); append(&c, 1); goto pctdone; } case 'p': { PermString::Capsule x = va_arg(val, PermString::Capsule); PermString px; if (x) px = PermString::decapsule(x); if (iflag < 0 || iflag > px.length()) append(px.c_str(), px.length()); else append(px.c_str(), iflag); goto pctdone; } case 'd': { // FIXME FIXME rewrite for sense int x = va_arg(val, int); if (pspos == pscap) extend(1); // FIXME -2^31 unsigned int ux = x; if (x < 0) { psc[pspos++] = '-'; ux = -x; } int numdigits = 0; for (unsigned digcountx = ux; digcountx > 9; digcountx /= 10) numdigits++; extend(numdigits + 1); int digit = numdigits; do { psc[pspos + digit] = (ux % 10) + '0'; ux /= 10; digit--; } while (ux); pspos += numdigits + 1; goto pctdone; } case 'g': { // FIXME FIXME rewrite for sense double x = va_arg(val, double); char buffer[1000]; int len; sprintf(buffer, "%.10g%n", x, &len); extend(len); strcpy(psc + pspos, buffer); pspos += len; goto pctdone; } default: assert(0 && "Bad % in permprintf"); goto pctdone; } pctdone: s++; } return PermString(psc, pspos); } PermString permprintf(const char *s, ...) { va_list val; va_start(val, s); PermString p = vpermprintf(s, val); va_end(val); return p; } PermString permcat(PermString p1, PermString p2) { unsigned l1 = p1.length(); unsigned l2 = p2.length(); char *s = new char[l1 + l2]; memcpy(s, p1.c_str(), l1); memcpy(s + l1, p2.c_str(), l2); PermString p(s, l1 + l2); delete[] s; return p; } PermString permcat(PermString p1, PermString p2, PermString p3) { unsigned l1 = p1.length(); unsigned l2 = p2.length(); unsigned l3 = p3.length(); char *s = new char[l1 + l2 + l3]; memcpy(s, p1.c_str(), l1); memcpy(s + l1, p2.c_str(), l2); memcpy(s + l1 + l2, p3.c_str(), l3); PermString p(s, l1 + l2 + l3); delete[] s; return p; } xmahjongg-3.7/liblcdf/fmalloc.c0000664000076400007640000000134706646723535013505 00000000000000#ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef __cplusplus extern "C" { #endif static void fail_die_malloc_die(size_t size, const char *file, int line) { fprintf(stderr, "Out of memory! (wanted %lu at %s:%d)\n", (unsigned long)size, file, line); exit(1); } void * fail_die_malloc(size_t size, const char *file, int line) { void *p = malloc(size); if (!p && size) fail_die_malloc_die(size, file, line); return p; } void * fail_die_realloc(void *p, size_t size, const char *file, int line) { if (!p) return fail_die_malloc(size, file, line); p = realloc(p, size); if (!p && size) fail_die_malloc_die(size, file, line); return p; } #ifdef __cplusplus } #endif xmahjongg-3.7/liblcdf/giftoc.c0000664000076400007640000001105607723547510013333 00000000000000#ifdef HAVE_CONFIG_H # include #endif #ifndef PATHNAME_SEPARATOR # define PATHNAME_SEPARATOR '/' #endif #include #include #include #include #include int is_static = 1; int is_const = 1; static void * fmalloc(int size) { void *p = malloc(size); if (!p) { fputs("giftoc: Out of memory!\n", stderr); exit(1); } return p; } void print_reckless(FILE *f, char *gifrecname) { unsigned long size = 0; int c; int lasthex = 0; printf("\n%sGifRecord %s = { (unsigned char *)\"", is_static ? "static " : "", gifrecname); size = 0; c = getc(f); while (c != EOF) { if (size % 60 == 0) printf("\"\n \""); switch (c) { case '\\': fputs("\\\\", stdout); lasthex = 0; break; case '\"': fputs("\\\"", stdout); lasthex = 0; break; case '\b': fputs("\\b", stdout); lasthex = 0; break; case '\r': fputs("\\r", stdout); lasthex = 0; break; case '\n': fputs("\\n", stdout); lasthex = 0; break; case '\f': fputs("\\f", stdout); lasthex = 0; break; case '\t': fputs("\\t", stdout); lasthex = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': if (lasthex) printf("\\%o", c); else putchar(c); break; default: if (isprint(c)) { putchar(c); lasthex = 0; } else { printf("\\%o", c); lasthex = 1; } break; } size++; c = getc(f); } printf("\",\n %lu\n};\n", size); } void print_unreckless(FILE *f, char *gifrecname) { unsigned long size = 0; int c; printf("\nstatic %sunsigned char %s_data[] = {", (is_const ? "const " : ""), gifrecname); size = 0; c = getc(f); while (c != EOF) { if (size % 20 == 0) printf("\n"); printf("%d,", c); size++; c = getc(f); } printf("};\n%s%sGif_Record %s = { %s_data, %lu };\n", (is_static ? "static " : ""), (is_const ? "const " : ""), gifrecname, gifrecname, size); } int main(int argc, char *argv[]) { int reckless = 0; int make_name = 0; const char *directory = ""; argc--, argv++; while (argv[0] && argv[0][0] == '-') { if (!strcmp(argv[0], "-reckless")) reckless = 1, argc--, argv++; else if (!strcmp(argv[0], "-static")) is_static = 1, argc--, argv++; else if (!strcmp(argv[0], "-extern")) is_static = 0, argc--, argv++; else if (!strcmp(argv[0], "-makename")) make_name = 1, argc--, argv++; else if (!strcmp(argv[0], "-nonconst")) is_const = 0, argc--, argv++; else if (!strcmp(argv[0], "-const")) is_const = 1, argc--, argv++; else if (!strcmp(argv[0], "-dir") && argc > 1) { directory = argv[1], argc -= 2, argv += 2; /* make sure directory is slash-terminated */ if (directory[ strlen(directory) - 1 ] != PATHNAME_SEPARATOR && directory[0]) { char *ndirectory = (char *)fmalloc(strlen(directory) + 2); sprintf(ndirectory, "%s%c", directory, PATHNAME_SEPARATOR); directory = ndirectory; } } else break; } if ((!make_name && argc % 2 != 0) || argc < 1 || (argv[0] && argv[0][0] == '-')) { fprintf(stderr, "\ usage: giftoc [OPTIONS] FILE NAME [FILE NAME...]\n\ or: giftoc -makename [OPTIONS] FILE [FILE...]\n\ OPTIONS are -reckless, -extern, -nonconst, -dir DIR\n"); exit(1); } if (!is_static) printf("#include \"config.h\"\n#include \n\n"); for (; argc > 0; argc--, argv++) { FILE *f; char *rec_name = 0; char *file_name = (char *)fmalloc(strlen(argv[0]) + strlen(directory) + 1); strcpy(file_name, directory); strcat(file_name, argv[0]); f = fopen(file_name, "rb"); if (!f) { fprintf(stderr, "%s: %s\n", file_name, strerror(errno)); goto done; } if (make_name) { char *sin, *sout; sin = strrchr(file_name, PATHNAME_SEPARATOR) + 1; if (!sin) sin = file_name; sout = rec_name = (char *)fmalloc(strlen(sin) + 2); if (isdigit(*sin)) *sout++ = 'N'; for (; *sin; sin++, sout++) if (isalnum(*sin)) *sout = *sin; else *sout = '_'; *sout = 0; } else { argv++, argc--; rec_name = argv[0]; } if (reckless) print_reckless(f, rec_name); else print_unreckless(f, rec_name); done: if (make_name) free(rec_name); free(file_name); if (f) fclose(f); } exit(0); } xmahjongg-3.7/liblcdf/clp.c0000644000076400007640000012366510201211255012621 00000000000000/* -*- related-file-name: "../include/lcdf/clp.h" -*- */ /* clp.c - Complete source code for CLP. * This file is part of CLP, the command line parser package. * * Copyright (c) 1997-2005 Eddie Kohler, kohler@cs.ucla.edu * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file, which is available in full at * http://www.pdos.lcs.mit.edu/click/license.html. The conditions include: you * must preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include /* By default, assume we have strtoul. */ #if !defined(HAVE_STRTOUL) && !defined(HAVE_CONFIG_H) # define HAVE_STRTOUL 1 #endif #ifdef __cplusplus extern "C" { #endif /* Option types for Clp_SetOptionChar */ #define Clp_DoubledLong (Clp_LongImplicit * 2) #define Clp_AnyArgument (Clp_Mandatory | Clp_Optional) #define MAX_AMBIGUOUS_VALUES 4 typedef struct { Clp_ArgParseFunc func; int flags; void *thunk; } Clp_ArgType; typedef struct { int pos; int neg; } Clp_LongMinMatch; struct Clp_Internal { Clp_Option *opt; Clp_LongMinMatch *long_min_match; int nopt; Clp_ArgType *argtype; int nargtype; const char * const *argv; int argc; unsigned char option_class[256]; int both_short_and_long; char option_chars[3]; const char *text; const char *program_name; void (*error_handler)(const char *); int is_short; int whole_negated; /* true if negated by an option character */ int could_be_short; int option_processing; int ambiguous; int ambiguous_values[MAX_AMBIGUOUS_VALUES]; Clp_Option *current_option; int current_short; int negated_by_no; }; struct Clp_ParserState { const char * const *argv; int argc; char option_chars[3]; const char *text; int is_short; int whole_negated; }; typedef struct Clp_StringList { Clp_Option *items; Clp_LongMinMatch *long_min_match; int nitems; int allow_int; int nitems_invalid_report; } Clp_StringList; #define TEST(o, f) (((o)->flags & (f)) != 0) static int calculate_long_min_match(int, Clp_Option *, int, int, int); static int parse_string(Clp_Parser *, const char *, int, void *); static int parse_int(Clp_Parser *, const char *, int, void *); static int parse_bool(Clp_Parser *, const char *, int, void *); static int parse_double(Clp_Parser *, const char *, int, void *); static int parse_string_list(Clp_Parser *, const char *, int, void *); static int ambiguity_error(Clp_Parser *, int, int *, Clp_Option *, const char *, const char *, ...); /******* * Clp_NewParser, etc. **/ static void check_duplicated_short_options(Clp_Parser *clp, int nopt, Clp_Option *opt, int negated) { int i; int check[256]; for (i = 0; i < 256; i++) check[i] = -1; for (i = 0; i < nopt; i++) if (opt[i].short_name > 0 && opt[i].short_name < 256 && (negated ? TEST(&opt[i], Clp_Negate) : !TEST(&opt[i], Clp_OnlyNegated))) { int sh = opt[i].short_name; if (check[sh] >= 0 && check[sh] != opt[i].option_id) Clp_OptionError(clp, "CLP internal error: more than 1 option has short name '%c'", sh); check[sh] = opt[i].option_id; } } Clp_Parser * Clp_NewParser(int argc, const char * const *argv, int nopt, Clp_Option *opt) /* Creates and returns a new Clp_Parser using the options in 'opt', or 0 on memory allocation failure */ { int i; Clp_Parser *clp = (Clp_Parser *)malloc(sizeof(Clp_Parser)); Clp_Internal *cli = (Clp_Internal *)malloc(sizeof(Clp_Internal)); Clp_LongMinMatch *lmm = (Clp_LongMinMatch *)malloc(sizeof(Clp_LongMinMatch) * nopt); if (!clp || !cli || !lmm) goto failed; clp->internal = cli; cli->long_min_match = lmm; /* Assign arguments (need to do this now so we can call Clp_OptionError) */ cli->argc = argc; cli->argv = argv; { const char *slash = strrchr(argv[0], '/'); cli->program_name = slash ? slash + 1 : argv[0]; } cli->error_handler = 0; /* Get rid of negative option_ids, which are internal to CLP */ for (i = 0; i < nopt; i++) if (opt[i].option_id < 0) { Clp_OptionError(clp, "CLP internal error: option %d has negative option_id", i); opt[i] = opt[nopt - 1]; nopt--; i--; } /* Massage the options to make them usable */ for (i = 0; i < nopt; i++) { /* Enforce invariants */ if (opt[i].arg_type <= 0) opt[i].flags &= ~Clp_AnyArgument; if (opt[i].arg_type > 0 && !TEST(&opt[i], Clp_Optional)) opt[i].flags |= Clp_Mandatory; /* Nonexistent short options have character 256. We know this won't equal any character in an argument, even if characters are signed */ if (opt[i].short_name <= 0 || opt[i].short_name > 255) opt[i].short_name = 256; /* Options that start with 'no-' should be changed to OnlyNegated */ if (opt[i].long_name && strncmp(opt[i].long_name, "no-", 3) == 0) { opt[i].long_name += 3; opt[i].flags |= Clp_Negate | Clp_OnlyNegated; } } /* Check for duplicated short options */ check_duplicated_short_options(clp, nopt, opt, 0); check_duplicated_short_options(clp, nopt, opt, 1); /* Calculate long options' minimum unambiguous length */ for (i = 0; i < nopt; i++) if (opt[i].long_name && !TEST(&opt[i], Clp_OnlyNegated)) lmm[i].pos = calculate_long_min_match (nopt, opt, i, Clp_OnlyNegated, 0); for (i = 0; i < nopt; i++) if (opt[i].long_name && TEST(&opt[i], Clp_Negate)) lmm[i].neg = calculate_long_min_match (nopt, opt, i, Clp_Negate, Clp_Negate); /* Set up clp->internal */ cli->opt = opt; cli->nopt = nopt; cli->argtype = (Clp_ArgType *)malloc(sizeof(Clp_ArgType) * 5); if (!cli->argtype) goto failed; cli->nargtype = 5; for (i = 0; i < 256; i++) cli->option_class[i] = 0; cli->option_class[(unsigned char) '-'] = Clp_Short; cli->both_short_and_long = 0; cli->is_short = 0; cli->whole_negated = 0; cli->option_processing = 1; cli->current_option = 0; /* Add default type parsers */ Clp_AddType(clp, Clp_ArgString, 0, parse_string, 0); Clp_AddType(clp, Clp_ArgStringNotOption, Clp_DisallowOptions, parse_string, 0); Clp_AddType(clp, Clp_ArgInt, 0, parse_int, 0); Clp_AddType(clp, Clp_ArgUnsigned, 0, parse_int, (void *)cli); Clp_AddType(clp, Clp_ArgBool, 0, parse_bool, 0); Clp_AddType(clp, Clp_ArgDouble, 0, parse_double, 0); return clp; failed: /* It should be OK to free(0), but on some ancient systems, it isn't */ if (cli && cli->argtype) free(cli->argtype); if (cli) free(cli); if (clp) free(clp); if (lmm) free(lmm); return 0; } void Clp_DeleteParser(Clp_Parser *clp) /* Destroys the Clp_Parser 'clp' and any associated memory allocated by CLP */ { int i; Clp_Internal *cli; if (!clp) return; cli = clp->internal; /* get rid of any string list types */ for (i = 0; i < cli->nargtype; i++) if (cli->argtype[i].func == parse_string_list) { Clp_StringList *clsl = (Clp_StringList *)cli->argtype[i].thunk; free(clsl->items); free(clsl->long_min_match); free(clsl); } free(cli->argtype); free(cli->long_min_match); free(cli); free(clp); } int Clp_SetOptionProcessing(Clp_Parser *clp, int option_processing) /* Sets whether command line arguments are parsed (looking for options) at all. Each parser starts out with OptionProcessing true. Returns old value. */ { Clp_Internal *cli = clp->internal; int old = cli->option_processing; cli->option_processing = option_processing; return old; } Clp_ErrorHandler Clp_SetErrorHandler(Clp_Parser *clp, void (*error_handler)(const char *)) /* Sets a hook function to be called before Clp_OptionError prints anything. 0 means nothing will be called. */ { Clp_Internal *cli = clp->internal; Clp_ErrorHandler old = cli->error_handler; cli->error_handler = error_handler; return old; } int Clp_SetOptionChar(Clp_Parser *clp, int c, int option_type) /* Determines how clp will deal with short options. option_type must be a sum of: 0 == Clp_NotOption 'c' isn't an option. Clp_Short 'c' introduces a list of short options. Clp_Long 'c' introduces a long option. Clp_ShortNegated 'c' introduces a negated list of short options. Clp_LongNegated 'c' introduces a negated long option. Clp_LongImplicit 'c' introduces a long option, and *is part of the long option itself*. Some values are not allowed (Clp_Long | Clp_LongNegated isn't allowed, for instance). c=0 means ALL characters are that type. Returns 0 on failure (you gave an illegal option_type), 1 on success. */ { int i; Clp_Internal *cli = clp->internal; if (option_type < 0 || option_type >= 2*Clp_LongImplicit || ((option_type & Clp_Short) && (option_type & Clp_ShortNegated)) || ((option_type & Clp_Long) && (option_type & Clp_LongNegated)) || ((option_type & Clp_LongImplicit) && (option_type & (Clp_Short | Clp_ShortNegated | Clp_Long | Clp_LongNegated)))) return 0; if (c == 0) for (i = 1; i < 256; i++) cli->option_class[i] = option_type; else cli->option_class[(unsigned char) c] = option_type; /* If an option character can introduce either short or long options, then we need to fix up the long_min_match values. We may have set the long_min_match for option 'abcde' to 1, if no other option starts with 'a'. But if '-' can introduce either a short option or a long option, AND a short option '-a' exists, then the long_min_match for 'abcde' must be set to 2! */ if (!cli->both_short_and_long) { int either_short = option_type & (Clp_Short | Clp_ShortNegated); int either_long = option_type & (Clp_Long | Clp_LongNegated); if (either_short && either_long) { unsigned char have_short[257]; for (i = 0; i < 256; i++) have_short[i] = 0; for (i = 0; i < cli->nopt; i++) have_short[cli->opt[i].short_name] = 1; for (i = 0; i < cli->nopt; i++) if (cli->opt[i].long_name && cli->long_min_match[i].pos == 1) { /* if '--Cxxxx's short name is '-C', keep long_min_match == 1 */ unsigned char first = (unsigned char)cli->opt[i].long_name[0]; if (have_short[first] && first != cli->opt[i].short_name) cli->long_min_match[i].pos++; } cli->both_short_and_long = 1; } } return 1; } const char * Clp_ProgramName(Clp_Parser *clp) { return clp->internal->program_name; } void Clp_SetProgramName(Clp_Parser *clp, const char *program_name) { clp->internal->program_name = program_name; } /******* * functions for Clp_Option lists **/ static int min_different_chars(const char *s, const char *t) /* Returns the minimum number of characters required to distinguish s from t. If s is shorter than t, returns strlen(s). */ { const char *sfirst = s; while (*s && *t && *s == *t) s++, t++; if (!*s) return s - sfirst; else return s - sfirst + 1; } static int calculate_long_min_match(int nopt, Clp_Option *opt, int which, int flags, int flags_value) { int j, lmm = 1; int preferred = (opt[which].flags & Clp_PreferredMatch); for (j = 0; j < nopt; j++) if (opt[j].long_name && (opt[j].flags & flags) == flags_value && opt[which].option_id != opt[j].option_id && strncmp(opt[which].long_name, opt[j].long_name, lmm) == 0 && (!preferred || strncmp(opt[which].long_name, opt[j].long_name, strlen(opt[which].long_name)) != 0)) lmm = min_different_chars(opt[which].long_name, opt[j].long_name); return lmm; } /* the ever-glorious argcmp */ static int argcmp(const char *ref, const char *arg, int min_match, int fewer_dashes) /* Returns 0 if ref and arg don't match. Returns -1 if ref and arg match, but fewer than min_match characters. Returns len if ref and arg match min_match or more characters; len is the number of characters that matched in arg. Allows arg to contain fewer dashes than ref iff fewer_dashes != 0. Examples: argcmp("x", "y", 1, 0) --> 0 / just plain wrong argcmp("a", "ax", 1, 0) --> 0 / ...even though min_match == 1 and the 1st chars match argcmp("box", "bo", 3, 0) --> -1 / ambiguous argcmp("cat", "c=3", 1, 0) --> 1 / handles = arguments */ { const char *refstart = ref; const char *argstart = arg; assert(min_match > 0); compare: while (*ref && *arg && *arg != '=' && *ref == *arg) ref++, arg++; /* Allow arg to contain fewer dashes than ref */ if (fewer_dashes && *ref == '-' && ref[1] && ref[1] == *arg) { ref++; goto compare; } if (*arg && *arg != '=') return 0; else if (ref - refstart < min_match) return -1; else return arg - argstart; } static int find_prefix_opt(const char *arg, int nopt, Clp_Option *opt, Clp_LongMinMatch *lmmvec, int *ambiguous, int *ambiguous_values, int negated) /* Looks for an unambiguous match of 'arg' against one of the long options in 'opt'. Returns positive if it finds one; otherwise, returns -1 and possibly changes 'ambiguous' and 'ambiguous_values' to keep track of at most MAX_AMBIGUOUS_VALUES possibilities. */ { int i, fewer_dashes = 0, first_ambiguous = *ambiguous; retry: for (i = 0; i < nopt; i++) { int len, lmm; if (!opt[i].long_name || (negated && !TEST(&opt[i], Clp_Negate)) || (!negated && TEST(&opt[i], Clp_OnlyNegated))) continue; lmm = (negated ? lmmvec[i].neg : lmmvec[i].pos); len = argcmp(opt[i].long_name, arg, lmm, fewer_dashes); if (len > 0) return i; else if (len < 0) { if (*ambiguous < MAX_AMBIGUOUS_VALUES) ambiguous_values[*ambiguous] = i; (*ambiguous)++; } } /* If there were no partial matches, try again with fewer_dashes true */ if (*ambiguous == first_ambiguous && !fewer_dashes) { fewer_dashes = 1; goto retry; } return -1; } /***** * Argument parsing **/ int Clp_AddType(Clp_Parser *clp, int type_id, int flags, Clp_ArgParseFunc func, void *thunk) /* Add a argument parser for type_id to the Clp_Parser. When an argument arg for Clp_Option opt is being processed, the parser routines will call (*func)(clp, opt, arg, thunk, complain) where complain is 1 if the routine should report errors, or 0 if it should fail silently. Returns 1 on success, 0 if memory allocation fails or the arguments are bad. */ { int i; Clp_Internal *cli = clp->internal; Clp_ArgType *new_argtype; int nargtype = cli->nargtype; assert(nargtype); if (type_id <= 0 || !func) return 0; while (nargtype <= type_id) nargtype *= 2; new_argtype = (Clp_ArgType *) realloc(cli->argtype, sizeof(Clp_ArgType) * nargtype); if (!new_argtype) return 0; cli->argtype = new_argtype; for (i = cli->nargtype; i < nargtype; i++) cli->argtype[i].func = 0; cli->nargtype = nargtype; cli->argtype[type_id].func = func; cli->argtype[type_id].flags = flags; cli->argtype[type_id].thunk = thunk; return 1; } /******* * Default argument parsers **/ static int parse_string(Clp_Parser *clp, const char *arg, int complain, void *thunk) { (void)complain, (void)thunk; clp->val.s = arg; return 1; } static int parse_int(Clp_Parser *clp, const char *arg, int complain, void *thunk) { char *val; int base = 10; if (arg[0] == '0' && (arg[1] == 'x' || arg[1] == 'X')) { base = 16; arg += 2; } if (thunk != 0) { /* unsigned */ #if HAVE_STRTOUL clp->val.u = strtoul(arg, &val, base); #else /* don't bother really trying to do it right */ if (arg[0] == '-') val = (char *) arg; else clp->val.u = strtol(arg, &val, base); #endif } else clp->val.i = strtol(arg, &val, base); if (*arg != 0 && *val == 0) return 1; else if (complain) { const char *message = thunk != 0 ? "'%O' expects a nonnegative integer, not '%s'" : "'%O' expects an integer, not '%s'"; if (base == 16) arg -= 2; return Clp_OptionError(clp, message, arg); } else return 0; } static int parse_double(Clp_Parser *clp, const char *arg, int complain, void *thunk) { char *val; (void)thunk; clp->val.d = strtod(arg, &val); if (*arg != 0 && *val == 0) return 1; else if (complain) return Clp_OptionError(clp, "'%O' expects a real number, not '%s'", arg); else return 0; } static int parse_bool(Clp_Parser *clp, const char *arg, int complain, void *thunk) { int i; char lcarg[6]; (void)thunk; if (strlen(arg) > 5 || strchr(arg, '=') != 0) goto error; for (i = 0; arg[i] != 0; i++) lcarg[i] = tolower(arg[i]); lcarg[i] = 0; if (argcmp("yes", lcarg, 1, 0) > 0 || argcmp("true", lcarg, 1, 0) > 0 || argcmp("1", lcarg, 1, 0) > 0) { clp->val.i = 1; return 1; } else if (argcmp("no", lcarg, 1, 0) > 0 || argcmp("false", lcarg, 1, 0) > 0 || argcmp("1", lcarg, 1, 0) > 0) { clp->val.i = 0; return 1; } error: if (complain) Clp_OptionError(clp, "'%O' expects a true-or-false value, not '%s'", arg); return 0; } /***** * Clp_AddStringListType **/ static int parse_string_list(Clp_Parser *clp, const char *arg, int complain, void *thunk) { Clp_StringList *sl = (Clp_StringList *)thunk; int idx, ambiguous = 0; int ambiguous_values[MAX_AMBIGUOUS_VALUES + 1]; /* actually look for a string value */ idx = find_prefix_opt (arg, sl->nitems, sl->items, sl->long_min_match, &ambiguous, ambiguous_values, 0); if (idx >= 0) { clp->val.i = sl->items[idx].option_id; return 1; } if (sl->allow_int) { if (parse_int(clp, arg, 0, 0)) return 1; } if (complain) { const char *complaint = (ambiguous ? "an ambiguous" : "not a valid"); if (!ambiguous) { ambiguous = sl->nitems_invalid_report; for (idx = 0; idx < ambiguous; idx++) ambiguous_values[idx] = idx; } return ambiguity_error (clp, ambiguous, ambiguous_values, sl->items, "", "'%s' is %s argument to '%O'", arg, complaint); } else return 0; } int finish_string_list(Clp_Parser *clp, int type_id, int flags, Clp_Option *items, int nitems, int itemscap) { int i; Clp_StringList *clsl = (Clp_StringList *)malloc(sizeof(Clp_StringList)); Clp_LongMinMatch *lmm = (Clp_LongMinMatch *)malloc(sizeof(Clp_LongMinMatch) * nitems); if (!clsl || !lmm) goto error; clsl->items = items; clsl->long_min_match = lmm; clsl->nitems = nitems; clsl->allow_int = (flags & Clp_AllowNumbers) != 0; if (nitems < MAX_AMBIGUOUS_VALUES && nitems < itemscap && clsl->allow_int) { items[nitems].long_name = "any integer"; clsl->nitems_invalid_report = nitems + 1; } else if (nitems > MAX_AMBIGUOUS_VALUES + 1) clsl->nitems_invalid_report = MAX_AMBIGUOUS_VALUES + 1; else clsl->nitems_invalid_report = nitems; for (i = 0; i < nitems; i++) lmm[i].pos = calculate_long_min_match(nitems, items, i, 0, 0); if (Clp_AddType(clp, type_id, 0, parse_string_list, clsl)) return 1; error: if (clsl) free(clsl); if (lmm) free(lmm); return 0; } int Clp_AddStringListType(Clp_Parser *clp, int type_id, int flags, ...) /* An easy way to add new types to clp. Call like this: Clp_AddStringListType (clp, type_id, flags, char *s_1, int value_1, ..., char *s_n, int value_n, 0); Defines type_id as a type in clp. This type accepts any of the strings s_1, ..., s_n (or unambiguous abbreviations thereof); if argument s_i is given, value_i is stored in clp->val.i. If Clp_AllowNumbers is set in flags, explicit integers are also allowed. Returns 1 on success, 0 on memory allocation errors. */ { int nitems = 0; int itemscap = 5; Clp_Option *items = (Clp_Option *)malloc(sizeof(Clp_Option) * itemscap); va_list val; va_start(val, flags); if (!items) goto error; /* slurp up the arguments */ while (1) { int value; char *name = va_arg(val, char *); if (!name) break; value = va_arg(val, int); if (nitems >= itemscap) { Clp_Option *new_items; itemscap *= 2; new_items = (Clp_Option *)realloc(items, sizeof(Clp_Option) * itemscap); if (!new_items) goto error; items = new_items; } items[nitems].long_name = name; items[nitems].option_id = value; items[nitems].flags = 0; nitems++; } va_end(val); if (finish_string_list(clp, type_id, flags, items, nitems, itemscap)) return 1; error: va_end(val); if (items) free(items); return 0; } int Clp_AddStringListTypeVec(Clp_Parser *clp, int type_id, int flags, int nitems, char **strings, int *values) /* An alternate way to make a string list type. See Clp_AddStringListType for the basics; this coalesces the strings and values into two arrays, rather than spreading them out into a variable argument list. */ { int i; int itemscap = (nitems < 5 ? 5 : nitems); Clp_Option *items = (Clp_Option *)malloc(sizeof(Clp_Option) * itemscap); if (!items) return 0; /* copy over items */ for (i = 0; i < nitems; i++) { items[i].long_name = strings[i]; items[i].option_id = values[i]; items[i].flags = 0; } if (finish_string_list(clp, type_id, flags, items, nitems, itemscap)) return 1; else { free(items); return 0; } } /******* * Returning information **/ Clp_Argv * Clp_NewArgv(const char *str_in, int len) { int argcap = 32; Clp_Argv *clp_argv = (Clp_Argv *)malloc(sizeof(Clp_Argv)); char *s, *end; if (!clp_argv) goto failed_all; if (len < 0) len = strlen(str_in); if (!(clp_argv->argv_buf = (char *)malloc(len + 1))) goto failed_argv_buf; if (!(clp_argv->argv = (char **)malloc(sizeof(char *) * argcap))) goto failed_argv; memcpy(clp_argv->argv_buf, str_in, len); end = clp_argv->argv_buf + len; *end = 0; /* Parse arguments */ s = clp_argv->argv_buf; clp_argv->argc = 0; while (1) { char *arg, *sout; int state; while (s < end && isspace((unsigned char) *s)) s++; if (s >= end) break; /* Parse single argument */ for (arg = sout = s, state = 0; s < end; s++) { if (*s == '\'') { if (state == 0) state = '\''; else if (state == '\'') state = 0; else *sout++ = *s; } else if (*s == '\"') { if (state == 0) state = '\"'; else if (state == '\"') state = 0; else *sout++ = *s; } else if (*s == '\\') { if (state == '\'' || s == end - 1) *sout++ = *s; else *sout++ = *++s; } else if (isspace((unsigned char) *s)) { if (state == 0) break; else *sout++ = *s; } else *sout++ = *s; } *sout = 0; s++; /* Store argument */ if (clp_argv->argc < argcap - 2) { argcap *= 2; if (!(clp_argv->argv = (char **)realloc(clp_argv->argv, sizeof(char *) * argcap))) goto failed_argv; } clp_argv->argv[clp_argv->argc++] = arg; } clp_argv->argv[clp_argv->argc] = 0; /* know we have space */ return clp_argv; failed_argv: free(clp_argv->argv_buf); failed_argv_buf: free(clp_argv); failed_all: return 0; } void Clp_DeleteArgv(Clp_Argv *clp_argv) { if (!clp_argv) return; free(clp_argv->argv); free(clp_argv->argv_buf); free(clp_argv); } /****** * Clp_ParserStates **/ Clp_ParserState * Clp_NewParserState(void) { return (Clp_ParserState *)malloc(sizeof(Clp_ParserState)); } void Clp_DeleteParserState(Clp_ParserState *save) { free(save); } void Clp_SaveParser(Clp_Parser *clp, Clp_ParserState *save) /* Saves parser position in save */ { Clp_Internal *cli = clp->internal; save->argv = cli->argv; save->argc = cli->argc; memcpy(save->option_chars, cli->option_chars, 3); save->text = cli->text; save->is_short = cli->is_short; save->whole_negated = cli->whole_negated; } void Clp_RestoreParser(Clp_Parser *clp, Clp_ParserState *save) /* Restores parser position from save */ { Clp_Internal *cli = clp->internal; cli->argv = save->argv; cli->argc = save->argc; memcpy(cli->option_chars, save->option_chars, 3); cli->text = save->text; cli->is_short = save->is_short; cli->whole_negated = save->whole_negated; } /******* * Clp_Next and its helpers **/ static void set_option_text(Clp_Internal *cli, const char *text, int n_option_chars) { char *option_chars = cli->option_chars; assert(n_option_chars < 3); while (n_option_chars-- > 0) *option_chars++ = *text++; *option_chars = 0; cli->text = text; } static int next_argument(Clp_Parser *clp, int want_argument) /* Moves clp to the next argument. Returns 1 if it finds another option. Returns 0 if there aren't any more arguments. Returns 0, sets clp->have_arg = 1, and sets clp->arg to the argument if the next argument isn't an option. If want_argument > 0, it'll look for an argument. want_argument == 1: Accept arguments that start with Clp_NotOption or Clp_LongImplicit. want_argument == 2: Accept ALL arguments. Where is the option stored when this returns? Well, cli->argv[0] holds the whole of the next command line argument. cli->option_chars holds a string: what characters began the option? It is generally "-" or "--". cli->text holds the text of the option: for short options, cli->text[0] is the relevant character; for long options, cli->text holds the rest of the option. */ { Clp_Internal *cli = clp->internal; const char *text; int option_class; /* clear relevant flags */ clp->have_arg = 0; clp->arg = 0; cli->could_be_short = 0; /* if we're in a string of short options, move up one char in the string */ if (cli->is_short) { ++cli->text; if (cli->text[0] == 0) cli->is_short = 0; else if (want_argument > 0) { /* handle -O[=]argument case */ clp->have_arg = 1; if (cli->text[0] == '=') clp->arg = cli->text + 1; else clp->arg = cli->text; cli->is_short = 0; return 0; } } /* if in short options, we're all set */ if (cli->is_short) return 1; /** if not in short options, move to the next argument **/ cli->whole_negated = 0; cli->text = 0; if (cli->argc <= 1) return 0; cli->argc--; cli->argv++; text = cli->argv[0]; if (want_argument > 1) goto not_option; option_class = cli->option_class[(unsigned char)text[0]]; if (text[0] == '-' && text[1] == '-') option_class = Clp_DoubledLong; /* If this character could introduce either a short or a long option, try a long option first, but remember that short's a possibility for later. */ if ((option_class & (Clp_Short | Clp_ShortNegated)) && (option_class & (Clp_Long | Clp_LongNegated))) { option_class &= ~(Clp_Short | Clp_ShortNegated); if (text[1] != 0) cli->could_be_short = 1; } switch (option_class) { case Clp_Short: cli->is_short = 1; goto check_singleton; case Clp_ShortNegated: cli->is_short = 1; cli->whole_negated = 1; goto check_singleton; case Clp_Long: goto check_singleton; case Clp_LongNegated: cli->whole_negated = 1; goto check_singleton; check_singleton: /* For options introduced with one character, option-char, '[option-char]' alone is NOT an option. */ if (text[1] == 0) goto not_option; set_option_text(cli, text, 1); break; case Clp_LongImplicit: /* LongImplict: option_chars == "" (since all chars are part of the option); restore head -> text of option */ if (want_argument > 0) goto not_option; set_option_text(cli, text, 0); break; case Clp_DoubledLong: set_option_text(cli, text, 2); break; not_option: case Clp_NotOption: cli->is_short = 0; clp->have_arg = 1; clp->arg = text; return 0; default: assert(0 /* CLP misconfiguration: bad option type */); } return 1; } static void switch_to_short_argument(Clp_Parser *clp) { Clp_Internal *cli = clp->internal; const char *text = cli->argv[0]; int option_class = cli->option_class[(unsigned char)text[0]]; cli->is_short = 1; cli->whole_negated = (option_class & Clp_ShortNegated ? 1 : 0); set_option_text(cli, cli->argv[0], 1); assert(cli->could_be_short); } static Clp_Option * find_long(Clp_Parser *clp, const char *arg) /* If arg corresponds to one of clp's options, finds that option & returns it. If any argument is given after an = sign in arg, sets clp->have_arg = 1 and clp->arg to that argument. Sets cli->ambiguous to 1 iff there was no match because the argument was ambiguous. */ { Clp_Internal *cli = clp->internal; int value, len, min_match; Clp_Option *opt = cli->opt; int first_negative_ambiguous; /* Look for a normal option. */ value = find_prefix_opt (arg, cli->nopt, opt, cli->long_min_match, &cli->ambiguous, cli->ambiguous_values, clp->negated); if (value >= 0) goto worked; /* If we can't find it, look for a negated option. */ /* I know this is silly, but it makes me happy to accept --no-no-option as a double negative synonym for --option. :) */ first_negative_ambiguous = cli->ambiguous; while (arg[0] == 'n' && arg[1] == 'o' && arg[2] == '-') { arg += 3; clp->negated = !clp->negated; value = find_prefix_opt (arg, cli->nopt, opt, cli->long_min_match, &cli->ambiguous, cli->ambiguous_values, clp->negated); if (value >= 0) goto worked; } /* No valid option was found; return 0. Mark the ambiguous values found through '--no' by making them negative. */ { int i, max = cli->ambiguous; if (max > MAX_AMBIGUOUS_VALUES) max = MAX_AMBIGUOUS_VALUES; for (i = first_negative_ambiguous; i < max; i++) cli->ambiguous_values[i] = -cli->ambiguous_values[i] - 1; } return 0; worked: min_match = (clp->negated ? cli->long_min_match[value].neg : cli->long_min_match[value].pos); len = argcmp(opt[value].long_name, arg, min_match, 1); /* XXX 1? */ assert(len > 0); if (arg[len] == '=') { clp->have_arg = 1; clp->arg = arg + len + 1; } return &opt[value]; } static Clp_Option * find_short(Clp_Parser *clp, int short_name) /* If short_name corresponds to one of clp's options, returns it. */ { Clp_Internal *cli = clp->internal; Clp_Option *opt = cli->opt; int i; for (i = 0; i < cli->nopt; i++) if (opt[i].short_name == short_name && (clp->negated ? TEST(&opt[i], Clp_Negate) : !TEST(&opt[i], Clp_OnlyNegated))) return &opt[i]; return 0; } int Clp_Next(Clp_Parser *clp) /* Gets and parses the next argument from the argument list. If there are no more arguments, returns Clp_Done. If the next argument isn't an option, returns Clp_NotOption; the argument is stored in clp->arg. If the next argument is an option, returns that option's option_id. If the next argument is an unrecognizable or ambiguous option, an error message is given and Clp_BadOption is returned. If an option has an argument, that argument is stored in clp->arg and clp->have_arg is set to 1. Furthermore, that argument's parsed value (according to its type) is stored in the clp->val union. If an option needs an argument but isn't given one; if it doesn't need an argument but IS given one; or if the argument is the wrong type, an error message is given and Clp_BadOption is returned. */ { Clp_Internal *cli = clp->internal; Clp_Option *opt; Clp_ParserState clpsave; int complain; /** Set up clp **/ cli->current_option = 0; cli->ambiguous = 0; /** Get the next argument or option **/ if (!next_argument(clp, cli->option_processing ? 0 : 2)) return clp->have_arg ? Clp_NotOption : Clp_Done; clp->negated = cli->whole_negated; if (cli->is_short) opt = find_short(clp, cli->text[0]); else opt = find_long(clp, cli->text); /** If there's ambiguity between long & short options, and we couldn't find a long option, look for a short option **/ if (!opt && cli->could_be_short) { switch_to_short_argument(clp); opt = find_short(clp, cli->text[0]); } /** If we didn't find an option... **/ if (!opt || (clp->negated && !TEST(opt, Clp_Negate))) { /* default processing for the "--" option: turn off option processing and return the next argument */ if (strcmp(cli->argv[0], "--") == 0) { Clp_SetOptionProcessing(clp, 0); return Clp_Next(clp); } /* otherwise, report some error or other */ if (cli->ambiguous) ambiguity_error(clp, cli->ambiguous, cli->ambiguous_values, cli->opt, cli->option_chars, "option '%s%s' is ambiguous", cli->option_chars, cli->text); else if (cli->is_short && !cli->could_be_short) Clp_OptionError(clp, "unrecognized option '%s%c'", cli->option_chars, cli->text[0]); else Clp_OptionError(clp, "unrecognized option '%s%s'", cli->option_chars, cli->text); return Clp_BadOption; } /** Set the current option **/ cli->current_option = opt; cli->current_short = cli->is_short; cli->negated_by_no = clp->negated && !cli->whole_negated; /** The no-argument (or should-have-no-argument) case **/ if (clp->negated || !TEST(opt, Clp_AnyArgument)) { if (clp->have_arg) { Clp_OptionError(clp, "'%O' can't take an argument"); return Clp_BadOption; } else return opt->option_id; } /** Get an argument if we need one, or if it's optional **/ /* Sanity-check the argument type. */ if (opt->arg_type <= 0 || opt->arg_type >= cli->nargtype || cli->argtype[ opt->arg_type ].func == 0) return Clp_Error; /* complain == 1 only if the argument was explicitly given, or it is mandatory. */ complain = (clp->have_arg != 0) || TEST(opt, Clp_Mandatory); Clp_SaveParser(clp, &clpsave); if (TEST(opt, Clp_Mandatory) && !clp->have_arg) { /* Mandatory argument case */ /* Allow arguments to options to start with a dash, but only if the argument type allows it by not setting Clp_DisallowOptions */ int disallow = TEST(&cli->argtype[opt->arg_type], Clp_DisallowOptions); next_argument(clp, disallow ? 1 : 2); if (!clp->have_arg) { int got_option = cli->text != 0; Clp_RestoreParser(clp, &clpsave); if (got_option) Clp_OptionError(clp, "'%O' requires a non-option argument"); else Clp_OptionError(clp, "'%O' requires an argument"); return Clp_BadOption; } } else if (cli->is_short && !clp->have_arg && cli->text[1] != 0) /* The -[option]argument case: Assume that the rest of the current string is the argument. */ next_argument(clp, 1); /** Parse the argument **/ if (clp->have_arg) { Clp_ArgType *atr = &cli->argtype[ opt->arg_type ]; if (atr->func(clp, clp->arg, complain, atr->thunk) <= 0) { /* parser failed */ clp->have_arg = 0; if (TEST(opt, Clp_Mandatory)) return Clp_BadOption; else Clp_RestoreParser(clp, &clpsave); } } return opt->option_id; } const char * Clp_Shift(Clp_Parser *clp, int allow_dashes) /* Returns the next argument from the argument list without parsing it. If there are no more arguments, returns 0. */ { Clp_ParserState clpsave; Clp_SaveParser(clp, &clpsave); next_argument(clp, allow_dashes ? 2 : 1); if (!clp->have_arg) Clp_RestoreParser(clp, &clpsave); return clp->arg; } /******* * Clp_OptionError **/ typedef struct Clp_BuildString { char *text; char *pos; int capacity; int bad; } Clp_BuildString; static Clp_BuildString * new_build_string(void) { Clp_BuildString *bs = (Clp_BuildString *)malloc(sizeof(Clp_BuildString)); if (!bs) goto bad; bs->text = (char *)malloc(256); if (!bs->text) goto bad; bs->pos = bs->text; bs->capacity = 256; bs->bad = 0; return bs; bad: if (bs) free(bs); return 0; } static void free_build_string(Clp_BuildString *bs) { if (bs) free(bs->text); free(bs); } static int grow_build_string(Clp_BuildString *bs, int want) { char *new_text; int ipos = bs->pos - bs->text; int new_capacity = bs->capacity; while (want >= new_capacity) new_capacity *= 2; new_text = (char *)realloc(bs->text, new_capacity); if (!new_text) { bs->bad = 1; return 0; } else { bs->text = new_text; bs->pos = bs->text + ipos; bs->capacity = new_capacity; return 1; } } #define ENSURE_BUILD_STRING(bs, space) \ ((((bs)->pos - (bs)->text) + (space) >= (bs)->capacity) \ || grow_build_string((bs), ((bs)->pos - (bs)->text) + (space))) static void append_build_string(Clp_BuildString *bs, const char *s, int l) { if (l < 0) l = strlen(s); if (ENSURE_BUILD_STRING(bs, l)) { memcpy(bs->pos, s, l); bs->pos += l; } } static Clp_BuildString * Clp_VaOptionError(Clp_Parser *clp, Clp_BuildString *bs, const char *fmt, va_list val) /* Reports an error for parser clp. Allowable % format characters are: s Print a string from the argument list. c Print an int from the argument list as a character. d Print an int from the argument list. O Print the name of the current option; take nothing from the argument list. No field specifications or flags are allowed. Always returns 0. */ { Clp_Internal *cli = clp->internal; const char *percent; if (!bs) bs = new_build_string(); if (!bs) return 0; append_build_string(bs, cli->program_name, -1); append_build_string(bs, ": ", 2); for (percent = strchr(fmt, '%'); percent; percent = strchr(fmt, '%')) { append_build_string(bs, fmt, percent - fmt); switch (*++percent) { case 's': { char *s = va_arg(val, char *); if (s) append_build_string(bs, s, -1); else append_build_string(bs, "(null)", 6); break; } case 'c': { int c = va_arg(val, int); if (ENSURE_BUILD_STRING(bs, 4)) { if (c >= 32 && c <= 126) *bs->pos++ = c; else if (c < 32) { *bs->pos++ = '^'; *bs->pos++ = c + 64; } else { sprintf(bs->pos, "\\%03o", c); bs->pos += 4; } } break; } case 'd': { int d = va_arg(val, int); if (ENSURE_BUILD_STRING(bs, 32)) { sprintf(bs->pos, "%d", d); bs->pos = strchr(bs->pos, 0); } break; } case 'O': { Clp_Option *opt = cli->current_option; if (!opt) append_build_string(bs, "(no current option!)", -1); else if (cli->current_short) { append_build_string(bs, cli->option_chars, -1); if (ENSURE_BUILD_STRING(bs, 1)) *bs->pos++ = opt->short_name; } else if (cli->negated_by_no) { append_build_string(bs, cli->option_chars, -1); append_build_string(bs, "no-", 3); append_build_string(bs, opt->long_name, -1); } else { append_build_string(bs, cli->option_chars, -1); append_build_string(bs, opt->long_name, -1); } break; } case '%': if (ENSURE_BUILD_STRING(bs, 1)) *bs->pos++ = '%'; break; default: if (ENSURE_BUILD_STRING(bs, 2)) { *bs->pos++ = '%'; *bs->pos++ = *percent; } break; } fmt = ++percent; } append_build_string(bs, fmt, -1); append_build_string(bs, "\n", 1); return bs; } static void do_error(Clp_Parser *clp, Clp_BuildString *bs) { const char *text; if (bs && !bs->bad) { *bs->pos = 0; text = bs->text; } else text = "out of memory\n"; if (clp->internal->error_handler != 0) (*clp->internal->error_handler)(text); else fputs(text, stderr); } int Clp_OptionError(Clp_Parser *clp, const char *fmt, ...) { Clp_BuildString *bs; va_list val; va_start(val, fmt); bs = Clp_VaOptionError(clp, 0, fmt, val); va_end(val); do_error(clp, bs); free_build_string(bs); return 0; } static int ambiguity_error(Clp_Parser *clp, int ambiguous, int *ambiguous_values, Clp_Option *opt, const char *prefix, const char *fmt, ...) { Clp_BuildString *bs; int i; va_list val; va_start(val, fmt); bs = Clp_VaOptionError(clp, 0, fmt, val); if (!bs) goto done; append_build_string(bs, clp->internal->program_name, -1); append_build_string(bs, ": (Possibilities are", -1); for (i = 0; i < ambiguous && i < MAX_AMBIGUOUS_VALUES; i++) { int value = ambiguous_values[i]; const char *no_dash = ""; if (value < 0) value = -(value + 1), no_dash = "no-"; if (i == 0) append_build_string(bs, " ", 1); else if (i == ambiguous - 1) append_build_string(bs, (i == 1 ? " and " : ", and "), -1); else append_build_string(bs, ", ", 2); append_build_string(bs, prefix, -1); append_build_string(bs, no_dash, -1); append_build_string(bs, opt[value].long_name, -1); } if (ambiguous > MAX_AMBIGUOUS_VALUES) append_build_string(bs, ", and others", -1); append_build_string(bs, ".)\n", -1); va_end(val); done: do_error(clp, bs); free_build_string(bs); return 0; } static int copy_string(char *buf, int buflen, int bufpos, const char *what) { int l = strlen(what); if (l > buflen - bufpos - 1) l = buflen - bufpos - 1; memcpy(buf + bufpos, what, l); return l; } int Clp_CurOptionNameBuf(Clp_Parser *clp, char *buf, int buflen) { Clp_Internal *cli = clp->internal; Clp_Option *opt = cli->current_option; int pos = 0; if (!opt) pos += copy_string(buf, buflen, pos, "(no current option!)"); else if (cli->current_short) { pos += copy_string(buf, buflen, pos, cli->option_chars); if (pos < buflen - 1) buf[pos++] = opt->short_name; } else if (cli->negated_by_no) { pos += copy_string(buf, buflen, pos, cli->option_chars); pos += copy_string(buf, buflen, pos, "no-"); pos += copy_string(buf, buflen, pos, opt->long_name); } else { pos += copy_string(buf, buflen, pos, cli->option_chars); pos += copy_string(buf, buflen, pos, opt->long_name); } buf[pos] = 0; return pos; } const char * Clp_CurOptionName(Clp_Parser *clp) { static char buf[256]; Clp_CurOptionNameBuf(clp, buf, 256); return buf; } #ifdef __cplusplus } #endif xmahjongg-3.7/liblcdf/straccum.cc0000644000076400007640000000744610200602002014016 00000000000000// -*- related-file-name: "../include/lcdf/straccum.hh" -*- /* * straccum.{cc,hh} -- build up strings with operator<< * Eddie Kohler * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * Copyright (c) 2001-2005 Eddie Kohler * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include StringAccum::StringAccum(const char *s) : _s(0), _len(0), _cap(0) { *this << s; } StringAccum::StringAccum(const String &s) : _s(0), _len(0), _cap(0) { *this << s; } #ifdef HAVE_PERMSTRING StringAccum::StringAccum(PermString s) : _s(0), _len(0), _cap(0) { *this << s; } #endif void StringAccum::make_out_of_memory() { assert(_cap >= 0); delete[] _s; _s = reinterpret_cast(const_cast(String::out_of_memory_data())); _cap = -1; _len = 0; } bool StringAccum::grow(int want) { // can't append to out-of-memory strings if (_cap < 0) return false; int ncap = (_cap ? _cap * 2 : 128); while (ncap <= want) ncap *= 2; unsigned char *n = new unsigned char[ncap]; if (!n) { make_out_of_memory(); return false; } if (_s) memcpy(n, _s, _cap); delete[] _s; _s = n; _cap = ncap; return true; } const char * StringAccum::c_str() { if (_len < _cap || grow(_len)) _s[_len] = '\0'; return reinterpret_cast(_s); } String StringAccum::take_string() { int len = length(); if (len) { int capacity = _cap; return String::claim_string(reinterpret_cast(take_bytes()), len, capacity); } else if (out_of_memory()) return String::out_of_memory_string(); else return String(); } StringAccum & operator<<(StringAccum &sa, long i) { if (char *x = sa.reserve(24)) { int len = sprintf(x, "%ld", i); sa.forward(len); } return sa; } StringAccum & operator<<(StringAccum &sa, unsigned long u) { if (char *x = sa.reserve(24)) { int len = sprintf(x, "%lu", u); sa.forward(len); } return sa; } StringAccum & operator<<(StringAccum &sa, double d) { if (char *x = sa.reserve(256)) { int len = sprintf(x, "%.12g", d); sa.forward(len); } return sa; } StringAccum & StringAccum::snprintf(int n, const char *format, ...) { va_list val; va_start(val, format); if (char *x = reserve(n + 1)) { #ifdef HAVE_VSNPRINTF int len = vsnprintf(x, n + 1, format, val); #else int len = vsprintf(x, format, val); assert(len <= n); #endif forward(len); } va_end(val); return *this; } void StringAccum::append_break_lines(const String& text, int linelen, const String &leftmargin) { if (text.length() == 0) return; const char* line = text.begin(); const char* ends = text.end(); linelen -= leftmargin.length(); for (const char* s = line; s < ends; s++) { const char* start = s; while (s < ends && isspace(*s)) s++; const char* word = s; while (s < ends && !isspace(*s)) s++; if (s - line > linelen && start > line) { *this << leftmargin; append(line, start - line); *this << '\n'; line = word; } } if (line < text.end()) { *this << leftmargin; append(line, text.end() - line); *this << '\n'; } } xmahjongg-3.7/liblcdf/gifread.c0000664000076400007640000005430307622266063013462 00000000000000/* gifread.c - Functions to read GIFs. Copyright (C) 1997-9 Eddie Kohler, eddietwo@lcs.mit.edu This file is part of the GIF library. The GIF library is free software*. It is distributed under the GNU General Public License, version 2 or later; you can copy, distribute, or alter it at will, as long as this notice is kept intact and this source code is made available. There is no warranty, express or implied. *There is a patent on the LZW compression method used by GIFs, and included in gifwrite.c. Unisys, the patent holder, allows the compression algorithm to be used without a license in software distributed at no cost to the user. The decompression algorithm is not patented. */ #ifdef HAVE_CONFIG_H # include #elif !defined(__cplusplus) /* Assume we don't have inline by default */ # define inline #endif #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct { Gif_Stream *stream; Gif_Code *prefix; uint8_t *suffix; uint16_t *length; uint16_t width; uint16_t height; uint8_t *image; uint8_t *maximage; unsigned decodepos; Gif_ReadErrorHandler handler; void *handler_thunk; } Gif_Context; typedef struct Gif_Reader { FILE *f; const uint8_t *v; uint32_t w; uint32_t length; int is_record; int is_eoi; uint8_t (*byte_getter)(struct Gif_Reader *); void (*block_getter)(uint8_t *, uint32_t, struct Gif_Reader *); uint32_t (*offseter)(struct Gif_Reader *); int (*eofer)(struct Gif_Reader *); } Gif_Reader; #define gifgetc(grr) ((char)(*grr->byte_getter)(grr)) #define gifgetbyte(grr) ((*grr->byte_getter)(grr)) #define gifgetblock(ptr, size, grr) ((*grr->block_getter)(ptr, size, grr)) #define gifgetoffset(grr) ((*grr->offseter)(grr)) #define gifeof(grr) ((*grr->eofer)(grr)) static inline uint16_t gifgetunsigned(Gif_Reader *grr) { uint8_t one = gifgetbyte(grr); uint8_t two = gifgetbyte(grr); return one | (two << 8); } static uint8_t file_byte_getter(Gif_Reader *grr) { int i = getc(grr->f); return i == EOF ? 0 : (uint8_t)i; } static void file_block_getter(uint8_t *p, uint32_t s, Gif_Reader *grr) { fread(p, 1, s, grr->f); } static uint32_t file_offseter(Gif_Reader *grr) { return ftell(grr->f); } static int file_eofer(Gif_Reader *grr) { int c = getc(grr->f); if (c == EOF) return 1; else { ungetc(c, grr->f); return 0; } } static uint8_t record_byte_getter(Gif_Reader *grr) { return grr->w ? (grr->w--, *grr->v++) : 0; } static void record_block_getter(uint8_t *p, uint32_t s, Gif_Reader *grr) { if (s > grr->w) s = grr->w; memcpy(p, grr->v, s); grr->w -= s, grr->v += s; } static uint32_t record_offseter(Gif_Reader *grr) { return grr->length - grr->w; } static int record_eofer(Gif_Reader *grr) { return grr->w == 0; } static void make_data_reader(Gif_Reader *grr, const uint8_t *data, uint32_t length) { grr->v = data; grr->length = length; grr->w = length; grr->is_record = 1; grr->byte_getter = record_byte_getter; grr->block_getter = record_block_getter; grr->offseter = record_offseter; grr->eofer = record_eofer; } static void gif_read_error(Gif_Context *gfc, const char *error) { gfc->stream->errors++; if (gfc->handler) gfc->handler(error, gfc->stream->nimages, gfc->handler_thunk); } static uint8_t one_code(Gif_Context *gfc, Gif_Code code) { uint8_t *suffixes = gfc->suffix; Gif_Code *prefixes = gfc->prefix; uint8_t *ptr; int lastsuffix; uint16_t codelength = gfc->length[code]; gfc->decodepos += codelength; ptr = gfc->image + gfc->decodepos; if (ptr > gfc->maximage || !codelength) { gif_read_error(gfc, (!codelength ? "bad code" : "too much image data")); /* 5/26/98 It's not good enough simply to count an error, because in the read_image_data function, if code == next_code, we will store a byte in gfc->image[gfc->decodepos-1]. Thus, fix decodepos so it's w/in the image. */ gfc->decodepos = gfc->maximage - gfc->image; return 0; } /* codelength will always be greater than 0. */ do { lastsuffix = suffixes[code]; *--ptr = lastsuffix; code = prefixes[code]; } while (--codelength > 0); /* return the first pixel in the code, which, since we walked backwards through the code, was the last suffix we processed. */ return lastsuffix; } static int read_image_block(Gif_Reader *grr, uint8_t *buffer, int *bit_pos_store, int *bit_len_store, int bits_needed) { int bit_position = *bit_pos_store; int bit_length = *bit_len_store; uint8_t block_len; while (bit_position + bits_needed > bit_length) { /* Read in the next data block. */ if (bit_position >= 8) { /* Need to shift down the upper, unused part of `buffer' */ int i = bit_position / 8; buffer[0] = buffer[i]; buffer[1] = buffer[i+1]; bit_position -= i * 8; bit_length -= i * 8; } block_len = gifgetbyte(grr); GIF_DEBUG(("\nimage_block(%d)", block_len)); if (block_len == 0) return 0; gifgetblock(buffer + bit_length / 8, block_len, grr); bit_length += block_len * 8; } *bit_pos_store = bit_position; *bit_len_store = bit_length; return 1; } static void read_image_data(Gif_Context *gfc, Gif_Reader *grr) { /* we need a bit more than GIF_MAX_BLOCK in case a single code is split across blocks */ uint8_t buffer[GIF_MAX_BLOCK + 5]; int i; uint32_t accum; int bit_position; int bit_length; Gif_Code code; Gif_Code old_code; Gif_Code clear_code; Gif_Code eoi_code; Gif_Code next_code; #define CUR_BUMP_CODE (1 << bits_needed) #define CUR_CODE_MASK ((1 << bits_needed) - 1) int min_code_size; int bits_needed; gfc->decodepos = 0; min_code_size = gifgetbyte(grr); GIF_DEBUG(("\n\nmin_code_size(%d)", min_code_size)); if (min_code_size >= GIF_MAX_CODE_BITS) { gif_read_error(gfc, "min_code_size too big"); min_code_size = GIF_MAX_CODE_BITS - 1; } else if (min_code_size < 2) { gif_read_error(gfc, "min_code_size too small"); min_code_size = 2; } clear_code = 1 << min_code_size; for (code = 0; code < clear_code; code++) { gfc->prefix[code] = 49428; gfc->suffix[code] = (uint8_t)code; gfc->length[code] = 1; } eoi_code = clear_code + 1; next_code = eoi_code; bits_needed = min_code_size + 1; code = clear_code; bit_length = bit_position = 0; /* Thus the `Read in the next data block.' code below will be invoked on the first time through: exactly right! */ while (1) { old_code = code; /* GET A CODE INTO THE `code' VARIABLE. * * 9.Dec.1998 - Rather than maintain a byte pointer and a bit offset into * the current byte (and the processing associated with that), we maintain * one number: the offset, in bits, from the beginning of `buffer'. This * much cleaner choice was inspired by Patrick J. Naughton * 's GIF-reading code, which does the same thing. * His code distributed as part of XV in xvgif.c. */ if (bit_position + bits_needed > bit_length) /* Read in the next data block. */ if (!read_image_block(grr, buffer, &bit_position, &bit_length, bits_needed)) goto zero_length_block; i = bit_position / 8; accum = buffer[i] + (buffer[i+1] << 8); if (bits_needed >= 8) accum |= (buffer[i+2]) << 16; code = (Gif_Code)((accum >> (bit_position % 8)) & CUR_CODE_MASK); bit_position += bits_needed; GIF_DEBUG(("%d", code)); /* CHECK FOR SPECIAL OR BAD CODES: clear_code, eoi_code, or a code that is * too large. */ if (code == clear_code) { bits_needed = min_code_size + 1; next_code = eoi_code; continue; } else if (code == eoi_code) break; else if (code > next_code && next_code) { /* code > next_code: a (hopefully recoverable) error. Bug fix, 5/27: Do this even if old_code == clear_code, and set code to 0 to prevent errors later. (If we didn't zero code, we'd later set old_code = code; then we had old_code >= next_code; so the prefixes array got all screwed up!) */ gif_read_error(gfc, "unexpected code"); code = 0; } /* PROCESS THE CURRENT CODE and define the next code. If no meaningful * next code should be defined, then we have set next_code to either * `eoi_code' or `clear_code' -- so we'll store useless prefix/suffix data * in a useless place. */ /* *First,* set up the prefix and length for the next code (in case code == next_code). */ gfc->prefix[next_code] = old_code; gfc->length[next_code] = gfc->length[old_code] + 1; /* Use one_code to process code. It's nice that it returns the first pixel in code: that's what we need. */ gfc->suffix[next_code] = one_code(gfc, code); /* Special processing if code == next_code: we didn't know code's final suffix when we called one_code, but we do now. */ if (code == next_code) gfc->image[gfc->decodepos - 1] = gfc->suffix[next_code]; /* Increment next_code except for the `clear_code' special case (that's when we're reading at the end of a GIF) */ if (next_code != clear_code) { next_code++; if (next_code == CUR_BUMP_CODE) { if (bits_needed < GIF_MAX_CODE_BITS) bits_needed++; else next_code = clear_code; } } } /* read blocks until zero-length reached. */ i = gifgetbyte(grr); GIF_DEBUG(("\nafter_image(%d)\n", i)); while (i > 0) { gifgetblock(buffer, i, grr); i = gifgetbyte(grr); GIF_DEBUG(("\nafter_image(%d)\n", i)); } /* zero-length block reached. */ zero_length_block: if (gfc->image + gfc->decodepos < gfc->maximage) gif_read_error(gfc, "not enough image data for image size"); else if (gfc->image + gfc->decodepos > gfc->maximage) gif_read_error(gfc, "too much image data for image size"); } static Gif_Colormap * read_color_table(int size, Gif_Reader *grr) { Gif_Colormap *gfcm = Gif_NewFullColormap(size, size); Gif_Color *c; if (!gfcm) return 0; GIF_DEBUG(("colormap(%d)", size)); for (c = gfcm->col; size; size--, c++) { c->red = gifgetbyte(grr); c->green = gifgetbyte(grr); c->blue = gifgetbyte(grr); c->haspixel = 0; } return gfcm; } static int read_logical_screen_descriptor(Gif_Stream *gfs, Gif_Reader *grr) /* returns 0 on memory error */ { uint8_t packed; /* we don't care about logical screen width or height */ gfs->screen_width = gifgetunsigned(grr); gfs->screen_height = gifgetunsigned(grr); packed = gifgetbyte(grr); gfs->background = gifgetbyte(grr); /* don't care about pixel aspect ratio */ gifgetbyte(grr); if (packed & 0x80) { /* have a global color table */ int ncol = 1 << ((packed & 0x07) + 1); gfs->global = read_color_table(ncol, grr); if (!gfs->global) return 0; gfs->global->refcount = 1; } return 1; } static int read_compressed_image(Gif_Image *gfi, Gif_Reader *grr, int read_flags) { if (grr->is_record) { const uint8_t *first = grr->v; uint32_t pos; /* scan over image */ pos = 1; /* skip min code size */ while (pos < grr->w) { int amt = grr->v[pos]; pos += amt + 1; if (amt == 0) break; } if (pos > grr->w) pos = grr->w; gfi->compressed_len = pos; if (read_flags & GIF_READ_CONST_RECORD) { gfi->compressed = (uint8_t *)first; gfi->free_compressed = 0; } else { gfi->compressed = Gif_NewArray(uint8_t, gfi->compressed_len); gfi->free_compressed = Gif_DeleteArrayFunc; if (!gfi->compressed) return 0; memcpy(gfi->compressed, first, gfi->compressed_len); } /* move reader over that image */ grr->v += pos; grr->w -= pos; } else { /* non-record; have to read it block by block. */ uint32_t comp_cap = 1024; uint32_t comp_len; uint8_t *comp = Gif_NewArray(uint8_t, comp_cap); int i; if (!comp) return 0; /* min code size */ i = gifgetbyte(grr); comp[0] = i; comp_len = 1; i = gifgetbyte(grr); while (i > 0) { /* add 2 before check so we don't have to check after loop when appending 0 block */ if (comp_len + i + 2 > comp_cap) { comp_cap *= 2; Gif_ReArray(comp, uint8_t, comp_cap); if (!comp) return 0; } comp[comp_len] = i; gifgetblock(comp + comp_len + 1, i, grr); comp_len += i + 1; i = gifgetbyte(grr); } comp[comp_len++] = 0; gfi->compressed = comp; gfi->compressed_len = comp_len; gfi->free_compressed = Gif_DeleteArrayFunc; } return 1; } static int uncompress_image(Gif_Context *gfc, Gif_Image *gfi, Gif_Reader *grr) { if (!Gif_CreateUncompressedImage(gfi)) return 0; gfc->width = gfi->width; gfc->height = gfi->height; gfc->image = gfi->image_data; gfc->maximage = gfi->image_data + gfi->width * gfi->height; read_image_data(gfc, grr); return 1; } int Gif_FullUncompressImage(Gif_Image *gfi, Gif_ReadErrorHandler h, void *hthunk) { Gif_Context gfc; Gif_Stream fake_gfs; Gif_Reader grr; int ok = 0; /* return right away if image is already uncompressed. this might screw over people who expect re-uncompressing to restore the compressed version. */ if (gfi->img) return 1; if (gfi->image_data) /* we have uncompressed data, but not an `img' array; this shouldn't happen */ return 0; fake_gfs.errors = 0; gfc.stream = &fake_gfs; gfc.prefix = Gif_NewArray(Gif_Code, GIF_MAX_CODE); gfc.suffix = Gif_NewArray(uint8_t, GIF_MAX_CODE); gfc.length = Gif_NewArray(uint16_t, GIF_MAX_CODE); gfc.handler = h; gfc.handler_thunk = hthunk; if (gfi && gfc.prefix && gfc.suffix && gfc.length && gfi->compressed) { make_data_reader(&grr, gfi->compressed, gfi->compressed_len); ok = uncompress_image(&gfc, gfi, &grr); } Gif_DeleteArray(gfc.prefix); Gif_DeleteArray(gfc.suffix); Gif_DeleteArray(gfc.length); return ok && !fake_gfs.errors; } static int read_image(Gif_Reader *grr, Gif_Context *gfc, Gif_Image *gfi, int read_flags) /* returns 0 on memory error */ { uint8_t packed; gfi->left = gifgetunsigned(grr); gfi->top = gifgetunsigned(grr); gfi->width = gifgetunsigned(grr); gfi->height = gifgetunsigned(grr); packed = gifgetbyte(grr); GIF_DEBUG(("<%ux%u>", gfi->width, gfi->height)); if (packed & 0x80) { /* have a local color table */ int ncol = 1 << ((packed & 0x07) + 1); gfi->local = read_color_table(ncol, grr); if (!gfi->local) return 0; gfi->local->refcount = 1; } gfi->interlace = (packed & 0x40) != 0; /* Keep the compressed data if asked */ if (read_flags & GIF_READ_COMPRESSED) { if (!read_compressed_image(gfi, grr, read_flags)) return 0; if (read_flags & GIF_READ_UNCOMPRESSED) { Gif_Reader new_grr; make_data_reader(&new_grr, gfi->compressed, gfi->compressed_len); if (!uncompress_image(gfc, gfi, &new_grr)) return 0; } } else if (read_flags & GIF_READ_UNCOMPRESSED) { if (!uncompress_image(gfc, gfi, grr)) return 0; } else { /* skip over the image */ uint8_t buffer[GIF_MAX_BLOCK]; int i = gifgetbyte(grr); while (i > 0) { gifgetblock(buffer, i, grr); i = gifgetbyte(grr); } } return 1; } static void read_graphic_control_extension(Gif_Context *gfc, Gif_Image *gfi, Gif_Reader *grr) { uint8_t len; uint8_t crap[GIF_MAX_BLOCK]; len = gifgetbyte(grr); if (len == 4) { uint8_t packed = gifgetbyte(grr); gfi->disposal = (packed >> 2) & 0x07; gfi->delay = gifgetunsigned(grr); gfi->transparent = gifgetbyte(grr); if (!(packed & 0x01)) /* transparent color doesn't exist */ gfi->transparent = -1; len -= 4; } if (len > 0) { gif_read_error(gfc, "odd graphic extension format"); gifgetblock(crap, len, grr); } len = gifgetbyte(grr); while (len > 0) { gif_read_error(gfc, "odd graphic extension format"); gifgetblock(crap, len, grr); len = gifgetbyte(grr); } } static char *last_name; static char * suck_data(char *data, int *store_len, Gif_Reader *grr) { uint8_t len = gifgetbyte(grr); int total_len = 0; while (len > 0) { Gif_ReArray(data, char, total_len + len + 1); if (!data) return 0; gifgetblock((uint8_t *)data, len, grr); total_len += len; data[total_len] = 0; len = gifgetbyte(grr); } if (store_len) *store_len = total_len; return data; } static int read_unknown_extension(Gif_Stream *gfs, int kind, char *app_name, int position, Gif_Reader *grr) { uint8_t block_len = gifgetbyte(grr); uint8_t *data = 0; uint8_t data_len = 0; Gif_Extension *gfex = 0; while (block_len > 0) { if (data) Gif_ReArray(data, uint8_t, data_len + block_len + 1); else data = Gif_NewArray(uint8_t, block_len + 1); if (!data) goto done; gifgetblock(data + data_len, block_len, grr); data_len += block_len; block_len = gifgetbyte(grr); } if (data) gfex = Gif_NewExtension(kind, app_name); if (gfex) { gfex->data = data; gfex->length = data_len; data[data_len] = 0; Gif_AddExtension(gfs, gfex, position); } done: if (!gfex) Gif_DeleteArray(data); while (block_len > 0) { uint8_t buffer[GIF_MAX_BLOCK]; gifgetblock(buffer, block_len, grr); block_len = gifgetbyte(grr); } return gfex != 0; } static int read_application_extension(Gif_Context *gfc, int position, Gif_Reader *grr) { Gif_Stream *gfs = gfc->stream; uint8_t buffer[GIF_MAX_BLOCK + 1]; uint8_t len = gifgetbyte(grr); gifgetblock(buffer, len, grr); /* Read the Netscape loop extension. */ if (len == 11 && memcmp(buffer, "NETSCAPE2.0", 11) == 0) { len = gifgetbyte(grr); if (len == 3) { gifgetbyte(grr); /* throw away the 1 */ gfs->loopcount = gifgetunsigned(grr); len = gifgetbyte(grr); if (len) gif_read_error(gfc, "bad loop extension"); } else gif_read_error(gfc, "bad loop extension"); while (len > 0) { gifgetblock(buffer, len, grr); len = gifgetbyte(grr); } return 1; } else { buffer[len] = 0; return read_unknown_extension(gfs, 0xFF, (char *)buffer, position, grr); } } static int read_comment_extension(Gif_Image *gfi, Gif_Reader *grr) { int len; Gif_Comment *gfcom = gfi->comment; char *m = suck_data(0, &len, grr); if (m) { if (!gfcom) gfcom = gfi->comment = Gif_NewComment(); if (!gfcom || !Gif_AddCommentTake(gfcom, m, len)) return 0; } return 1; } static Gif_Stream * read_gif(Gif_Reader *grr, int read_flags, Gif_ReadErrorHandler handler, void *handler_thunk) { Gif_Stream *gfs; Gif_Image *gfi; Gif_Image *new_gfi; Gif_Context gfc; int extension_position = 0; int unknown_block_type = 0; if (gifgetc(grr) != 'G' || gifgetc(grr) != 'I' || gifgetc(grr) != 'F') return 0; (void)gifgetc(grr); (void)gifgetc(grr); (void)gifgetc(grr); gfs = Gif_NewStream(); gfi = Gif_NewImage(); gfc.stream = gfs; gfc.prefix = Gif_NewArray(Gif_Code, GIF_MAX_CODE); gfc.suffix = Gif_NewArray(uint8_t, GIF_MAX_CODE); gfc.length = Gif_NewArray(uint16_t, GIF_MAX_CODE); gfc.handler = handler; gfc.handler_thunk = handler_thunk; if (!gfs || !gfi || !gfc.prefix || !gfc.suffix || !gfc.length) goto done; GIF_DEBUG(("\nGIF")); if (!read_logical_screen_descriptor(gfs, grr)) goto done; GIF_DEBUG(("logscrdesc")); while (!gifeof(grr)) { uint8_t block = gifgetbyte(grr); switch (block) { case ',': /* image block */ GIF_DEBUG(("imageread %d", gfs->nimages)); gfi->identifier = last_name; last_name = 0; if (!read_image(grr, &gfc, gfi, read_flags) || !Gif_AddImage(gfs, gfi)) { Gif_DeleteImage(gfi); goto done; } new_gfi = Gif_NewImage(); if (!new_gfi) goto done; gfi = new_gfi; extension_position++; break; case ';': /* terminator */ GIF_DEBUG(("term\n")); goto done; case '!': /* extension */ block = gifgetbyte(grr); GIF_DEBUG(("ext(0x%02X)", block)); switch (block) { case 0xF9: read_graphic_control_extension(&gfc, gfi, grr); break; case 0xCE: last_name = suck_data(last_name, 0, grr); break; case 0xFE: if (!read_comment_extension(gfi, grr)) goto done; break; case 0xFF: read_application_extension(&gfc, extension_position, grr); break; default: read_unknown_extension(gfs, block, 0, extension_position, grr); break; } break; default: if (!unknown_block_type) { char buf[256]; sprintf(buf, "unknown block type %d at file offset %d", block, gifgetoffset(grr) - 1); gif_read_error(&gfc, buf); unknown_block_type = 1; } break; } } done: /* Move comments after last image into stream. */ gfs->comment = gfi->comment; gfi->comment = 0; Gif_DeleteImage(gfi); Gif_DeleteArray(last_name); Gif_DeleteArray(gfc.prefix); Gif_DeleteArray(gfc.suffix); Gif_DeleteArray(gfc.length); if (gfs->errors == 0 && !(read_flags & GIF_READ_TRAILING_GARBAGE_OK) && !grr->eofer(grr)) { gif_read_error(&gfc, "trailing garbage after GIF ignored"); /* but clear error count, since the GIF itself was all right */ gfs->errors = 0; } return gfs; } Gif_Stream * Gif_FullReadFile(FILE *f, int read_flags, Gif_ReadErrorHandler h, void *hthunk) { Gif_Reader grr; if (!f) return 0; grr.f = f; grr.is_record = 0; grr.byte_getter = file_byte_getter; grr.block_getter = file_block_getter; grr.offseter = file_offseter; grr.eofer = file_eofer; return read_gif(&grr, read_flags, h, hthunk); } Gif_Stream * Gif_FullReadRecord(const Gif_Record *gifrec, int read_flags, Gif_ReadErrorHandler h, void *hthunk) { Gif_Reader grr; if (!gifrec) return 0; make_data_reader(&grr, gifrec->data, gifrec->length); if (read_flags & GIF_READ_CONST_RECORD) read_flags |= GIF_READ_COMPRESSED; return read_gif(&grr, read_flags, h, hthunk); } #undef Gif_ReadFile #undef Gif_ReadRecord Gif_Stream * Gif_ReadFile(FILE *f) { return Gif_FullReadFile(f, GIF_READ_UNCOMPRESSED, 0, 0); } Gif_Stream * Gif_ReadRecord(const Gif_Record *gifrec) { return Gif_FullReadRecord(gifrec, GIF_READ_UNCOMPRESSED, 0, 0); } #ifdef __cplusplus } #endif xmahjongg-3.7/liblcdf/gifx.c0000664000076400007640000004715607622266063013026 00000000000000/* gifx.c - Functions to turn GIFs in memory into X Pixmaps. Copyright (C) 1997-9 Eddie Kohler, eddietwo@lcs.mit.edu This file is part of the GIF library. The GIF library is free software*. It is distributed under the GNU General Public License, version 2 or later; you can copy, distribute, or alter it at will, as long as this notice is kept intact and this source code is made available. There is no warranty, express or implied. *There is a patent on the LZW compression method used by GIFs, and included in gifwrite.c. Unisys, the patent holder, allows the compression algorithm to be used without a license in software distributed at no cost to the user. The decompression algorithm is not patented. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define SAFELS(a,b) ((b) < 0 ? (a) >> -(b) : (a) << (b)) struct Gif_XColormap { Gif_XContext *x_context; Gif_Colormap *colormap; int allocated; int claimed; uint16_t npixels; unsigned long *pixels; Gif_XColormap *next; }; static unsigned long crap_pixels[256]; static void load_closest(Gif_XContext *gfx) { XColor *color; uint16_t ncolor; uint16_t ncolormap; int i; if (gfx->closest) return; ncolormap = ncolor = gfx->ncolormap; if (ncolor > 256) ncolor = 256; color = Gif_NewArray(XColor, ncolor); if (ncolormap > 256) for (i = 0; i < ncolor; i++) color[i].pixel = (rand() >> 4) % ncolormap; else for (i = 0; i < ncolor; i++) color[i].pixel = i; XQueryColors(gfx->display, gfx->colormap, color, ncolor); gfx->closest = Gif_NewArray(Gif_Color, ncolor); for (i = 0; i < ncolor; i++) { Gif_Color *c = &gfx->closest[i]; c->haspixel = 1; c->red = color[i].red >> 8; c->green = color[i].green >> 8; c->blue = color[i].blue >> 8; c->pixel = color[i].pixel; } gfx->nclosest = ncolor; Gif_DeleteArray(color); } static unsigned long allocate_closest(Gif_XContext *gfx, Gif_Color *c) { Gif_Color *closer; Gif_Color *got = 0; uint32_t distance = 0x4000000; int i; load_closest(gfx); for (i = 0, closer = gfx->closest; i < gfx->nclosest; i++, closer++) { int redd = c->red - closer->red; int greend = c->green - closer->green; int blued = c->blue - closer->blue; uint32_t d = redd * redd + greend * greend + blued * blued; if (d < distance) { distance = d; got = closer; } } if (!got) return 0; if (!got->haspixel) { XColor xcol; xcol.red = got->red | (got->red << 8); xcol.green = got->green | (got->green << 8); xcol.blue = got->blue | (got->blue << 8); if (XAllocColor(gfx->display, gfx->colormap, &xcol) == 0) { /* Probably was a read/write color cell. Get rid of it!! */ *got = gfx->closest[gfx->nclosest - 1]; gfx->nclosest--; return allocate_closest(gfx, c); } got->pixel = xcol.pixel; got->haspixel = 1; } return got->pixel; } static void allocate_colors(Gif_XColormap *gfxc) { Gif_XContext *gfx = gfxc->x_context; uint16_t size = gfxc->colormap->ncol; Gif_Color *c = gfxc->colormap->col; unsigned long *pixels = gfxc->pixels; XColor xcol; int i; if (!gfxc->allocated) { if (size > gfxc->npixels) size = gfxc->npixels; for (i = 0; i < size; i++, c++) { xcol.red = c->red | (c->red << 8); xcol.green = c->green | (c->green << 8); xcol.blue = c->blue | (c->blue << 8); if (XAllocColor(gfx->display, gfx->colormap, &xcol)) pixels[i] = xcol.pixel; else pixels[i] = allocate_closest(gfx, c); } gfxc->allocated = 1; gfxc->claimed = 0; } } static void deallocate_colors(Gif_XColormap *gfxc) { Gif_XContext *gfx = gfxc->x_context; if (gfxc->allocated && !gfxc->claimed) { XFreeColors(gfx->display, gfx->colormap, gfxc->pixels, gfxc->npixels, 0); gfxc->allocated = 0; } } static Gif_XColormap * create_x_colormap_extension(Gif_XContext *gfx, Gif_Colormap *gfcm) { Gif_XColormap *gfxc; unsigned long *pixels; if (!gfcm) return 0; gfxc = Gif_New(Gif_XColormap); pixels = gfxc ? Gif_NewArray(unsigned long, 256) : 0; if (pixels) { gfxc->x_context = gfx; gfxc->colormap = gfcm; gfxc->allocated = 0; gfxc->npixels = gfcm->ncol; gfxc->pixels = pixels; gfxc->next = gfx->xcolormap; gfx->xcolormap = gfxc; return gfxc; } else { Gif_Delete(gfxc); Gif_DeleteArray(pixels); return 0; } } static Gif_XColormap * find_x_colormap_extension(Gif_XContext *gfx, Gif_Colormap *gfcm, int create) { Gif_XColormap *gfxc = gfx->xcolormap; if (!gfcm) return 0; while (gfxc) { if (gfxc->colormap == gfcm) return gfxc; gfxc = gfxc->next; } if (create) return create_x_colormap_extension(gfx, gfcm); else return 0; } int Gif_XAllocateColors(Gif_XContext *gfx, Gif_Colormap *gfcm) { Gif_XColormap *gfxc = find_x_colormap_extension(gfx, gfcm, 1); if (gfxc) { allocate_colors(gfxc); return 1; } else return 0; } void Gif_XDeallocateColors(Gif_XContext *gfx, Gif_Colormap *gfcm) { Gif_XColormap *gfxc = find_x_colormap_extension(gfx, gfcm, 0); if (gfxc) deallocate_colors(gfxc); } unsigned long * Gif_XClaimStreamColors(Gif_XContext *gfx, Gif_Stream *gfs, int *np_store) { int i; int npixels = 0; unsigned long *pixels; Gif_Colormap *global = gfs->global; *np_store = 0; for (i = 0; i < gfs->nimages; i++) { Gif_Image *gfi = gfs->images[i]; Gif_Colormap *gfcm = (gfi->local ? gfi->local : global); Gif_XColormap *gfxc = find_x_colormap_extension(gfx, gfcm, 0); if (gfxc && gfxc->allocated && gfxc->claimed == 0) { gfxc->claimed = 2; npixels += gfxc->npixels; if (gfcm == global) global = 0; } } if (!npixels) return 0; pixels = Gif_NewArray(unsigned long, npixels); if (!pixels) return 0; *np_store = npixels; npixels = 0; global = gfs->global; for (i = 0; i < gfs->nimages; i++) { Gif_Image *gfi = gfs->images[i]; Gif_Colormap *gfcm = (gfi->local ? gfi->local : global); Gif_XColormap *gfxc = find_x_colormap_extension(gfx, gfcm, 0); if (gfxc && gfxc->allocated && gfxc->claimed == 2) { memcpy(pixels + npixels, gfxc->pixels, gfxc->npixels); npixels += gfxc->npixels; gfxc->claimed = 1; if (gfcm == global) global = 0; } } return pixels; } /* Getting pixmaps */ #define BYTESIZE 8 static int put_sub_image_colormap(Gif_XContext *gfx, Gif_Image *gfi, Gif_Colormap *gfcm, int left, int top, int width, int height, Pixmap pixmap, int pixmap_x, int pixmap_y) { XImage *ximage; uint8_t *xdata; int i, j, k; int bytes_per_line; unsigned long saved_transparent = 0; int release_uncompressed = 0; uint16_t nct; unsigned long *pixels; /* Find the correct image and colormap */ if (!gfi) return 0; if (!gfx->image_gc) gfx->image_gc = XCreateGC(gfx->display, pixmap, 0, 0); if (!gfx->image_gc) return 0; /* Make sure the image is uncompressed */ if (!gfi->img && !gfi->image_data && gfi->compressed) { Gif_UncompressImage(gfi); release_uncompressed = 1; } /* Check subimage dimensions */ if (width <= 0 || height <= 0 || left < 0 || top < 0 || left+width <= 0 || top+height <= 0 || left+width > gfi->width || top+height > gfi->height) return 0; /* Allocate colors from the colormap; make sure the transparent color * has the given pixel value */ if (gfcm) { Gif_XColormap *gfxc = find_x_colormap_extension(gfx, gfcm, 1); if (!gfxc) return 0; allocate_colors(gfxc); pixels = gfxc->pixels; nct = gfxc->npixels; } else { for (i = 0; i < 256; i++) crap_pixels[i] = gfx->foreground_pixel; pixels = crap_pixels; nct = 256; } if (gfi->transparent >= 0 && gfi->transparent < 256) { saved_transparent = pixels[ gfi->transparent ]; pixels[ gfi->transparent ] = gfx->transparent_pixel; } /* Set up the X image */ if (gfx->depth <= 8) i = 8; else if (gfx->depth <= 16) i = 16; else i = 32; ximage = XCreateImage(gfx->display, gfx->visual, gfx->depth, gfx->depth == 1 ? XYBitmap : ZPixmap, 0, NULL, width, height, i, 0); ximage->bitmap_bit_order = ximage->byte_order = LSBFirst; bytes_per_line = ximage->bytes_per_line; xdata = Gif_NewArray(uint8_t, bytes_per_line * height); ximage->data = (char *)xdata; /* The main loop */ if (ximage->bits_per_pixel % 8 == 0) { /* Optimize for cases where a pixel is exactly one or more bytes */ int bytes_per_pixel = ximage->bits_per_pixel / 8; for (j = 0; j < height; j++) { uint8_t *line = gfi->img[top + j] + left; uint8_t *writer = xdata + bytes_per_line * j; for (i = 0; i < width; i++) { unsigned long pixel; if (line[i] < nct) pixel = pixels[line[i]]; else pixel = pixels[0]; for (k = 0; k < bytes_per_pixel; k++) { *writer++ = pixel; pixel >>= 8; } } } } else { /* Other bits-per-pixel */ int bits_per_pixel = ximage->bits_per_pixel; uint32_t bits_per_pixel_mask = (1UL << bits_per_pixel) - 1; for (j = 0; j < height; j++) { int imshift = 0; uint32_t impixel = 0; uint8_t *line = gfi->img[top + j] + left; uint8_t *writer = xdata + bytes_per_line * j; for (i = 0; i < width; i++) { unsigned long pixel; if (line[i] < nct) pixel = pixels[line[i]]; else pixel = pixels[0]; impixel |= SAFELS(pixel & bits_per_pixel_mask, imshift); while (imshift + bits_per_pixel >= BYTESIZE) { *writer++ = impixel; imshift -= BYTESIZE; impixel = SAFELS(pixel, imshift); } imshift += bits_per_pixel; } if (imshift) *writer++ = impixel; } } /* Restore saved transparent pixel value */ if (gfi->transparent >= 0 && gfi->transparent < 256) pixels[ gfi->transparent ] = saved_transparent; /* Put it onto the pixmap */ XPutImage(gfx->display, pixmap, gfx->image_gc, ximage, 0, 0, pixmap_x, pixmap_y, width, height); Gif_DeleteArray(xdata); ximage->data = 0; /* avoid freeing it again in XDestroyImage */ XDestroyImage(ximage); if (release_uncompressed) Gif_ReleaseUncompressedImage(gfi); return 1; } Pixmap Gif_XSubImageColormap(Gif_XContext *gfx, Gif_Image *gfi, Gif_Colormap *gfcm, int left, int top, int width, int height) { Pixmap pixmap = XCreatePixmap(gfx->display, gfx->drawable, width, height, gfx->depth); if (pixmap) { if (put_sub_image_colormap(gfx, gfi, gfcm, left, top, width, height, pixmap, 0, 0)) return pixmap; else XFreePixmap(gfx->display, pixmap); } return None; } Pixmap Gif_XImage(Gif_XContext *gfx, Gif_Stream *gfs, Gif_Image *gfi) { Gif_Colormap *gfcm; if (!gfi && gfs->nimages) gfi = gfs->images[0]; if (!gfi) return None; gfcm = gfi->local; if (!gfcm) gfcm = gfs->global; return Gif_XSubImageColormap(gfx, gfi, gfcm, 0, 0, gfi->width, gfi->height); } Pixmap Gif_XImageColormap(Gif_XContext *gfx, Gif_Stream *gfs, Gif_Colormap *gfcm, Gif_Image *gfi) { if (!gfi && gfs->nimages) gfi = gfs->images[0]; if (!gfi) return None; return Gif_XSubImageColormap(gfx, gfi, gfcm, 0, 0, gfi->width, gfi->height); } Pixmap Gif_XSubImage(Gif_XContext *gfx, Gif_Stream *gfs, Gif_Image *gfi, int left, int top, int width, int height) { Gif_Colormap *gfcm; if (!gfi && gfs->nimages) gfi = gfs->images[0]; if (!gfi) return None; gfcm = gfi->local; if (!gfcm) gfcm = gfs->global; return Gif_XSubImageColormap(gfx, gfi, gfcm, left, top, width, height); } Pixmap Gif_XSubMask(Gif_XContext *gfx, Gif_Image *gfi, int left, int top, int width, int height) { Pixmap pixmap = None; XImage *ximage; uint8_t *xdata; int i, j; int transparent; int bytes_per_line; int release_uncompressed = 0; /* Find the correct image */ if (!gfi) return None; /* Check subimage dimensions */ if (width <= 0 || height <= 0 || left < 0 || top < 0 || left+width <= 0 || top+height <= 0 || left+width > gfi->width || top+height > gfi->height) return None; /* Make sure the image is uncompressed */ if (!gfi->img && !gfi->image_data && gfi->compressed) { Gif_UncompressImage(gfi); release_uncompressed = 1; } /* Create the X image */ ximage = XCreateImage(gfx->display, gfx->visual, 1, XYBitmap, 0, NULL, width, height, 8, 0); ximage->bitmap_bit_order = ximage->byte_order = LSBFirst; bytes_per_line = ximage->bytes_per_line; xdata = Gif_NewArray(uint8_t, bytes_per_line * height); ximage->data = (char *)xdata; transparent = gfi->transparent; /* The main loop */ for (j = 0; j < height; j++) { int imshift = 0; uint32_t impixel = 0; uint8_t *line = gfi->img[top + j] + left; uint8_t *writer = xdata + bytes_per_line * j; for (i = 0; i < width; i++) { if (line[i] == transparent) impixel |= 1 << imshift; if (++imshift >= BYTESIZE) { *writer++ = impixel; imshift = 0; impixel = 0; } } if (imshift) *writer++ = impixel; } /* Create the pixmap */ pixmap = XCreatePixmap(gfx->display, gfx->drawable, width, height, 1); if (!gfx->mask_gc) gfx->mask_gc = XCreateGC(gfx->display, pixmap, 0, 0); if (pixmap && gfx->mask_gc) XPutImage(gfx->display, pixmap, gfx->mask_gc, ximage, 0, 0, 0, 0, width, height); Gif_DeleteArray(xdata); ximage->data = 0; /* avoid freeing it again in XDestroyImage */ XDestroyImage(ximage); if (release_uncompressed) Gif_ReleaseUncompressedImage(gfi); return pixmap; } Pixmap Gif_XMask(Gif_XContext *gfx, Gif_Stream *gfs, Gif_Image *gfi) { if (!gfi && gfs->nimages) gfi = gfs->images[0]; if (!gfi) return None; return Gif_XSubMask(gfx, gfi, 0, 0, gfi->width, gfi->height); } Pixmap Gif_XNextImage(Gif_XContext *gfx, Pixmap last_last, Pixmap last, Gif_Stream *gfs, int n) { Pixmap pixmap = None, image = None, mask = None; Gif_Image *gfi = gfs->images[n]; Gif_Image *last_gfi = (n > 0 ? gfs->images[n-1] : 0); Gif_Colormap *gfcm = (gfi->local ? gfi->local : gfs->global); unsigned long bg_pixel; unsigned long old_transparent = gfx->transparent_pixel; if (gfs->screen_width == 0 || gfs->screen_height == 0) return None; if (gfi->width == gfs->screen_width && gfi->height == gfs->screen_height && gfi->left == 0 && gfi->top == 0 && gfi->transparent < 0) return Gif_XImage(gfx, gfs, gfi); /* create the pixmap */ pixmap = XCreatePixmap(gfx->display, gfx->drawable, gfs->screen_width, gfs->screen_height, gfx->depth); if (!pixmap) goto error_exit; /* find background color if necessary */ if (last == None || (last_gfi && last_gfi->disposal == GIF_DISPOSAL_BACKGROUND)) { /* find bg_pixel */ if (gfs->global && gfs->background < gfs->global->ncol && gfs->images[0]->transparent < 0) { Gif_XColormap *gfxc = find_x_colormap_extension(gfx, gfcm, 1); if (!gfxc) return None; allocate_colors(gfxc); bg_pixel = gfxc->pixels[gfs->background]; } else bg_pixel = old_transparent; /* install it as the foreground color on gfx->image_gc */ if (!gfx->image_gc) gfx->image_gc = XCreateGC(gfx->display, pixmap, 0, 0); if (!gfx->image_gc) goto error_exit; XSetForeground(gfx->display, gfx->image_gc, bg_pixel); gfx->transparent_pixel = bg_pixel; } /* if there is no `last' then we need special handling */ if (last == None || (last_gfi && last_gfi->width == gfs->screen_width && last_gfi->height == gfs->screen_height && last_gfi->left == 0 && last_gfi->top == 0 && last_gfi->disposal == GIF_DISPOSAL_BACKGROUND)) { XFillRectangle(gfx->display, pixmap, gfx->image_gc, 0, 0, gfs->screen_width, gfs->screen_height); if (!put_sub_image_colormap(gfx, gfi, gfcm, 0, 0, gfi->width, gfi->height, pixmap, gfi->left, gfi->top)) goto error_exit; return pixmap; } /* use the disposal to create the intermediate image */ XCopyArea(gfx->display, last, pixmap, gfx->image_gc, 0, 0, gfs->screen_width, gfs->screen_height, 0, 0); if (last_last != None && last_gfi->disposal == GIF_DISPOSAL_PREVIOUS) XCopyArea(gfx->display, last_last, pixmap, gfx->image_gc, last_gfi->left, last_gfi->top, last_gfi->width, last_gfi->height, last_gfi->left, last_gfi->top); else if (last_gfi->disposal == GIF_DISPOSAL_BACKGROUND) XFillRectangle(gfx->display, pixmap, gfx->image_gc, last_gfi->left, last_gfi->top, last_gfi->width, last_gfi->height); /* apply image */ if (gfi->transparent < 0) { if (!put_sub_image_colormap(gfx, gfi, gfcm, 0, 0, gfi->width, gfi->height, pixmap, gfi->left, gfi->top)) goto error_exit; } else { image = Gif_XImage(gfx, gfs, gfi); mask = Gif_XMask(gfx, gfs, gfi); if (image == None || mask == None) goto error_exit; XSetClipMask(gfx->display, gfx->image_gc, mask); XSetClipOrigin(gfx->display, gfx->image_gc, gfi->left, gfi->top); XCopyArea(gfx->display, image, pixmap, gfx->image_gc, 0, 0, gfi->width, gfi->height, gfi->left, gfi->top); XSetClipMask(gfx->display, gfx->image_gc, None); XFreePixmap(gfx->display, image); XFreePixmap(gfx->display, mask); } gfx->transparent_pixel = old_transparent; return pixmap; error_exit: if (pixmap) XFreePixmap(gfx->display, pixmap); if (image) XFreePixmap(gfx->display, image); if (mask) XFreePixmap(gfx->display, mask); gfx->transparent_pixel = old_transparent; return None; } /** CREATING AND DESTROYING XCONTEXTS **/ static void delete_xcolormap(Gif_XColormap *gfxc) { Gif_XContext *gfx = gfxc->x_context; Gif_XColormap *prev = 0, *trav = gfx->xcolormap; while (trav != gfxc && trav) { prev = trav; trav = trav->next; } if (gfx->free_deleted_colormap_pixels) deallocate_colors(gfxc); if (prev) prev->next = gfxc->next; else gfx->xcolormap = gfxc->next; Gif_DeleteArray(gfxc->pixels); Gif_Delete(gfxc); } static void delete_colormap_hook(int dummy, void *colormap_x, void *callback_x) { Gif_Colormap *gfcm = (Gif_Colormap *)colormap_x; Gif_XContext *gfx = (Gif_XContext *)callback_x; Gif_XColormap *gfxc; (void) dummy; for (gfxc = gfx->xcolormap; gfxc; gfxc = gfxc->next) if (gfxc->colormap == gfcm) { delete_xcolormap(gfxc); return; } } Gif_XContext * Gif_NewXContextFromVisual(Display *display, int screen_number, Visual *visual, int depth, Colormap colormap) { Gif_XContext *gfx; gfx = Gif_New(Gif_XContext); gfx->display = display; gfx->screen_number = screen_number; gfx->drawable = RootWindow(display, screen_number); gfx->visual = visual; gfx->colormap = colormap; gfx->ncolormap = visual->map_entries; gfx->depth = depth; gfx->closest = 0; gfx->nclosest = 0; gfx->free_deleted_colormap_pixels = 0; gfx->xcolormap = 0; gfx->image_gc = None; gfx->mask_gc = None; gfx->transparent_pixel = 0UL; gfx->foreground_pixel = 1UL; gfx->refcount = 0; Gif_AddDeletionHook(GIF_T_COLORMAP, delete_colormap_hook, gfx); return gfx; } Gif_XContext * Gif_NewXContext(Display *display, Window window) { XWindowAttributes attr; XGetWindowAttributes(display, window, &attr); return Gif_NewXContextFromVisual(display, XScreenNumberOfScreen(attr.screen), attr.visual, attr.depth, attr.colormap); } void Gif_DeleteXContext(Gif_XContext *gfx) { if (!gfx) return; if (--gfx->refcount > 0) return; while (gfx->xcolormap) delete_xcolormap(gfx->xcolormap); if (gfx->image_gc) XFreeGC(gfx->display, gfx->image_gc); if (gfx->mask_gc) XFreeGC(gfx->display, gfx->mask_gc); Gif_DeleteArray(gfx->closest); Gif_Delete(gfx); Gif_RemoveDeletionHook(GIF_T_COLORMAP, delete_colormap_hook, gfx); } #ifdef __cplusplus } #endif xmahjongg-3.7/liblcdf/string.cc0000644000076400007640000003142010200602002013470 00000000000000// -*- related-file-name: "../include/lcdf/string.hh" -*- /* * string.{cc,hh} -- a String class with shared substrings * Eddie Kohler * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * Copyright (c) 2001-2005 Eddie Kohler * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include static String::Initializer initializer; String::Memo *String::null_memo = 0; String::Memo *String::permanent_memo = 0; String::Memo *String::oom_memo = 0; String *String::null_string_p = 0; String *String::oom_string_p = 0; const char String::oom_string_data = 0; inline String::Memo::Memo() : _refcount(0), _capacity(0), _dirty(0), _real_data("") { } inline String::Memo::Memo(char *data, int dirty, int capacity) : _refcount(0), _capacity(capacity), _dirty(dirty), _real_data(data) { } String::Memo::Memo(int dirty, int capacity) : _refcount(1), _capacity(capacity), _dirty(dirty), _real_data(new char[capacity]) { assert(_capacity >= _dirty); } String::Memo::~Memo() { if (_capacity) { assert(_capacity >= _dirty); delete[] _real_data; } } String::String(int i) { char buf[128]; sprintf(buf, "%d", i); assign(buf, -1); } String::String(unsigned u) { char buf[128]; sprintf(buf, "%u", u); assign(buf, -1); } String::String(long d) { char buf[128]; sprintf(buf, "%ld", d); assign(buf, -1); } String::String(unsigned long u) { char buf[128]; sprintf(buf, "%lu", u); assign(buf, -1); } String::String(double d) { char buf[128]; sprintf(buf, "%.12g", d); assign(buf, -1); } String String::claim_string(char *str, int len, int capacity) { assert(str && len > 0 && capacity >= len); Memo *new_memo = new Memo(str, len, capacity); if (new_memo) return String(str, len, new_memo); else return String(oom_memo->_real_data, 0, oom_memo); } String String::stable_string(const char *str, int len) { if (len < 0) len = (str ? strlen(str) : 0); if (len == 0) return String(); else return String(str, len, permanent_memo); } String String::garbage_string(int len) { String s; s.append_garbage(len); return s; } String String::fill_string(int c, int len) { String s; s.append_fill(c, len); return s; } void String::make_out_of_memory() { if (_memo) deref(); _memo = oom_memo; _memo->_refcount++; _data = _memo->_real_data; _length = 0; } void String::assign(const char *str, int len) { if (!str) { assert(len <= 0); len = 0; } else if (len < 0) len = strlen(str); if (len == 0) { _memo = (str == oom_memo->_real_data ? oom_memo : null_memo); _memo->_refcount++; } else { // Make 'capacity' a multiple of 16 characters at least as big as // 'len'. int capacity = (len + 16) & ~15; _memo = new Memo(len, capacity); if (!_memo || !_memo->_real_data) { make_out_of_memory(); return; } memcpy(_memo->_real_data, str, len); } _data = _memo->_real_data; _length = len; } char * String::append_garbage(int suffix_len) { // Appending anything to "out of memory" leaves it as "out of memory" if (suffix_len <= 0 || _memo == oom_memo) return 0; // If we can, append into unused space. First, we check that there's // enough unused space for `suffix_len' characters to fit; then, we check // that the unused space immediately follows the data in `*this'. if (_memo->_capacity > _memo->_dirty + suffix_len) { char *real_dirty = _memo->_real_data + _memo->_dirty; if (real_dirty == _data + _length) { _length += suffix_len; _memo->_dirty += suffix_len; assert(_memo->_dirty < _memo->_capacity); return real_dirty; } } // Now we have to make new space. Make sure the new capacity is a // multiple of 16 characters and that it is at least 16. int new_capacity = (_length + 16) & ~15; while (new_capacity < _length + suffix_len) new_capacity *= 2; Memo *new_memo = new Memo(_length + suffix_len, new_capacity); if (!new_memo || !new_memo->_real_data) { delete new_memo; make_out_of_memory(); return 0; } char *new_data = new_memo->_real_data; memcpy(new_data, _data, _length); deref(); _data = new_data; new_data += _length; // now new_data points to the garbage _length += suffix_len; _memo = new_memo; return new_data; } void String::append(const char *suffix, int suffix_len) { if (!suffix) { assert(suffix_len <= 0); suffix_len = 0; } else if (suffix_len < 0) suffix_len = strlen(suffix); if (char *space = append_garbage(suffix_len)) memcpy(space, suffix, suffix_len); else if (suffix == oom_memo->_real_data) // Appending "out of memory" to a regular string makes it "out of // memory" make_out_of_memory(); } void String::append_fill(int c, int suffix_len) { assert(suffix_len >= 0); if (char *space = append_garbage(suffix_len)) memset(space, c, suffix_len); } char * String::mutable_data() { // If _memo has a capacity (it's not one of the special strings) and it's // uniquely referenced, return _data right away. if (_memo->_capacity && _memo->_refcount == 1) return const_cast(_data); // Otherwise, make a copy of it. Rely on: deref() doesn't change _data or // _length; and if _capacity == 0, then deref() doesn't free _real_data. assert(!_memo->_capacity || _memo->_refcount > 1); deref(); assign(_data, _length); return const_cast(_data); } char * String::mutable_c_str() { (void) mutable_data(); (void) c_str(); return const_cast(_data); } const char * String::c_str() const { // If _memo has no capacity, then this is one of the special strings (null // or PermString). We are guaranteed, in these strings, that // _data[_length] exists. We can return _data immediately if we have a // '\0' in the right place. if (!_memo->_capacity && _data[_length] == '\0') return _data; // Otherwise, this invariant must hold (there's more real data in _memo // than in our substring). assert(!_memo->_capacity || _memo->_real_data + _memo->_dirty >= _data + _length); // Has the character after our substring been set? if (_memo->_real_data + _memo->_dirty == _data + _length) { // Character after our substring has not been set. May be able to // change it to '\0'. This case will never occur on special strings. if (_memo->_dirty < _memo->_capacity) goto add_final_nul; } else { // Character after our substring has been set. OK to return _data if // it is already '\0'. if (_data[_length] == '\0') return _data; } // If we get here, we must make a copy of our portion of the string. { String s(_data, _length); deref(); assign(s); } add_final_nul: char *real_data = const_cast(_data); real_data[_length] = '\0'; _memo->_dirty++; // include '\0' in used portion of _memo return _data; } String String::substring(int left, int len) const { if (left < 0) left += _length; if (len < 0) len = _length - left + len; if (left + len > _length) len = _length - left; if (left < 0 || len <= 0) return String(); else return String(_data + left, len, _memo); } int String::find_left(int c, int start) const { if (start < 0) start = 0; for (int i = start; i < _length; i++) if ((unsigned char)_data[i] == c) return i; return -1; } int String::find_left(const String &s, int start) const { if (start < 0) start = 0; if (start >= length()) return -1; if (!s.length()) return 0; int first_c = (unsigned char)s[0]; int pos = start, max_pos = length() - s.length(); for (pos = find_left(first_c, pos); pos >= 0 && pos <= max_pos; pos = find_left(first_c, pos + 1)) if (!memcmp(_data + pos, s._data, s.length())) return pos; return -1; } int String::find_right(int c, int start) const { if (start >= _length) start = _length - 1; for (int i = start; i >= 0; i--) if ((unsigned char)_data[i] == c) return i; return -1; } static String hard_lower(const String &s, int pos) { String new_s(s.data(), s.length()); char *x = const_cast(new_s.data()); // know it's mutable int len = s.length(); for (; pos < len; pos++) x[pos] = tolower(x[pos]); return new_s; } String String::lower() const { // avoid copies for (int i = 0; i < _length; i++) if (_data[i] >= 'A' && _data[i] <= 'Z') return hard_lower(*this, i); return *this; } static String hard_upper(const String &s, int pos) { String new_s(s.data(), s.length()); char *x = const_cast(new_s.data()); // know it's mutable int len = s.length(); for (; pos < len; pos++) x[pos] = toupper(x[pos]); return new_s; } String String::upper() const { // avoid copies for (int i = 0; i < _length; i++) if (_data[i] >= 'a' && _data[i] <= 'z') return hard_upper(*this, i); return *this; } static String hard_printable(const String &s, int pos) { StringAccum sa(s.length() * 2); sa.append(s.data(), pos); const unsigned char *x = reinterpret_cast(s.data()); int len = s.length(); for (; pos < len; pos++) { if (x[pos] >= 32 && x[pos] < 127) sa << x[pos]; else if (x[pos] < 32) sa << '^' << (unsigned char)(x[pos] + 64); else if (char *buf = sa.extend(4, 1)) sprintf(buf, "\\%03o", x[pos]); } return sa.take_string(); } String String::printable() const { // avoid copies for (int i = 0; i < _length; i++) if (_data[i] < 32 || _data[i] > 126) return hard_printable(*this, i); return *this; } unsigned hashcode(const String &s) { int length = s.length(); const char *data = s.data(); if (!length) return 0; else if (length == 1) return data[0] | (data[0] << 8); else if (length < 4) return data[0] + (data[1] << 3) + (length << 12); else return data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) + (length << 12) + (data[length-1] << 10); } bool String::equals(const char *s, int len) const { // I would like to make "out-of-memory" strings compare unequal to // anything, even themseleves, but this would be a bad idea for Strings // used as (for example) keys in hashtables. Instead, "out-of-memory" // strings compare unequal to other null strings, but equal to each other. if (len < 0) len = strlen(s); if (_length != len) return false; else if (len == 0) return (_data == s || (s != oom_memo->_real_data && _memo != oom_memo)); else return (_data == s || memcmp(_data, s, len) == 0); } int String::compare(const char *s, int len) const { if (len < 0) len = strlen(s); if (_data == s && _length == len) return 0; if (_length == len) return memcmp(_data, s, len); else if (_length < len) { int v = memcmp(_data, s, _length); return (v ? v : -1); } else { int v = memcmp(_data, s, len); return (v ? v : 1); } } void String::align(int n) { int offset = reinterpret_cast(_data) % n; if (offset) { String s; s.append_garbage(_length + n + 1); offset = reinterpret_cast(s._data) % n; memcpy((char *)s._data + n - offset, _data, _length); s._data += n - offset; s._length = _length; *this = s; } } String::Initializer::Initializer() { String::static_initialize(); } void String::static_initialize() { // function called to initialize static globals if (!null_memo) { null_memo = new Memo; null_memo->_refcount++; permanent_memo = new Memo; permanent_memo->_refcount++; // use a separate string for oom_memo's data, so we can distinguish // the pointer oom_memo = new Memo; oom_memo->_refcount++; oom_memo->_real_data = const_cast(&oom_string_data); null_string_p = new String; oom_string_p = new String(oom_memo->_real_data, 0, oom_memo); } } void String::static_cleanup() { if (null_string_p) { delete null_string_p; null_string_p = 0; delete oom_string_p; oom_string_p = 0; if (--null_memo->_refcount == 0) delete null_memo; if (--permanent_memo->_refcount == 0) delete permanent_memo; if (--oom_memo->_refcount == 0) delete oom_memo; null_memo = permanent_memo = oom_memo = 0; } } xmahjongg-3.7/liblcdf/Makefile.am0000664000076400007640000000070407643173761013752 00000000000000## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign noinst_LIBRARIES = liblcdf.a noinst_PROGRAMS = giftoc liblcdf_a_SOURCES = clp.c \ fmalloc.c \ giffunc.c gifread.c gifx.c \ permstr.cc \ straccum.cc \ string.cc \ vectorv.cc EXTRA_liblcdf_a_SOURCES = fixlibc.c giftoc_SOURCES = giftoc.c ## liblcdf_a_DEPENDENCIES = @FIXLIBC_O@ ## liblcdf_a_LIBADD = @FIXLIBC_O@ INCLUDES = $(X_CFLAGS) -I$(top_srcdir)/include xmahjongg-3.7/liblcdf/vectorv.cc0000664000076400007640000000432610122677261013707 00000000000000/* * vectorv.cc -- template specialization for Vector * Eddie Kohler * * Copyright (c) 1999-2004 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */ #ifdef HAVE_CONFIG_H # include #endif #include #include Vector::Vector(const Vector &o) : _l(0), _n(0), _capacity(0) { *this = o; } Vector::~Vector() { delete[] _l; } Vector & Vector::operator=(const Vector &o) { if (&o != this) { _n = 0; if (reserve(o._n)) { _n = o._n; memcpy(_l, o._l, sizeof(void *) * _n); } } return *this; } Vector & Vector::assign(int n, void *e) { _n = 0; resize(n, e); return *this; } bool Vector::reserve(int want) { if (want < 0) want = (_capacity > 0 ? _capacity * 2 : 4); if (want <= _capacity) return true; void **new_l = new void*[want]; if (!new_l) return false; memcpy(new_l, _l, sizeof(void*) * _n); delete[] _l; _l = new_l; _capacity = want; return true; } Vector::iterator Vector::erase(iterator a, iterator b) { if (b > a) { assert(a >= begin() && b <= end()); memmove(a, b, (end() - b) * sizeof(void*)); _n -= b - a; return a; } else return b; } void Vector::resize(int nn, void *e) { if (nn <= _capacity || reserve(nn)) { for (int i = _n; i < nn; i++) _l[i] = e; _n = nn; } } void Vector::swap(Vector& o) { void **l = _l; int n = _n; int cap = _capacity; _l = o._l; _n = o._n; _capacity = o._capacity; o._l = l; o._n = n; o._capacity = cap; } xmahjongg-3.7/configure0000755000076400007640000102465510213402577012223 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="src/game.hh" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP RANLIB ac_ct_RANLIB X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS EGREP LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=xmahjongg VERSION=3.7 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6 if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_inline=$ac_kw; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6 case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$GCC" ; then CC="$CC -Wall"; CXX="$CXX -Wall"; fi echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" fi; # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -fr conftest.dir if mkdir conftest.dir; then cd conftest.dir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat >Imakefile <<'_ACEOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' _ACEOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -fr conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { XtMalloc (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. cat >>confdefs.h <<\_ACEOF #define X_DISPLAY_MISSING 1 _ACEOF X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_nospace=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_space=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$as_me:$LINENO: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi LIBS=$ac_xsave_LIBS esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define gethostbyname to an innocuous variant, in case declares gethostbyname. For example, HP-UX 11i declares gettimeofday. */ #define gethostbyname innocuous_gethostbyname /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef gethostbyname /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else char (*f) () = gethostbyname; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyname; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. echo "$as_me:$LINENO: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define connect to an innocuous variant, in case declares connect. For example, HP-UX 11i declares gettimeofday. */ #define connect innocuous_connect /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef connect /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else char (*f) () = connect; #endif #ifdef __cplusplus } #endif int main () { return f != connect; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. echo "$as_me:$LINENO: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define remove to an innocuous variant, in case declares remove. For example, HP-UX 11i declares gettimeofday. */ #define remove innocuous_remove /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef remove /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else char (*f) () = remove; #endif #ifdef __cplusplus } #endif int main () { return f != remove; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then echo "$as_me:$LINENO: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); int main () { remove (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_posix_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo "$as_me:$LINENO: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shmat to an innocuous variant, in case declares shmat. For example, HP-UX 11i declares gettimeofday. */ #define shmat innocuous_shmat /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shmat /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else char (*f) () = shmat; #endif #ifdef __cplusplus } #endif int main () { return f != shmat; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); int main () { shmat (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ipc_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); int main () { IceConnectionNumber (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi for ac_func in strerror do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case $LIBOBJS in "$ac_func.$ac_objext" | \ *" $ac_func.$ac_objext" | \ "$ac_func.$ac_objext "* | \ *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done echo "$as_me:$LINENO: checking for gettimeofday prototype" >&5 echo $ECHO_N "checking for gettimeofday prototype... $ECHO_C" >&6 if test "${ac_cv_gettimeofday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { gettimeofday((void *)0, (void *)0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { gettimeofday((void *)0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_gettimeofday=0 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_gettimeofday=2 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_gettimeofday=1 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_gettimeofday" >&5 echo "${ECHO_T}$ac_cv_gettimeofday" >&6 cat >>confdefs.h <<_ACEOF #define GETTIMEOFDAY_PROTO $ac_cv_gettimeofday _ACEOF echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in inttypes.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF have_inttypes_h=yes else have_inttypes_h=no fi done for ac_header in sys/types.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF have_sys_types_h=yes else have_sys_types_h=no fi done if test $have_inttypes_h = no -a $have_sys_types_h = yes; then echo "$as_me:$LINENO: checking for uintXX_t typedefs" >&5 echo $ECHO_N "checking for uintXX_t typedefs... $ECHO_C" >&6 if test "${ac_cv_uint_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then ac_cv_uint_t=yes else ac_cv_uint_t=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_uint_t" >&5 echo "${ECHO_T}$ac_cv_uint_t" >&6 fi if test $have_inttypes_h = no -a $have_sys_types_h = yes -a "$ac_cv_uint_t" = no; then echo "$as_me:$LINENO: checking for u_intXX_t typedefs" >&5 echo $ECHO_N "checking for u_intXX_t typedefs... $ECHO_C" >&6 if test "${ac_cv_u_int_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then ac_cv_u_int_t=yes else ac_cv_u_int_t=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_u_int_t" >&5 echo "${ECHO_T}$ac_cv_u_int_t" >&6 fi if test $have_inttypes_h = yes -o "$ac_cv_uint_t" = yes; then : elif test "$ac_cv_u_int_t" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_U_INT_TYPES 1 _ACEOF else { echo "$as_me:$LINENO: WARNING: ========================================= Neither uint32_t nor u_int32_t defined by or ! Assuming \"short\" has 16 bits and \"int\" has 32 bits. =========================================" >&5 echo "$as_me: WARNING: ========================================= Neither uint32_t nor u_int32_t defined by or ! Assuming \"short\" has 16 bits and \"int\" has 32 bits. =========================================" >&2;} cat >>confdefs.h <<\_ACEOF #define HAVE_FAKE_INT_TYPES 1 _ACEOF fi echo "$as_me:$LINENO: checking for uintptr_t" >&5 echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 if test "${ac_cv_type_uintptr_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if HAVE_INTTYPES_H # include #endif #if HAVE_SYS_TYPES_H # include #endif int main () { if ((uintptr_t *) 0) return 0; if (sizeof (uintptr_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_uintptr_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uintptr_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 if test $ac_cv_type_uintptr_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for void *" >&5 echo $ECHO_N "checking for void *... $ECHO_C" >&6 if test "${ac_cv_type_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((void * *) 0) return 0; if (sizeof (void *)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_void_p=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_void_p=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5 echo "${ECHO_T}$ac_cv_type_void_p" >&6 echo "$as_me:$LINENO: checking size of void *" >&5 echo $ECHO_N "checking size of void *... $ECHO_C" >&6 if test "${ac_cv_sizeof_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_void_p" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_void_p=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (void *)); } unsigned long ulongval () { return (long) (sizeof (void *)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (void *))) < 0) { long i = longval (); if (i != ((long) (sizeof (void *)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (void *)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_void_p=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_void_p=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF echo "$as_me:$LINENO: checking for unsigned long" >&5 echo $ECHO_N "checking for unsigned long... $ECHO_C" >&6 if test "${ac_cv_type_unsigned_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((unsigned long *) 0) return 0; if (sizeof (unsigned long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_unsigned_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_unsigned_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long" >&5 echo "${ECHO_T}$ac_cv_type_unsigned_long" >&6 echo "$as_me:$LINENO: checking size of unsigned long" >&5 echo $ECHO_N "checking size of unsigned long... $ECHO_C" >&6 if test "${ac_cv_sizeof_unsigned_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_unsigned_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_unsigned_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (unsigned long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (unsigned long)); } unsigned long ulongval () { return (long) (sizeof (unsigned long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (unsigned long))) < 0) { long i = longval (); if (i != ((long) (sizeof (unsigned long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (unsigned long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_unsigned_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (unsigned long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_unsigned_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_unsigned_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long _ACEOF echo "$as_me:$LINENO: checking for unsigned int" >&5 echo $ECHO_N "checking for unsigned int... $ECHO_C" >&6 if test "${ac_cv_type_unsigned_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((unsigned int *) 0) return 0; if (sizeof (unsigned int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_unsigned_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_unsigned_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_int" >&5 echo "${ECHO_T}$ac_cv_type_unsigned_int" >&6 echo "$as_me:$LINENO: checking size of unsigned int" >&5 echo $ECHO_N "checking size of unsigned int... $ECHO_C" >&6 if test "${ac_cv_sizeof_unsigned_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_unsigned_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_unsigned_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (unsigned int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (unsigned int)); } unsigned long ulongval () { return (long) (sizeof (unsigned int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (unsigned int))) < 0) { long i = longval (); if (i != ((long) (sizeof (unsigned int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (unsigned int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_unsigned_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (unsigned int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_unsigned_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_unsigned_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int _ACEOF ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking whether works" >&5 echo $ECHO_N "checking whether works... $ECHO_C" >&6 if test "${ac_cv_good_new_hdr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { int a; int *b = new(&a) int; return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_good_new_hdr=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_good_new_hdr=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_good_new_hdr" >&5 echo "${ECHO_T}$ac_cv_good_new_hdr" >&6 if test "$ac_cv_good_new_hdr" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_NEW_HDR 1 _ACEOF fi for ac_header in new.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done test "x$prefix" = xNONE && prefix=$ac_default_prefix pkgdatadir=$datadir/$PACKAGE eval pkgdatadir=$pkgdatadir cat >>confdefs.h <<_ACEOF #define PKGDATADIR "$pkgdatadir" _ACEOF ac_config_files="$ac_config_files Makefile src/Makefile liblcdf/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "liblcdf/Makefile" ) CONFIG_FILES="$CONFIG_FILES liblcdf/Makefile" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CPP@,$CPP,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@CXXCPP@,$CXXCPP,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@EGREP@,$EGREP,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi xmahjongg-3.7/README0000644000076400007640000000752710213402461011162 00000000000000XMAHJONGG 3.7 ============= MAKING XMAHJONGG ---------------- You need an ANSI C++ compiler, such as g++, but not C++ libraries. Just type `./configure', then `make'. `make install' will build and install xmahjongg, its shared data, and its manual page. `./configure' accepts the usual options. See `INSTALL' for more details. (More details: Give `configure' a `--prefix' option to install xmahjongg somewhere other than `/usr/local'. You can also give `configure' the `--bindir', `--mandir', and `--datadir' options for more more precise control. N.B.: `make install' will place all the shared data files in a subdirectory named `$(datadir)/xmahjongg'.) If you want to test xmahjongg after compiling it, you'll run into trouble since the shared data have not been installed yet. To fix this, supply the `-B' option: % make % ./xmahjongg -B ./share --tileset small ABOUT XMAHJONGG --------------- Xmahjongg is a simple solitaire game. The object is to remove all 144 Mah Jongg tiles from the playing area by matching them two at a time. Xmahjongg 2.0 was released in 1990 by Jeff S. Young . This version has been completely rewritten by Eddie Kohler . New features in 3.0: * Pretty, round-edged, and colorful Mah Jongg tiles. * Multiple tile sets. * Undo. * Hints let you quickly locate possible matches. * Solvable boards by default. * A clean button for automatically removing certain kinds of tiles. * Aesthetics. * A count of matches remaining. * No fiddling with the X font path. Features 2.0 has that are not yet available in 3.0: * Tournament mode. * Visible board numbers. * A "Same" button. (You can click Undo a lot to get the same effect.) * Layout configuration mode. Please see the man page, `xmahjongg.6', for information on how to play the game. Xmahjongg comes with NO WARRANTY, express or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. XMAHJONGG HOME PAGE ------------------- For latest distributions, bug reports, and other stuff, see the Xmahjongg home page at http://www.lcdf.org/xmahjongg/ BUGS, SUGGESTIONS, ETC. ----------------------- Please write me if you have trouble building or running xmahjongg, or if you have suggestions or (preferably) patches. Eddie Kohler eddietwo@lcs.mit.edu http://www.pdos.lcs.mit.edu/~eddietwo/ AUTHORS ------- Eddie Kohler Source code, default background image, buttons and numbers, coloring of the `default' and `thick' tilesets Mark A. Holm markh@aracnet.com Black-and-white versions of the `default' and `tall' tilesets, (c) 1988. He gave permission to copy and distribute the black-and-white versions for non-profit purposes. The colored tiles are sufficiently different to make them a `derived work' which can be separately copyrighted; they are distributed under the GPL. Dorothy Robinson mokuren@teleport.com `dorothys' tileset (c) 2000, and `dorwhite' tileset, which is the original color xmahjongg tiles (c) 1988. Berrie Bloem (?) http://www.mahjongg.com/ `small' tileset Jonathan Buzzard and Max Watson `gnome' and `gnome2' tilesets Mark Sanctuary http://jps.net/sanctuary `real' tileset Naoki Haga http://www.kyodai.com/ `arena', `ceremonial', `deepwell', `farandole', and `theater' layouts Vincent Krebs `hourglass' and `papillon' layouts COPYRIGHT/LICENSE ----------------- All source code is Copyright (C) 1993-2000 Eddie Kohler. This package is distributed under the GNU General Public License, Version 2, or, at your discretion, any later version. The GNU General Public License is available via the Web at . The GPL is designed to allow you to alter and redistribute the package, as long as you do not remove that freedom from others. xmahjongg-3.7/images/0000777000076400007640000000000010213403362011621 500000000000000xmahjongg-3.7/images/digits.gif0000664000076400007640000000363207027227223013526 00000000000000GIF89a$&Upip**jZ##dp!,$&H0I 荩`uh hоPw8N&~1}6<!tfH0,-u+^]ad.gvrh}nkiymo_~]fW,~SiLMG'>D9 lK)*fCDns;gPno<+'0UIu AJLPsNG5x5H/e3U˞ov>/ϯ~\}3RlLF6Npc>80i,_s !,$&PI8ͻ@(AAhR@z4o<+p(T~X 0N")h檠Hi9"16(|uyWU}v2u(GqJPphdnFUVVfMMs5fDE^$!,$&0I8ͻ $II"J$8,QSxV)%ÚsVIlJLXþ|ސF'6XШxCDE|t0 \+5j~*xXe;M^oYnirR)z{PUZedGµT>?{143@'Fno!,$&0I8{'Rbi*p&ӵg1ąTf N4NkS7rdmuΦli9vwq:[?r(a}zovg& VR.@M~lACm6mJJ$gO,!,$&0I8ͻ@(dQl S:tM3/m气bH,qo =bi]li'%>n]xrC}zIys|jtiPkVu1|edFuk3pt9iao(;MJeMQ"+b@2#ܥRB!,$&v0I8ͻ@(d)rl: tm6,|ˍpH@dThI1?roF+3!1w%.;^_kxliey_VW{To!,#&0I'e`j]I1fiL^n6^YN[2(y%☌6^(V^Y"s¶s1·ap}cv{]n0q)u/!Jx%[Y}kWFS\Xg.Xz_SUCw,""$~l!,$&0I81 u`b 8zqr~+Y^+%|`QpX^ <&KXeA+8fck9 \kkbWY}KhfdtSq{{d|z_6TAj\wwC[dQnMGQ:G(=}D;(>?F!*Fɒ4NǪh̖(9D35;xmahjongg-3.7/images/buttons.gif0000664000076400007640000000705006530333111013727 00000000000000GIF89a&8w/OOp2.~oqvz"&&!hint!,&8 dihlk-Ө:d 9pT f|ezŁ]7nvߙ ȳjgv,|z)_E>?=y@'ym@79SC8IrS"|Y$bq%L01ɼ1Ĭ;51޷bhfɣxlB$CѣH*MMyPcΈRebhfɣxlB$CѣH*MMyP3jȱFo ;h &SVa̚4SDgΟ$O'9aҌ9%ʔLw豦IMN!undo-lit!,&8 dihlp,ϴ]x+uqC cD)Ljuf7TSp6R#+!ۿuy<{~|(rtEZ$&~?Zo%MjsDeWw?Kâ{˸j>cΈRe Copyright: GPL BuildRoot: /tmp/xmahjongg-build %description Real Mah Jongg is a social game that originated in China thousands of years ago. Four players, named after the four winds, take tiles from a wall in turn. The best tiles are made of ivory and wood; they click pleasantly when you knock them together. Computer Solitaire Mah Jongg (xmahjongg being one of the sillier examples) is nothing like that but it's fun, or it must be, since there are like 300 shareware versions available for Windows. This is for X11 and it's free. %prep %setup %build CFLAGS="$RPM_OPT_FLAGS" ./configure --datadir=/usr/X11R6/lib/X11 make %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin $RPM_BUILD_ROOT/usr/X11R6/man/man6 install -c -s xmahjongg $RPM_BUILD_ROOT/usr/X11R6/bin/xmahjongg install -c -m 644 xmahjongg.6 $RPM_BUILD_ROOT/usr/X11R6/man/man6/xmahjongg.6 make pkgdatadir="$RPM_BUILD_ROOT/usr/X11R6/lib/X11/xmahjongg" install-share %clean rm -rf $RPM_BUILD_ROOT %post %files %attr(-,root,root) %doc NEWS README %attr(0755,root,root) /usr/X11R6/bin/xmahjongg %attr(0644,root,root) /usr/X11R6/man/man6/xmahjongg.6* %attr(-,root,root) /usr/X11R6/lib/X11/xmahjongg xmahjongg-3.7/include/0000777000076400007640000000000010213403361011776 500000000000000xmahjongg-3.7/include/lcdfgif/0000777000076400007640000000000010213403361013374 500000000000000xmahjongg-3.7/include/lcdfgif/gif.h0000664000076400007640000001730007723464231014250 00000000000000/* gif.h - Interface to the LCDF GIF library. Copyright (C) 1997-2001 Eddie Kohler, eddietwo@lcs.mit.edu This file is part of the LCDF GIF library. The LCDF GIF library is free software*. It is distributed under the GNU General Public License, version 2 or later; you can copy, distribute, or alter it at will, as long as this notice is kept intact and this source code is made available. There is no warranty, express or implied. *There is a patent on the LZW compression method used by GIFs, and included in gifwrite.c. Unisys, the patent holder, allows the compression algorithm to be used without a license in software distributed at no cost to the user. The decompression algorithm is not patented. */ #ifndef LCDF_GIF_H /* -*- mode: c -*- */ #define LCDF_GIF_H #include #include #include #ifdef __cplusplus extern "C" { #endif /* NOTE: You should define the types uint8_t, uint16_t and uint32_t before including this file, probably by #including . */ #define GIF_MAJOR_VERSION 1 #define GIF_MINOR_VERSION 5 #define GIF_VERSION "1.5" typedef struct Gif_Stream Gif_Stream; typedef struct Gif_Image Gif_Image; typedef struct Gif_Colormap Gif_Colormap; typedef struct Gif_Comment Gif_Comment; typedef struct Gif_Extension Gif_Extension; typedef struct Gif_Record Gif_Record; /** GIF_STREAM **/ struct Gif_Stream { Gif_Colormap *global; uint8_t background; uint16_t screen_width; uint16_t screen_height; long loopcount; /* -1 means no loop count */ Gif_Comment *comment; Gif_Image **images; int nimages; int imagescap; Gif_Extension *extensions; unsigned errors; int userflags; int refcount; }; Gif_Stream * Gif_NewStream(void); void Gif_DeleteStream(Gif_Stream *); Gif_Stream * Gif_CopyStreamSkeleton(Gif_Stream *); Gif_Stream * Gif_CopyStreamImages(Gif_Stream *); #define Gif_ScreenWidth(gfs) ((gfs)->screen_width) #define Gif_ScreenHeight(gfs) ((gfs)->screen_height) #define Gif_ImageCount(gfs) ((gfs)->nimages) void Gif_CalculateScreenSize(Gif_Stream *, int force); int Gif_Unoptimize(Gif_Stream *); /** GIF_IMAGE **/ struct Gif_Image { char *identifier; Gif_Comment *comment; Gif_Colormap *local; short transparent; /* -1 means no transparent index */ uint16_t delay; uint8_t disposal; uint16_t left; uint16_t top; uint16_t width; uint16_t height; uint8_t interlace; uint8_t **img; /* img[y][x] == image byte (x,y) */ uint8_t *image_data; void (*free_image_data)(void *); uint32_t compressed_len; uint8_t *compressed; void (*free_compressed)(void *); void *user_data; void (*free_user_data)(void *); int refcount; }; #define GIF_DISPOSAL_NONE 0 #define GIF_DISPOSAL_ASIS 1 #define GIF_DISPOSAL_BACKGROUND 2 #define GIF_DISPOSAL_PREVIOUS 3 Gif_Image * Gif_NewImage(void); void Gif_DeleteImage(Gif_Image *); int Gif_AddImage(Gif_Stream *, Gif_Image *); void Gif_RemoveImage(Gif_Stream *, int); Gif_Image * Gif_CopyImage(Gif_Image *); Gif_Image * Gif_GetImage(Gif_Stream *, int); Gif_Image * Gif_GetNamedImage(Gif_Stream *, const char *); int Gif_ImageNumber(Gif_Stream *, Gif_Image *); #define Gif_ImageWidth(gfi) ((gfi)->width) #define Gif_ImageHeight(gfi) ((gfi)->height) #define Gif_ImageDelay(gfi) ((gfi)->delay) #define Gif_ImageUserData(gfi) ((gfi)->userdata) #define Gif_SetImageUserData(gfi, v) ((gfi)->userdata = v) typedef void (*Gif_ReadErrorHandler)(const char *, int, void *); #define Gif_UncompressImage(gfi) Gif_FullUncompressImage((gfi),0,0) int Gif_FullUncompressImage(Gif_Image*,Gif_ReadErrorHandler,void*); int Gif_CompressImage(Gif_Stream *, Gif_Image *); int Gif_FullCompressImage(Gif_Stream *, Gif_Image *, int); void Gif_ReleaseUncompressedImage(Gif_Image *); void Gif_ReleaseCompressedImage(Gif_Image *); int Gif_SetUncompressedImage(Gif_Image *, uint8_t *data, void (*free_data)(void *), int data_interlaced); int Gif_CreateUncompressedImage(Gif_Image *); int Gif_ClipImage(Gif_Image *, int l, int t, int w, int h); /** GIF_COLORMAP **/ typedef struct { uint8_t haspixel; uint8_t red; uint8_t green; uint8_t blue; uint32_t pixel; } Gif_Color; struct Gif_Colormap { int ncol; int capacity; uint32_t userflags; int refcount; Gif_Color *col; }; Gif_Colormap * Gif_NewColormap(void); Gif_Colormap * Gif_NewFullColormap(int count, int capacity); void Gif_DeleteColormap(Gif_Colormap *); Gif_Colormap * Gif_CopyColormap(Gif_Colormap *); int Gif_ColorEq(Gif_Color *, Gif_Color *); #define GIF_COLOREQ(c1, c2) \ ((c1)->red==(c2)->red && (c1)->green==(c2)->green && (c1)->blue==(c2)->blue) int Gif_FindColor(Gif_Colormap *, Gif_Color *); int Gif_AddColor(Gif_Colormap *, Gif_Color *, int look_from); /** GIF_COMMENT **/ struct Gif_Comment { char **str; int *len; int count; int cap; }; Gif_Comment * Gif_NewComment(void); void Gif_DeleteComment(Gif_Comment *); int Gif_AddCommentTake(Gif_Comment *, char *, int); int Gif_AddComment(Gif_Comment *, const char *, int); /** GIF_EXTENSION **/ struct Gif_Extension { int kind; /* negative kinds are reserved */ char *application; uint8_t *data; uint32_t length; int position; Gif_Stream *stream; Gif_Extension *next; void (*free_data)(void *); }; Gif_Extension * Gif_NewExtension(int, const char *); void Gif_DeleteExtension(Gif_Extension *); int Gif_AddExtension(Gif_Stream *, Gif_Extension *, int); Gif_Extension * Gif_GetExtension(Gif_Stream *, int, Gif_Extension *); /** READING AND WRITING **/ struct Gif_Record { const unsigned char *data; uint32_t length; }; #define GIF_READ_COMPRESSED 1 #define GIF_READ_UNCOMPRESSED 2 #define GIF_READ_CONST_RECORD 4 #define GIF_READ_TRAILING_GARBAGE_OK 8 #define GIF_WRITE_CAREFUL_MIN_CODE_SIZE 1 Gif_Stream * Gif_ReadFile(FILE *); Gif_Stream * Gif_FullReadFile(FILE *, int flags, Gif_ReadErrorHandler, void *); Gif_Stream * Gif_ReadRecord(const Gif_Record *); Gif_Stream * Gif_FullReadRecord(const Gif_Record *, int flags, Gif_ReadErrorHandler, void *); int Gif_WriteFile(Gif_Stream *, FILE *); int Gif_FullWriteFile(Gif_Stream *, int flags, FILE *); #define Gif_ReadFile(f) Gif_FullReadFile((f),GIF_READ_UNCOMPRESSED,0,0) #define Gif_ReadRecord(r) Gif_FullReadRecord((r),GIF_READ_UNCOMPRESSED,0,0) #define Gif_CompressImage(s, i) Gif_FullCompressImage((s),(i),0) #define Gif_WriteFile(s, f) Gif_FullWriteFile((s),0,(f)) /** HOOKS AND MISCELLANEOUS **/ int Gif_InterlaceLine(int y, int height); char * Gif_CopyString(const char *); #define GIF_T_STREAM (0) #define GIF_T_IMAGE (1) #define GIF_T_COLORMAP (2) typedef void (*Gif_DeletionHookFunc)(int, void *, void *); int Gif_AddDeletionHook(int, Gif_DeletionHookFunc, void *); void Gif_RemoveDeletionHook(int, Gif_DeletionHookFunc, void *); #ifdef GIF_DEBUGGING #define GIF_DEBUG(x) Gif_Debug x void Gif_Debug(char *x, ...); #else #define GIF_DEBUG(x) #endif typedef uint16_t Gif_Code; #define GIF_MAX_CODE_BITS 12 #define GIF_MAX_CODE 0x1000 #define GIF_MAX_BLOCK 255 #ifndef Gif_New # ifndef xmalloc # define xmalloc malloc # define xrealloc realloc # define xfree free # endif # define Gif_New(t) ((t *)xmalloc(sizeof(t))) # define Gif_NewArray(t, n) ((t *)xmalloc(sizeof(t) * (n))) # define Gif_ReArray(p, t, n) ((p)=((t*)xrealloc((void*)(p),sizeof(t)*(n)))) #endif #ifndef Gif_DeleteFunc # define Gif_DeleteFunc (&xfree) # define Gif_DeleteArrayFunc (&xfree) #endif #ifndef Gif_Delete # define Gif_Delete(p) (*Gif_DeleteFunc)((void *)(p)) # define Gif_DeleteArray(p) (*Gif_DeleteArrayFunc)((void *)(p)) #endif #ifdef __cplusplus } #endif #endif xmahjongg-3.7/include/lcdfgif/gifx.h0000664000076400007640000000467607622254071014451 00000000000000#ifndef LCDF_GIFX_H #define LCDF_GIFX_H #include #ifdef __cplusplus extern "C" { #endif /* gifx.h - Functions to turn GIFs in memory into X Pixmaps. Copyright (C) 1997-9 Eddie Kohler, eddietwo@lcs.mit.edu This file is part of the LCDF GIF library. The LCDF GIF library is free software*. It is distributed under the GNU General Public License, version 2 or later; you can copy, distribute, or alter it at will, as long as this notice is kept intact and this source code is made available. There is no warranty, express or implied. *There is a patent on the LZW compression method used by GIFs, and included in gifwrite.c. Unisys, the patent holder, allows the compression algorithm to be used without a license in software distributed at no cost to the user. The decompression algorithm is not patented. */ #include #define GIFX_COLORMAP_EXTENSION -107 typedef struct Gif_XContext Gif_XContext; typedef struct Gif_XColormap Gif_XColormap; struct Gif_XContext { Display *display; int screen_number; Drawable drawable; Visual *visual; uint16_t depth; uint16_t ncolormap; Colormap colormap; uint16_t nclosest; Gif_Color *closest; int free_deleted_colormap_pixels; Gif_XColormap *xcolormap; GC image_gc; GC mask_gc; unsigned long transparent_pixel; unsigned long foreground_pixel; int refcount; }; Gif_XContext * Gif_NewXContext(Display *, Window); Gif_XContext * Gif_NewXContextFromVisual(Display *, int screen_number, Visual *, int depth, Colormap); void Gif_DeleteXContext(Gif_XContext *); Pixmap Gif_XImage(Gif_XContext *, Gif_Stream *, Gif_Image *); Pixmap Gif_XImageColormap(Gif_XContext *, Gif_Stream *, Gif_Colormap *, Gif_Image *); Pixmap Gif_XSubImage(Gif_XContext *, Gif_Stream *, Gif_Image *, int l, int t, int w, int h); Pixmap Gif_XSubImageColormap(Gif_XContext *, Gif_Image *, Gif_Colormap *, int l, int t, int w, int h); Pixmap Gif_XMask(Gif_XContext *, Gif_Stream *, Gif_Image *); Pixmap Gif_XSubMask(Gif_XContext *, Gif_Image *, int l, int t, int w, int h); Pixmap Gif_XNextImage(Gif_XContext *, Pixmap last_last, Pixmap last, Gif_Stream *, int n); int Gif_XAllocateColors(Gif_XContext *, Gif_Colormap *); void Gif_XDeallocateColors(Gif_XContext *, Gif_Colormap *); unsigned long * Gif_XClaimStreamColors(Gif_XContext *, Gif_Stream *, int *); #ifdef __cplusplus } #endif #endif xmahjongg-3.7/include/lcdf/0000777000076400007640000000000010213403361012706 500000000000000xmahjongg-3.7/include/lcdf/string.hh0000644000076400007640000002330410200602001014437 00000000000000// -*- related-file-name: "../../liblcdf/string.cc" -*- #ifndef LCDF_STRING_HH #define LCDF_STRING_HH #ifdef HAVE_PERMSTRING # include #endif #include class StringAccum; class String { public: // Call static_initialize() before any function which might deal with // Strings, and declare a String::Initializer in any file in which you // declare static global Strings. struct Initializer { Initializer(); }; friend struct String::Initializer; static void static_initialize(); static void static_cleanup(); inline String(); inline String(const String &s); String(const char *cc) { assign(cc, -1); } String(const char *cc, int l) { assign(cc, l); } #ifdef HAVE_PERMSTRING inline String(PermString p); #endif explicit inline String(char); explicit inline String(unsigned char); explicit String(int); explicit String(unsigned); explicit String(long); explicit String(unsigned long); explicit String(double); inline ~String(); static const String &null_string() { return *null_string_p; } static const String &out_of_memory_string() { return *oom_string_p; } static const char *out_of_memory_data() { return &oom_string_data; } static String garbage_string(int n); // n garbage characters static String fill_string(int c, int n); // n copies of c static String stable_string(const char *, int = -1); // stable read-only memory bool out_of_memory() const { return _data == &oom_string_data; } int length() const { return _length; } const char *data() const { return _data; } const unsigned char *udata() const { return reinterpret_cast(_data); } typedef const char *const_iterator; typedef const_iterator iterator; const_iterator begin() const { return _data; } const_iterator end() const { return _data + _length; } char *mutable_data(); char *mutable_c_str(); unsigned char *mutable_udata() { return reinterpret_cast(mutable_data()); } operator bool() const { return _length != 0; } bool operator!() const { return _length == 0; } #ifdef HAVE_PERMSTRING operator PermString() const { return PermString(_data, _length); } #endif const char *c_str() const; // pointer returned is semi-transient char operator[](int i) const { return _data[i]; } char back() const { return _data[_length - 1]; } int find_left(int c, int start = 0) const; int find_left(const String &s, int start = 0) const; int find_right(int c, int start = 0x7FFFFFFF) const; bool equals(const char *, int) const; // bool operator==(const String &, const String &); // bool operator==(const String &, const char *); // bool operator==(const char *, const String &); // bool operator!=(const String &, const String &); // bool operator!=(const String &, const char *); // bool operator!=(const char *, const String &); int compare(const char *, int) const; int compare(const String &x) const { return compare(x._data, x._length); } static inline int compare(const String &a, const String &b); // bool operator<(const String &, const String &); // bool operator<=(const String &, const String &); // bool operator>(const String &, const String &); // bool operator>=(const String &, const String &); String substring(const char *begin, const char *end) const; String substring(int pos, int len) const; String substring(int pos) const { return substring(pos, _length); } String lower() const; String upper() const; String printable() const; inline String &operator=(const String &); inline String &operator=(const char *); #ifdef HAVE_PERMSTRING inline String &operator=(PermString); #endif void append(const char *, int len); void append_fill(int c, int len); char *append_garbage(int len); inline String &operator+=(const String &); inline String &operator+=(const char *); inline String &operator+=(char); #ifdef HAVE_PERMSTRING inline String &operator+=(PermString p); #endif // String operator+(String, const String &); // String operator+(String, const char *); // String operator+(const char *, const String &); // String operator+(String, PermString); // String operator+(PermString, String); // String operator+(PermString, const char *); // String operator+(const char *, PermString); // String operator+(PermString, PermString); // String operator+(String, char); void align(int); private: struct Memo { int _refcount; int _capacity; int _dirty; char *_real_data; inline Memo(); inline Memo(char *, int, int); Memo(int, int); ~Memo(); }; mutable const char *_data; // mutable for c_str() mutable int _length; mutable Memo *_memo; inline String(const char *, int, Memo *); inline void assign(const String &) const; void assign(const char *, int); #ifdef HAVE_PERMSTRING inline void assign(PermString) const; #endif inline void deref() const; void make_out_of_memory(); static Memo *null_memo; static Memo *permanent_memo; static Memo *oom_memo; static String *null_string_p; static String *oom_string_p; static const char oom_string_data; static String claim_string(char *, int, int); // claim memory friend class StringAccum; }; inline String::String(const char *data, int length, Memo *memo) : _data(data), _length(length), _memo(memo) { _memo->_refcount++; } inline void String::assign(const String &s) const { _data = s._data; _length = s._length; _memo = s._memo; _memo->_refcount++; } inline void String::deref() const { if (--_memo->_refcount == 0) delete _memo; } inline String::String() : _data(null_memo->_real_data), _length(0), _memo(null_memo) { _memo->_refcount++; } inline String::String(char c) { assign(&c, 1); } inline String::String(unsigned char c) { assign(reinterpret_cast(&c), 1); } inline String::String(const String &s) { assign(s); } inline String::~String() { deref(); } inline String String::substring(const char *begin, const char *end) const { if (begin < end && begin >= _data && end <= _data + _length) return String(begin, end - begin, _memo); else return String(); } inline int String::compare(const String &a, const String &b) { return a.compare(b); } inline bool operator==(const String &s1, const String &s2) { return s1.equals(s2.data(), s2.length()); } inline bool operator==(const char *cc1, const String &s2) { return s2.equals(cc1, -1); } inline bool operator==(const String &s1, const char *cc2) { return s1.equals(cc2, -1); } inline bool operator!=(const String &s1, const String &s2) { return !s1.equals(s2.data(), s2.length()); } inline bool operator!=(const char *cc1, const String &s2) { return !s2.equals(cc1, -1); } inline bool operator!=(const String &s1, const char *cc2) { return !s1.equals(cc2, -1); } inline bool operator<(const String &s1, const String &s2) { return s1.compare(s2.data(), s2.length()) < 0; } inline bool operator<=(const String &s1, const String &s2) { return s1.compare(s2.data(), s2.length()) <= 0; } inline bool operator>(const String &s1, const String &s2) { return s1.compare(s2.data(), s2.length()) > 0; } inline bool operator>=(const String &s1, const String &s2) { return s1.compare(s2.data(), s2.length()) >= 0; } inline String & String::operator=(const String &s) { if (&s != this) { deref(); assign(s); } return *this; } inline String & String::operator=(const char *cc) { deref(); assign(cc, -1); return *this; } inline String & String::operator+=(const String &s) { append(s._data, s._length); return *this; } inline String & String::operator+=(const char *cc) { append(cc, -1); return *this; } inline String & String::operator+=(char c) { append_fill(c, 1); return *this; } inline String operator+(String s1, const String &s2) { s1 += s2; return s1; } inline String operator+(String s1, const char *cc2) { s1.append(cc2, -1); return s1; } inline String operator+(const char *cc1, const String &s2) { String s1(cc1); s1 += s2; return s1; } inline String operator+(String s1, char c2) { s1.append(&c2, 1); return s1; } #ifdef HAVE_PERMSTRING inline void String::assign(PermString p) const { _data = p.c_str(); _length = p.length(); _memo = permanent_memo; _memo->_refcount++; } inline String::String(PermString p) { assign(p); } inline bool operator==(PermString p1, const String &s2) { return s2.equals(p1.c_str(), p1.length()); } inline bool operator==(const String &s1, PermString p2) { return s1.equals(p2.c_str(), p2.length()); } inline bool operator!=(PermString p1, const String &s2) { return !s2.equals(p1.c_str(), p1.length()); } inline bool operator!=(const String &s1, PermString p2) { return !s1.equals(p2.c_str(), p2.length()); } inline String & String::operator=(PermString p) { deref(); assign(p); return *this; } inline String & String::operator+=(PermString p) { append(p.c_str(), p.length()); return *this; } inline String operator+(String s1, PermString p2) { s1.append(p2.c_str(), p2.length()); return s1; } inline String operator+(PermString p1, String s2) { String s1(p1); return s1 + s2; } inline String operator+(PermString p1, const char *cc2) { String s1(p1); return s1 + cc2; } inline String operator+(const char *cc1, PermString p2) { String s1(cc1); return s1 + p2; } inline String operator+(PermString p1, PermString p2) { String s1(p1); return s1 + p2; } #endif unsigned hashcode(const String &); #endif xmahjongg-3.7/include/lcdf/clp.h0000644000076400007640000001077610201210250013552 00000000000000/* -*- related-file-name: "../../liblcdf/clp.c" -*- */ #ifndef LCDF_CLP_H #define LCDF_CLP_H #ifdef __cplusplus extern "C" { #endif /* clp.h - Public interface to CLP. * This file is part of CLP, the command line parser package. * * Copyright (c) 1997-2005 Eddie Kohler, kohler@icir.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file, which is available in full at * http://www.pdos.lcs.mit.edu/click/license.html. The conditions include: you * must preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */ /* Argument types */ #define Clp_NoArg 0 #define Clp_ArgString 1 #define Clp_ArgStringNotOption 2 #define Clp_ArgBool 3 #define Clp_ArgInt 4 #define Clp_ArgUnsigned 5 #define Clp_ArgDouble 6 #define Clp_FirstUserType 10 /* Flags for individual Clp_Options */ #define Clp_Mandatory (1<<0) /* Has mandatory argument */ #define Clp_Optional (1<<1) /* Has optional argument */ #define Clp_Negate (1<<2) /* Allow --no-OPT */ #define Clp_OnlyNegated (1<<3) /* Allow --no-OPT, but not --OPT */ #define Clp_PreferredMatch (1<<4) /* Prefer --OPT to --OPTwhatever */ /* when matching option prefixes */ struct Clp_Option { const char *long_name; /* e.g. "version" */ int short_name; /* e.g. 'v' */ int option_id; /* number returned by Clp_Next */ int arg_type; /* e.g. Clp_ArgBool */ int flags; /* e.g. Clp_Optional | Clp_Negate */ }; /* Sizes of clp->val */ #define Clp_ValSize 40 #define Clp_ValIntSize 10 typedef struct Clp_Option Clp_Option; typedef struct Clp_Parser Clp_Parser; typedef struct Clp_Internal Clp_Internal; typedef struct Clp_ParserState Clp_ParserState; typedef struct Clp_Argv Clp_Argv; typedef int (*Clp_ArgParseFunc)(Clp_Parser *, const char *, int, void *); typedef void (*Clp_ErrorHandler)(const char *); struct Clp_Parser { int negated; int have_arg; const char *arg; union { int i; unsigned u; double d; const char *s; void *pv; #ifdef HAVE_INT64_TYPES int64_t i64; uint64_t u64; #endif char cs[Clp_ValSize]; unsigned char ucs[Clp_ValSize]; int is[Clp_ValIntSize]; unsigned us[Clp_ValIntSize]; } val; Clp_Internal *internal; }; Clp_Parser * Clp_NewParser(int argc, const char * const *argv, int nopt, Clp_Option *opt); void Clp_DeleteParser(Clp_Parser *); Clp_ErrorHandler Clp_SetErrorHandler(Clp_Parser *, Clp_ErrorHandler); const char * Clp_ProgramName(Clp_Parser *); void Clp_SetProgramName(Clp_Parser *, const char *); struct Clp_Argv { int argc; char **argv; char *argv_buf; }; Clp_Argv * Clp_NewArgv(const char *args, int len); void Clp_DeleteArgv(Clp_Argv *); /* Option types for Clp_SetOptionChar */ /* Clp_NotOption 0 */ #define Clp_Short (1<<0) #define Clp_Long (1<<1) #define Clp_ShortNegated (1<<2) #define Clp_LongNegated (1<<3) #define Clp_LongImplicit (1<<4) int Clp_SetOptionChar(Clp_Parser *, int c, int option_type); /* Argument type flags for Clp_AddType */ #define Clp_DisallowOptions (1<<0) /* No option-looking args */ int Clp_AddType (Clp_Parser *, int type_id, int flags, Clp_ArgParseFunc func, void *user_data); /* Flags for Clp_AddStringListType */ #define Clp_AllowNumbers (1<<0) /* Number args OK */ int Clp_AddStringListType (Clp_Parser *, int type_id, int flags, ...); int Clp_AddStringListTypeVec (Clp_Parser *, int type_id, int flags, int n, char **str, int *val); /* Return values from Clp_Next */ #define Clp_NotOption 0 #define Clp_Done -1 #define Clp_BadOption -2 #define Clp_Error -3 int Clp_Next(Clp_Parser *); const char * Clp_Shift(Clp_Parser *, int allow_dashes); int Clp_SetOptionProcessing(Clp_Parser *, int option_processing); Clp_ParserState *Clp_NewParserState(void); void Clp_DeleteParserState(Clp_ParserState *); void Clp_SaveParser(Clp_Parser *, Clp_ParserState *); void Clp_RestoreParser(Clp_Parser *, Clp_ParserState *); int Clp_OptionError(Clp_Parser *, const char *, ...); int Clp_CurOptionNameBuf(Clp_Parser *, char *buf, int buflen); const char * Clp_CurOptionName(Clp_Parser *); /* uses static memory */ #ifdef __cplusplus } #endif #endif xmahjongg-3.7/include/lcdf/straccum.hh0000644000076400007640000001421510200602001014753 00000000000000// -*- related-file-name: "../../liblcdf/straccum.cc" -*- #ifndef LCDF_STRACCUM_HH #define LCDF_STRACCUM_HH #include #include #include #ifdef HAVE_PERMSTRING # include #endif template class Vector; class StringAccum { public: StringAccum() : _s(0), _len(0), _cap(0) { } explicit inline StringAccum(int); explicit StringAccum(const char *); explicit StringAccum(const String &); #ifdef HAVE_PERMSTRING explicit StringAccum(PermString); #endif ~StringAccum() { if (_cap >= 0) delete[] _s; } char *data() const { return (char *)_s; } int length() const { return _len; } operator bool() const { return _len != 0; } bool operator!() const { return _len == 0; } bool out_of_memory() const { return _cap < 0; } const char *c_str(); char operator[](int i) const{ assert(i>=0&&i<_len); return (char)_s[i]; } char &operator[](int i) { assert(i>=0&&i<_len); return (char &)_s[i]; } char back() const { assert(_len>0); return (char)_s[_len-1]; } char &back() { assert(_len>0); return (char &)_s[_len-1]; } inline void clear(); inline char *extend(int, int = 0); inline void append(char); inline void append(unsigned char); inline void append(const char *, int); inline void append(const char *begin, const char *end); inline void append(const unsigned char *, int); // word joining void append_break_lines(const String& text, int linelen, const String& leftmargin = String()); inline char *reserve(int); void set_length(int l) { assert(l>=0 && _len<=_cap); _len = l; } void forward(int n) { assert(n>=0 && _len+n<=_cap); _len += n; } void pop_back(int n = 1) { assert(n>=0 && _len>=n); _len -= n; } StringAccum &snprintf(int, const char *, ...); inline unsigned char *take_bytes(); // returns array allocated by new[] String take_string(); // see also operator<< declarations below private: unsigned char *_s; int _len; int _cap; void make_out_of_memory(); inline void safe_append(const char *, int); bool grow(int); void erase() { _s = 0; _len = 0; _cap = 0; } StringAccum(const StringAccum &); StringAccum &operator=(const StringAccum &); friend StringAccum &operator<<(StringAccum &, const char *); #ifdef HAVE_PERMSTRING friend StringAccum &operator<<(StringAccum &, PermString); #endif }; inline StringAccum &operator<<(StringAccum &, char); inline StringAccum &operator<<(StringAccum &, unsigned char); inline StringAccum &operator<<(StringAccum &, const char *); inline StringAccum &operator<<(StringAccum &, const String &); inline StringAccum &operator<<(StringAccum &, const StringAccum &); #ifdef HAVE_PERMSTRING inline StringAccum &operator<<(StringAccum &, PermString); #endif inline StringAccum &operator<<(StringAccum &, bool); inline StringAccum &operator<<(StringAccum &, short); inline StringAccum &operator<<(StringAccum &, unsigned short); inline StringAccum &operator<<(StringAccum &, int); inline StringAccum &operator<<(StringAccum &, unsigned); StringAccum &operator<<(StringAccum &, long); StringAccum &operator<<(StringAccum &, unsigned long); StringAccum &operator<<(StringAccum &, double); inline StringAccum::StringAccum(int cap) : _s(new unsigned char[cap]), _len(0), _cap(cap) { assert(cap > 0); if (!_s) _cap = -1; } inline void StringAccum::append(unsigned char c) { if (_len < _cap || grow(_len)) _s[_len++] = c; } inline void StringAccum::append(char c) { append(static_cast(c)); } inline char * StringAccum::reserve(int hm) { assert(hm >= 0); if (_len + hm <= _cap || grow(_len + hm)) return (char *)(_s + _len); else return 0; } inline char * StringAccum::extend(int amt, int extra) { assert(extra >= 0); char *c = reserve(amt + extra); if (c) _len += amt; return c; } inline void StringAccum::safe_append(const char *s, int len) { if (char *x = extend(len)) memcpy(x, s, len); } inline void StringAccum::append(const char *s, int len) { if (len < 0) len = strlen(s); else if (len == 0 && s == String::out_of_memory_data()) make_out_of_memory(); safe_append(s, len); } inline void StringAccum::append(const unsigned char *s, int len) { append(reinterpret_cast(s), len); } inline void StringAccum::append(const char *begin, const char *end) { if (begin < end) safe_append(begin, end - begin); else if (begin == String::out_of_memory_data()) make_out_of_memory(); } inline unsigned char * StringAccum::take_bytes() { unsigned char *str = _s; erase(); return str; } inline void StringAccum::clear() { if (_cap < 0) _cap = 0, _s = 0; _len = 0; } inline StringAccum & operator<<(StringAccum &sa, char c) { sa.append(c); return sa; } inline StringAccum & operator<<(StringAccum &sa, unsigned char c) { sa.append(c); return sa; } inline StringAccum & operator<<(StringAccum &sa, const char *s) { sa.safe_append(s, strlen(s)); return sa; } inline StringAccum & operator<<(StringAccum &sa, bool b) { return sa << (b ? "true" : "false"); } inline StringAccum & operator<<(StringAccum &sa, short i) { return sa << static_cast(i); } inline StringAccum & operator<<(StringAccum &sa, unsigned short u) { return sa << static_cast(u); } inline StringAccum & operator<<(StringAccum &sa, int i) { return sa << static_cast(i); } inline StringAccum & operator<<(StringAccum &sa, unsigned u) { return sa << static_cast(u); } inline StringAccum & operator<<(StringAccum &sa, const String &s) { sa.append(s.data(), s.length()); return sa; } #ifdef HAVE_PERMSTRING inline StringAccum & operator<<(StringAccum &sa, PermString s) { sa.safe_append(s.c_str(), s.length()); return sa; } #endif inline StringAccum & operator<<(StringAccum &sa, const StringAccum &sb) { sa.append(sb.data(), sb.length()); return sa; } inline bool operator==(StringAccum &sa, const char *s) { return strcmp(sa.c_str(), s) == 0; } inline bool operator!=(StringAccum &sa, const char *s) { return strcmp(sa.c_str(), s) != 0; } #endif xmahjongg-3.7/include/lcdf/vector.cc0000664000076400007640000000536107756037263014470 00000000000000#ifndef LCDF_VECTOR_CC #define LCDF_VECTOR_CC /* * vector.{cc,hh} -- simple array template class * Eddie Kohler * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * Copyright (c) 2001-2003 International Computer Science Institute * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */ /* #include */ template Vector::Vector(const Vector &o) : _l(0), _n(0), _capacity(0) { *this = o; } template Vector::~Vector() { for (int i = 0; i < _n; i++) _l[i].~T(); delete[] (unsigned char *)_l; } template Vector & Vector::operator=(const Vector &o) { if (&o != this) { for (int i = 0; i < _n; i++) _l[i].~T(); _n = 0; if (reserve(o._n)) { _n = o._n; for (int i = 0; i < _n; i++) new(velt(i)) T(o._l[i]); } } return *this; } template Vector & Vector::assign(int n, const T &e) { resize(0, e); resize(n, e); return *this; } template typename Vector::iterator Vector::erase(iterator a, iterator b) { if (b > a) { assert(a >= begin() && b <= end()); iterator i = a, j = b; for (; j < end(); i++, j++) { i->~T(); new((void*) i) T(*j); } for (; i < end(); i++) i->~T(); _n -= b - a; return a; } else return b; } template bool Vector::reserve(int want) { if (want < 0) want = _capacity > 0 ? _capacity * 2 : 4; if (want <= _capacity) return true; T *new_l = (T *)new unsigned char[sizeof(T) * want]; if (!new_l) return false; for (int i = 0; i < _n; i++) { new(velt(new_l, i)) T(_l[i]); _l[i].~T(); } delete[] (unsigned char *)_l; _l = new_l; _capacity = want; return true; } template void Vector::resize(int nn, const T &e) { if (nn <= _capacity || reserve(nn)) { for (int i = nn; i < _n; i++) _l[i].~T(); for (int i = _n; i < nn; i++) new(velt(i)) T(e); _n = nn; } } template void Vector::swap(Vector &o) { T *l = _l; int n = _n; int cap = _capacity; _l = o._l; _n = o._n; _capacity = o._capacity; o._l = l; o._n = n; o._capacity = cap; } #endif xmahjongg-3.7/include/lcdf/vector.hh0000664000076400007640000001566507756037263014512 00000000000000#ifndef LCDF_VECTOR_HH #define LCDF_VECTOR_HH #include #include #ifdef HAVE_NEW_HDR # include #elif defined(HAVE_NEW_H) # include #else static inline void *operator new(size_t, void *v) { return v; } #endif template class Vector { public: typedef T value_type; typedef T& reference; typedef const T& const_reference; typedef T* pointer; typedef const T* const_pointer; typedef int size_type; typedef T* iterator; typedef const T* const_iterator; explicit Vector() : _l(0), _n(0), _capacity(0) { } explicit Vector(size_type n, const T &e) : _l(0), _n(0), _capacity(0) { resize(n, e); } // template ... Vector(const Vector &); ~Vector(); Vector& operator=(const Vector&); Vector& assign(size_type n, const T& e = T()); // template ... // iterators iterator begin() { return _l; } const_iterator begin() const { return _l; } iterator end() { return _l + _n; } const_iterator end() const { return _l + _n; } // capacity size_type size() const { return _n; } void resize(size_type nn, const T& e = T()); size_type capacity() const { return _capacity; } bool empty() const { return _n == 0; } bool reserve(size_type); // element access T& operator[](size_type i) { assert(i>=0 && i<_n); return _l[i]; } const T& operator[](size_type i) const{ assert(i>=0 && i<_n); return _l[i]; } T& at(size_type i) { return operator[](i); } const T& at(size_type i) const { return operator[](i); } T& front() { return operator[](0); } const T& front() const { return operator[](0); } T& back() { return operator[](_n - 1); } const T& back() const { return operator[](_n - 1); } T& at_u(size_type i) { return _l[i]; } const T& at_u(size_type i) const { return _l[i]; } // modifiers inline void push_back(const T&); inline void pop_back(); inline iterator erase(iterator); iterator erase(iterator, iterator); void swap(Vector &); void clear() { erase(begin(), end()); } private: T *_l; size_type _n; size_type _capacity; void *velt(size_type i) const { return (void *)&_l[i]; } static void *velt(T *l, size_type i) { return (void *)&l[i]; } }; template inline void Vector::push_back(const T &e) { if (_n < _capacity || reserve(-1)) { new(velt(_n)) T(e); _n++; } } template inline void Vector::pop_back() { assert(_n > 0); --_n; _l[_n].~T(); } template inline typename Vector::iterator Vector::erase(iterator e) { return (e < end() ? erase(e, e + 1) : e); } template <> class Vector { public: typedef void* value_type; typedef void*& reference; typedef void* const& const_reference; typedef void** pointer; typedef void* const* const_pointer; typedef int size_type; typedef void** iterator; typedef void* const* const_iterator; explicit Vector() : _l(0), _n(0), _capacity(0) { } explicit Vector(size_type n, void* e) : _l(0), _n(0), _capacity(0) { resize(n, e); } Vector(const Vector &); ~Vector(); Vector &operator=(const Vector &); Vector &assign(size_type n, void* e = 0); // iterators iterator begin() { return _l; } const_iterator begin() const { return _l; } iterator end() { return _l + _n; } const_iterator end() const { return _l + _n; } // capacity size_type size() const { return _n; } void resize(size_type nn, void* e = 0); size_type capacity() const { return _capacity; } bool empty() const { return _n == 0; } bool reserve(size_type); // element access void*& operator[](size_type i) { assert(i>=0 && i<_n); return _l[i]; } void* operator[](size_type i) const { assert(i>=0 && i<_n); return _l[i]; } void*& at(size_type i) { return operator[](i); } void* at(size_type i) const { return operator[](i); } void*& front() { return operator[](0); } void* front() const { return operator[](0); } void*& back() { return operator[](_n - 1); } void* back() const { return operator[](_n - 1); } void*& at_u(size_type i) { return _l[i]; } void* at_u(size_type i) const { return _l[i]; } // modifiers inline void push_back(void*); inline void pop_back(); inline iterator erase(iterator); iterator erase(iterator, iterator); void swap(Vector &); void clear() { _n = 0; } private: void **_l; size_type _n; size_type _capacity; }; inline void Vector::push_back(void *e) { if (_n < _capacity || reserve(-1)) { _l[_n] = e; _n++; } } inline void Vector::pop_back() { assert(_n > 0); --_n; } inline Vector::iterator Vector::erase(Vector::iterator e) { return (e < end() ? erase(e, e + 1) : e); } template class Vector: private Vector { typedef Vector Base; public: typedef T* value_type; typedef T*& reference; typedef T* const& const_reference; typedef T** pointer; typedef T* const* const_pointer; typedef int size_type; typedef T** iterator; typedef T* const* const_iterator; explicit Vector() : Base() { } explicit Vector(size_type n, T* e) : Base(n, (void *)e) { } Vector(const Vector &o) : Base(o) { } ~Vector() { } Vector &operator=(const Vector &o) { Base::operator=(o); return *this; } Vector &assign(size_type n, T *e = 0) { Base::assign(n, (void *)e); return *this; } // iterators const_iterator begin() const { return (const_iterator)(Base::begin()); } iterator begin() { return (iterator)(Base::begin()); } const_iterator end() const { return (const_iterator)(Base::end()); } iterator end() { return (iterator)(Base::end()); } // capacity size_type size() const { return Base::size(); } void resize(size_type n, T *e = 0) { Base::resize(n, (void *)e); } size_type capacity() const { return Base::capacity(); } bool empty() const { return Base::empty(); } bool reserve(size_type n) { return Base::reserve(n); } // element access T*& operator[](size_type i) { return (T*&)(Base::at(i)); } T* operator[](size_type i) const { return (T*)(Base::operator[](i)); } T*& at(size_type i) { return (T*&)(Base::operator[](i)); } T* at(size_type i) const { return (T*)(Base::at(i)); } T*& front() { return (T*&)(Base::front()); } T* front() const { return (T*)(Base::front()); } T*& back() { return (T*&)(Base::back()); } T* back() const { return (T*)(Base::back()); } T*& at_u(size_type i) { return (T*&)(Base::at_u(i)); } T* at_u(size_type i) const { return (T*)(Base::at_u(i)); } // modifiers void push_back(T* e) { Base::push_back((void*)e); } void pop_back() { Base::pop_back(); } iterator erase(iterator i) { return Base::erase((void**)i); } iterator erase(iterator i, iterator j) { return Base::erase((void**)i, (void**)j); } void swap(Vector &o) { Base::swap(o); } void clear() { Base::clear(); } }; #include // necessary to support GCC 3.3 #endif xmahjongg-3.7/include/lcdf/permstr.hh0000664000076400007640000000662310150163047014654 00000000000000// -*- related-file-name: "../../liblcdf/permstr.cc" -*- #ifndef LCDF_PERMSTR_HH #define LCDF_PERMSTR_HH #include #include #include #include class PermString; inline bool operator==(PermString, PermString); inline bool operator!=(PermString, PermString); class PermString { struct Doodad; public: typedef Doodad *Capsule; // Declare a PermString::Initializer in any file in which you declare // static global PermStrings. struct Initializer { Initializer(); }; PermString() : _rep(zero_char_doodad.data) { } explicit PermString(char c); inline PermString(const char*); inline PermString(const char*, int); inline PermString(const char*, const char*); inline operator bool() const; inline bool operator!() const; inline int length() const; char operator[](int) const; const char* begin() const { return _rep; } inline const char* end() const; friend inline bool operator==(PermString, PermString); friend inline bool operator!=(PermString, PermString); const char* c_str() const { return _rep; } inline Capsule capsule() const; inline static PermString decapsule(Capsule c); friend PermString permprintf(const char*, ...); friend PermString vpermprintf(const char*, va_list); friend PermString permcat(PermString, PermString); friend PermString permcat(PermString, PermString, PermString); private: struct Doodad { Doodad* next; int length; char data[2]; }; const char* _rep; PermString(Doodad* d) : _rep(d->data) { } void initialize(const char*, int); Doodad* doodad() const { return (Doodad*)(_rep - offsetof(Doodad, data)); } friend struct PermString::Initializer; static void static_initialize(); enum { NHASH = 1024 }; // must be power of 2 static Doodad zero_char_doodad, one_char_doodad[256], *buckets[NHASH]; }; inline PermString::PermString(const char* s) { initialize(s, -1); } inline PermString::PermString(const char* s, int len) { initialize(s, len); } inline PermString::PermString(const char* begin, const char* end) { assert(end); initialize(begin, end > begin ? end - begin : 0); } inline PermString::operator bool() const { return _rep != zero_char_doodad.data; } inline bool PermString::operator!() const { return _rep == zero_char_doodad.data; } inline int PermString::length() const { return doodad()->length; } inline const char* PermString::end() const { return _rep + doodad()->length; } inline bool operator==(PermString a, PermString b) { return a._rep == b._rep; } bool operator==(PermString, const char*); inline bool operator==(const char* a, PermString b) { return b == a; } inline bool operator!=(PermString a, PermString b) { return a._rep != b._rep; } inline bool operator!=(PermString a, const char* b) { return !(a == b); } inline bool operator!=(const char* a, PermString b) { return !(b == a); } inline PermString::Capsule PermString::capsule() const { return doodad(); } inline PermString PermString::decapsule(Capsule c) { return PermString(c); } inline unsigned hashcode(PermString s) { return (uintptr_t)(s.c_str()); } PermString permprintf(const char*, ...); PermString vpermprintf(const char*, va_list); PermString permcat(PermString, PermString); PermString permcat(PermString, PermString, PermString); #endif xmahjongg-3.7/include/lcdf/inttypes.h0000664000076400007640000000144107723465163014700 00000000000000#ifndef LCDF_INTTYPES_H #define LCDF_INTTYPES_H /* Define known-width integer types. */ #ifdef HAVE_INTTYPES_H # include #elif defined(HAVE_SYS_TYPES_H) # include # ifdef HAVE_U_INT_TYPES typedef u_int8_t uint8_t; typedef u_int16_t uint16_t; typedef u_int32_t uint32_t; # endif #endif #ifdef HAVE_FAKE_INT_TYPES typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed short int16_t; typedef unsigned short uint16_t; typedef signed int int32_t; typedef unsigned int uint32_t; #endif #ifndef HAVE_UINTPTR_T # if SIZEOF_VOID_P == SIZEOF_UNSIGNED_INT typedef unsigned int uintptr_t; # elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG typedef unsigned long uintptr_t; # endif #endif /* Note: Windows compilers call these types '[un]signed __int8', etc. */ #endif xmahjongg-3.7/config.h.in0000644000076400007640000000631710213402577012331 00000000000000/* config.h.in. Generated from configure.in by autoheader. */ #ifndef XMAHJONGG_CONFIG_H #define XMAHJONGG_CONFIG_H /* Define to the number of arguments taken by gettimeofday(). */ #undef GETTIMEOFDAY_PROTO /* Define if intXX_t types are not available. */ #undef HAVE_FAKE_INT_TYPES /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_NEW_H /* Define if exists and works. */ #undef HAVE_NEW_HDR /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if the system has the type `uintptr_t'. */ #undef HAVE_UINTPTR_T /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have u_intXX_t types but not uintXX_t types. */ #undef HAVE_U_INT_TYPES /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to the pathname of the --pkgdatadir directory. */ #undef PKGDATADIR /* The size of a `unsigned int', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_INT /* The size of a `unsigned long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG /* The size of a `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif #include #ifdef __cplusplus extern "C" { #endif /* Use the clean-failing malloc library in fmalloc.c */ #define xmalloc(s) fail_die_malloc((s),__FILE__,__LINE__) #define xrealloc(p,s) fail_die_realloc((p),(s),__FILE__,__LINE__) #define xfree free void *fail_die_malloc(size_t, const char *, int); void *fail_die_realloc(void *, size_t, const char *, int); /* Prototype strerror() if we don't have it. */ #if !HAVE_STRERROR char *strerror(int errno); #endif #ifdef __cplusplus } /* Get rid of a possible inline macro under C++. */ # define inline inline #endif #endif /* XMAHJONGG_CONFIG_H */ xmahjongg-3.7/NEWS0000644000076400007640000001050710213402461010771 00000000000000Xmahjongg NEWS Version 3.7 8.Mar.2005 * Man page bug fixes from Debian via Dave Swegen. * Source code reorganization. Version 3.6.1 13.Sep.2002 * Compilation fixes for newer GCCs; problems reported by Rene Blokland. Version 3.6 21.Aug.2001 * Added `rat', `ox', `tiger', `hare', `dragon', `snake', `horse', `ram', `monkey', `rooster', `dog', and `boar' layouts -- the whole Chinese zodiac! -- contributed by Todd Michel McComb . Version 3.5 30.Jun.2001 * Added native support for KDE Mahjongg (kmahjongg) tilesets and layouts. (The tilesets must be converted to GIF format; kmahjongg uses BMP.) Brought to my attention by Jim Broderick . * Another compilation fix reported by Rene Blokland . * Fixed bug: xmahjongg would ignore some button release events. Version 3.4 17.May.2001 * Compilation fix for newer gccs. Version 3.3 3.Apr.2000 * Game play change: If a tile is selected already and you click a tile that doesn't match, the selection is transferred to that new tile. (It used to just beep at you.) * Bug fix in permstr.cc: now xmahjongg can be compiled with recent versions of gcc. The error was a strange use of va_arg(). Reported by C. M. Connelly . Version 3.2 5.Jan.2000 * Added two new tilesets: `dorothys', a colored version by Dorothy Robinson (the old `dorothys' has been renamed to `dorwhite'), and `real', scanned images of some real Mah Jongg tiles provided by Mark Sanctuary . * Added new tileset format. Check `share/tiles/real.gif' to see what it looks like. Version 3.1 30.Dec.1999 * Some small changes to hopefully fix a mystery bug: Some people report that xmahjongg appears with no tiles visible. I can't replicate this. Version 3.0 19.Dec.1999 * Finally completed number font! * Better support for very thick tilesets and tilesets with lower-right direction shadows. * The `thick' tileset is now the default. * Speed improvements on highlighting and unhighlighting tiles. * The match count no longer bleeds into the layout area when there are a lot of matches. * Can read Kyodai Mahjongg layout files. (See http://www.kyodai.com/) Version 3.0b11 17.Dec.1999 * Added `dorothys' tileset, thanks to Dorothy Robinson , artist of the original xmahjongg tiles. Also added support for tilesets that don't have lower-left direction shadows. Version 3.0b10 12.Jan.1999 * Fixed buffer overrun bug: xmahjongg wouldn't load anything but the default layout. Version 3.0b9 28.Dec.1998 * The xmahjongg package now uses automake. * Use the failing-malloc library to avoid problems with some systems' bad realloc() definitions. * Improved error messages on bad files. Version 3.0b8 5.Nov.1998 * Added support for Gnome Mahjongg-style tilesets. (Well, almost: while Gnome Mahjongg reads XPMs -- and probably every other format, using imlib -- xmahjongg can still only read GIFs.) * Added two tilesets from Gnome Mahjongg: `gnome' and `gnome2'. These tilesets were apparently created by Jonathan Buzzard and Max Watson. * Shrank the border around the layout to waste less screen space. The default tileset with default layout will now fit on a 1024x768 screen. * Renamed the `--board' option to `--layout'. Moved `share/boards' to `share/layouts'. Renamed the `tall' tileset to `thick'. Version 3.0b7 26.Sep.1998 * `--help' now prints to stdout, following the GNU Coding Standards. * Made `--solvable-boards' the default. * Makefiles: Added `make uninstall' target, enabled `./configure's program name transformations, made VPATH builds possible. Version 3.0b6 17.Sep.1998 * More configuration changes so it'll work with egcs or gcc-2.7.2.1. Version 3.0b5 16.Sep.1998 * Made it compilable with egcs. Version 3.0b4 12.Sep.1998 * Fixed several display and clipping bugs. * Added `--list' and `--background'. * Initial display and new-game display are cleaner. * Cleaned up Panel and Board by removing unused or duplicate members and functionality. Version 3.0b3 10.Sep.1998 * Who the hell knows. Version 3.0b2 7.Sep.1998 * Big release after the summer. Traversal, solutions, bug fixes, cleaned-up code, a first go at a tile count, etc., etc. Version 3.0a1 1997 * First release. xmahjongg-3.7/Makefile.am0000664000076400007640000001000610213403276012327 00000000000000## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign check-news SUBDIRS = liblcdf src man_MANS = xmahjongg.6 # # Installation # LAYOUTS = default bridge wedges ceremonial farandole arena theater \ deepwell hourglass arrow papillon schoon \ rat ox tiger hare dragon snake horse ram monkey rooster dog boar TILESETS = thin.gif small.gif thick.gif gnome.gif gnome2.gif dorothys.gif \ dorwhite.gif real.gif BACKGROUNDS = default.gif green.gif install-share: $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/layouts $(DESTDIR)$(pkgdatadir)/tiles $(DESTDIR)$(pkgdatadir)/backgrounds for i in $(LAYOUTS); do \ $(INSTALL_DATA) $(srcdir)/share/layouts/$$i $(DESTDIR)$(pkgdatadir)/layouts; done for i in $(TILESETS); do \ $(INSTALL_DATA) $(srcdir)/share/tiles/$$i $(DESTDIR)$(pkgdatadir)/tiles; done for i in $(BACKGROUNDS); do \ $(INSTALL_DATA) $(srcdir)/share/backgrounds/$$i $(DESTDIR)$(pkgdatadir)/backgrounds; done install-data-local: install-share uninstall-local: -cd $(DESTDIR)$(pkgdatadir)/layouts; rm -f $(LAYOUTS) -cd $(DESTDIR)$(pkgdatadir)/tiles; rm -f $(TILESETS) -cd $(DESTDIR)$(pkgdatadir)/backgrounds; rm -f $(BACKGROUNDS) -rmdir $(DESTDIR)$(pkgdatadir)/layouts $(DESTDIR)$(pkgdatadir)/tiles $(DESTDIR)$(pkgdatadir)/backgrounds -rmdir $(DESTDIR)$(pkgdatadir) # # Distribution # EXTRA_DIST = \ xmahjongg.6 \ xmahjongg.spec \ include/lcdf/clp.h \ include/lcdf/inttypes.h \ include/lcdf/permstr.hh \ include/lcdf/straccum.hh \ include/lcdf/string.hh \ include/lcdf/vector.hh include/lcdf/vector.cc \ include/lcdfgif/gif.h \ include/lcdfgif/gifx.h dist-hook: mkdir $(distdir)/share mkdir $(distdir)/share/layouts mkdir $(distdir)/share/tiles mkdir $(distdir)/share/backgrounds for l in $(LAYOUTS); do cp -p $(srcdir)/share/layouts/$$l $(distdir)/share/layouts; done for t in $(TILESETS); do cp -p $(srcdir)/share/tiles/$$t $(distdir)/share/tiles; done for b in $(BACKGROUNDS); do cp -p $(srcdir)/share/backgrounds/$$b $(distdir)/share/backgrounds; done mkdir $(distdir)/images cp -p $(srcdir)/images/*.gif $(distdir)/images rpm: dist buildarch=`rpm --showrc | awk '/^build arch/ { print $$4; }'` ; \ mkdir -p /tmp/rpm-xmj/SOURCES /tmp/rpm-xmj/RPMS/$$buildarch \ /tmp/rpm-xmj/BUILD ; \ echo 'include: /usr/lib/rpm/rpmrc' > /tmp/rpm-xmj/rc ; \ echo 'macrofiles: /usr/lib/rpm/macros:/tmp/rpm-xmj/macros' >> /tmp/rpm-xmj/rc ; \ echo '%_topdir /tmp/rpm-xmj' > /tmp/rpm-xmj/macros ; \ cp logo.gif $(PACKAGE)-$(VERSION).tar.gz /tmp/rpm-xmj/SOURCES ; \ rpm --rcfile /tmp/rpm-xmj/rc -bb xmahjongg.spec ; \ cp /tmp/rpm-xmj/RPMS/$$buildarch/*.rpm . rm -rf /tmp/rpm-xmj # # Maintenance # srclinks: test -d $(srcdir)/include || mkdir $(srcdir)/include test -d $(srcdir)/include/lcdf || mkdir $(srcdir)/include/lcdf test -d $(srcdir)/include/lcdfgif || mkdir $(srcdir)/include/lcdfgif cd $(srcdir); for i in clp ; do \ ln -sf ../../liblcdf/liblcdf/$$i.c liblcdf/$$i.c ; \ ln -sf ../../../liblcdf/include/lcdf/$$i.h include/lcdf/$$i.h ; done cd $(srcdir); for i in fixlibc.c vectorv.cc fmalloc.c ; do \ ln -sf ../../liblcdf/liblcdf/$$i liblcdf/$$i ; done cd $(srcdir); for i in vector ; do \ ln -sf ../../../liblcdf/include/lcdf/$$i.cc include/lcdf/$$i.cc ; \ ln -sf ../../../liblcdf/include/lcdf/$$i.hh include/lcdf/$$i.hh ; done cd $(srcdir); for i in permstr straccum string ; do \ ln -sf ../../../liblcdf/include/lcdf/$$i.hh include/lcdf/$$i.hh ; \ ln -sf ../../liblcdf/liblcdf/$$i.cc liblcdf/$$i.cc ; done cd $(srcdir); for i in inttypes.h ; do \ ln -sf ../../../liblcdf/include/lcdf/$$i include/lcdf/$$i ; done cd $(srcdir); for i in gif.h gifx.h ; do \ ln -sf ../../../liblcdf/include/lcdfgif/$$i include/lcdfgif/$$i ; done cd $(srcdir); for i in giffunc.c gifread.c giftoc.c gifx.c ; do \ ln -sf ../../liblcdf/liblcdfgif/$$i liblcdf/$$i ; done versionize: perl -pi -e "s/^\\.ds V.*/.ds V $(VERSION)/;" $(top_srcdir)/xmahjongg.6 perl -pi -e "s/^Version: .*/Version: $(VERSION)/; s/$(PACKAGE)-[\w.]+\.tar\.gz/$(PACKAGE)-$(VERSION).tar.gz/;" $(top_srcdir)/xmahjongg.spec .PHONY: srclinks versionize rpm xmahjongg-3.7/missing0000755000076400007640000002453310126442331011700 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2004-09-07.08 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit 0 ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit 0 ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: xmahjongg-3.7/configure.in0000664000076400007640000000737410076763534012637 00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT(src/game.hh) AM_INIT_AUTOMAKE(xmahjongg, 3.7) AM_CONFIG_HEADER(config.h) AC_PROG_CC AC_C_CONST AC_C_INLINE AC_PROG_CPP AC_PROG_CXX AC_PROG_CXXCPP AC_PROG_RANLIB if test -n "$GCC" ; then CC="$CC -Wall"; CXX="$CXX -Wall"; fi AC_PATH_XTRA dnl dnl strerror()? dnl AC_REPLACE_FUNCS(strerror) dnl dnl gettimeofday() dnl AC_CACHE_CHECK(for gettimeofday prototype, ac_cv_gettimeofday, [AC_TRY_COMPILE([#include #include ], [gettimeofday((void *)0, (void *)0);], [AC_TRY_COMPILE([#include #include ], [gettimeofday((void *)0);], ac_cv_gettimeofday=0, ac_cv_gettimeofday=2)], ac_cv_gettimeofday=1)]) AC_DEFINE_UNQUOTED(GETTIMEOFDAY_PROTO, $ac_cv_gettimeofday, [Define to the number of arguments taken by gettimeofday().]) dnl dnl integer types dnl AC_CHECK_HEADERS(inttypes.h, have_inttypes_h=yes, have_inttypes_h=no) AC_CHECK_HEADERS(sys/types.h, have_sys_types_h=yes, have_sys_types_h=no) if test $have_inttypes_h = no -a $have_sys_types_h = yes; then AC_CACHE_CHECK([for uintXX_t typedefs], ac_cv_uint_t, [AC_EGREP_HEADER(dnl changequote(<<,>>)<<(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]>>changequote([,]), sys/types.h, ac_cv_uint_t=yes, ac_cv_uint_t=no)]) fi if test $have_inttypes_h = no -a $have_sys_types_h = yes -a "$ac_cv_uint_t" = no; then AC_CACHE_CHECK([for u_intXX_t typedefs], ac_cv_u_int_t, [AC_EGREP_HEADER(dnl changequote(<<,>>)<<(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]>>changequote([,]), sys/types.h, ac_cv_u_int_t=yes, ac_cv_u_int_t=no)]) fi if test $have_inttypes_h = yes -o "$ac_cv_uint_t" = yes; then : elif test "$ac_cv_u_int_t" = yes; then AC_DEFINE(HAVE_U_INT_TYPES, 1, [Define if you have u_intXX_t types but not uintXX_t types.]) else AC_MSG_WARN([ ========================================= Neither uint32_t nor u_int32_t defined by or ! Assuming "short" has 16 bits and "int" has 32 bits. =========================================]) AC_DEFINE(HAVE_FAKE_INT_TYPES, 1, [Define if intXX_t types are not available.]) fi AC_CHECK_TYPES(uintptr_t, [], [], [#if HAVE_INTTYPES_H # include #endif #if HAVE_SYS_TYPES_H # include #endif ]) AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(unsigned int) dnl dnl and/or dnl AC_LANG_CPLUSPLUS AC_CACHE_CHECK(whether works, ac_cv_good_new_hdr, AC_TRY_LINK([#include ], [ int a; int *b = new(&a) int; return 0; ], ac_cv_good_new_hdr=yes, ac_cv_good_new_hdr=no)) if test "$ac_cv_good_new_hdr" = yes; then AC_DEFINE(HAVE_NEW_HDR, 1, [Define if exists and works.]) fi AC_CHECK_HEADERS(new.h) dnl dnl Set PKGDATADIR -- must expand it to get rid of a possible `${prefix}' dnl test "x$prefix" = xNONE && prefix=$ac_default_prefix pkgdatadir=$datadir/$PACKAGE eval pkgdatadir=$pkgdatadir AC_DEFINE_UNQUOTED(PKGDATADIR, "$pkgdatadir", [Define to the pathname of the --pkgdatadir directory.]) dnl dnl verbatim portions of the header dnl AH_TOP([#ifndef XMAHJONGG_CONFIG_H #define XMAHJONGG_CONFIG_H]) AH_BOTTOM([#include #ifdef __cplusplus extern "C" { #endif /* Use the clean-failing malloc library in fmalloc.c */ #define xmalloc(s) fail_die_malloc((s),__FILE__,__LINE__) #define xrealloc(p,s) fail_die_realloc((p),(s),__FILE__,__LINE__) #define xfree free void *fail_die_malloc(size_t, const char *, int); void *fail_die_realloc(void *, size_t, const char *, int); /* Prototype strerror() if we don't have it. */ #if !HAVE_STRERROR char *strerror(int errno); #endif #ifdef __cplusplus } /* Get rid of a possible inline macro under C++. */ # define inline inline #endif #endif /* XMAHJONGG_CONFIG_H */]) dnl dnl Output dnl AC_OUTPUT(Makefile src/Makefile liblcdf/Makefile)