Merge branch 'maint'
authorYann Dirson <ydirson@free.fr>
Thu, 16 Jan 2014 21:43:06 +0000 (22:43 +0100)
committerYann Dirson <ydirson@free.fr>
Thu, 16 Jan 2014 21:43:06 +0000 (22:43 +0100)
Conflicts:
configure.ac
gnushogi/cursesdsp.h
gnushogi/dspwrappers.c
gnushogi/dspwrappers.h
gnushogi/pattern.c
gnushogi/rawdsp.h

35 files changed:
.gitignore
INSTALL
INSTALL.generic [deleted file]
Makefile.am [new file with mode: 0644]
TODO
configure.ac
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [deleted file]
gnushogi/Makefile.am [new file with mode: 0644]
gnushogi/Makefile.in
gnushogi/book.c
gnushogi/commondsp.c
gnushogi/cursesdsp.c
gnushogi/cursesdsp.h [deleted file]
gnushogi/dspwrappers.c [deleted file]
gnushogi/dspwrappers.h [deleted file]
gnushogi/eval.c
gnushogi/genmove.c
gnushogi/gnushogi.h
gnushogi/init-common.c
gnushogi/init.c
gnushogi/main.c
gnushogi/makepattern.c
gnushogi/pat2inc.c
gnushogi/pattern.c
gnushogi/rawdsp.c
gnushogi/rawdsp.h [deleted file]
gnushogi/search.c
gnushogi/tcontrl.c
gnushogi/util.c
install-sh [deleted file]
xshogi/Makefile.am [new file with mode: 0644]
xshogi/Makefile.in [deleted file]
xshogi/parser.y
xshogi/scanner.l

index 658125d..9f08064 100644 (file)
@@ -1,28 +1,37 @@
 /config.h.in
 /configure
 
+Makefile.in
+.deps
+/aclocal.m4
+/compile
+/depcomp
+/install-sh
+/missing
+/ylwrap
+/stamp-h1
+
 /autom4te.cache/
 /config.log
 /config.status
 /config.h
-/Makefile
-/gnushogi/Makefile
+Makefile
 /gnushogi/Makefile.profile
-/doc/Makefile
-/xshogi/Makefile
 
 *.o
 /gnushogi/pat2inc
-/gnushogi/pattern.inc
+/gnushogi/*-pattern.inc
 /gnushogi/gnushogi
 /gnushogi/gnushogi.bbk
 /gnushogi/gnuminishogi
 /gnushogi/gnuminishogi.bbk
+/gnushogi/sizetest
 
 /win32/
 
 /xshogi/scanner.c
 /xshogi/parser.c
+/xshogi/parser.h
 /xshogi/xshogi
 
 /doc/gnushogi*.info
diff --git a/INSTALL b/INSTALL
index dba15ea..007e939 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-Installation procedure for GNU Shogi
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
+Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  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, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. 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.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
 ====================================
 
-If you've never installed a software package using a configure script before,
-please read (or skim) the file "INSTALL.generic" which gives general
-information on using configure scripts.  This file contains information
-specific to GNU shogi.
+   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 can use 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 `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer 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.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   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'.
+
+   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.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
 
-The basic procedure:
--------------------
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
 
-1. Type 'configure --prefix=<where you want GNU shogi installed>'.  If you
-   don't specify a prefix, it will be set to /usr/local.  There are a few GNU
-   shogi-specific options you can use for this command; see below.
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
 
-2. Type 'make' to create gnushogi, the binary book file gnushogi.bbk, and
-   xshogi (the graphical interface to gnushogi).
+Sharing Defaults
+================
 
-3. Type 'make install' to copy the binary book file to the library
-   destination directory and to copy the gnushogi executable to the
-   binary destination directory.
+   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.
 
-4. OPTIONAL:
-   Type 'make clean' to remove object files and binaries from destination
-   source directory.
+Defining Variables
+==================
 
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
 
-Configuration options specific to GNU shogi:
--------------------------------------------
+     ./configure CC=/usr/local2/bin/gcc
 
-These only affect xshogi.
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
 
-  --with-top-part-bitmaps    Use top part of Kanji bitmaps only.
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
 
-  --with-first-shogi-program=PROGNAME    
-        Use PROGNAME as the first shogi program (default: gnushogi)
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
-  --with-second-shogi-program=PROGNAME    
-        Use PROGNAME as the second shogi program (default: gnushogi)
+`configure' Invocation
+======================
 
-  --with-first-host=HOSTNAME    
-        Use HOSTNAME as the machine on which the first shogi program 
-        runs (default: localhost)
+   `configure' recognizes the following options to control how it
+operates.
 
-  --with-second-host=HOSTNAME    
-        Use HOSTNAME as the machine on which the second shogi program 
-        runs (default: localhost)
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
 
-  --with-xshogi    
-        Compile the xshogi graphical interface to GNU shogi (default: yes)
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
 
-If you don't want to compile xshogi, do 
-'configure <other options> --without-xshogi'
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
 
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
 
-Other options:
--------------
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
 
-In the gnushogi directory, the file 'opts.h' includes a number of options that
-can be set to configure the evaluator, to set the debugging level, etc.  These
-options will probably only be of interest to people who are hacking the source
-code, with one exception: if you want to have your games automatically saved
-on exit, #define LIST_ON_EXIT in this file.
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
 
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
 
-Platforms GNU shogi is known to compile on:
-------------------------------------------
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
 
-Red Hat Linux 9.0
-Sun Solaris 2.6
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
 
-Information about attempted or successful ports to other platforms would be
-appreciated.   If you submit such a report, please specify what you had to do
-to get GNU shogi to compile and run successfully.
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
diff --git a/INSTALL.generic b/INSTALL.generic
deleted file mode 100644 (file)
index 3b50ea9..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-Basic Installation
-==================
-
-   These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes a while.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. 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.
-
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..85930b1
--- /dev/null
@@ -0,0 +1,34 @@
+#
+# Makefile for GNU Shogi
+#
+# Copyright (c) 2013 Yann Dirson and the Free Software Foundation
+#
+# This file is part of GNU Shogi.
+#
+# GNU Shogi is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+#
+# GNU Shogi is distributed in the hope that it will be useful,
+# but WITHOUT 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 GNU Shogi; see the file COPYING.  If not, write to
+# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+SUBDIRS = gnushogi xshogi doc
+
+dist_noinst_DATA = \
+       README.maint \
+       ChangeLog.old \
+       misc/gnushogi.pat \
+       misc/gnuminishogi.pat \
+       misc/gnushogi.tbk \
+       misc/gnuminishogi.tbk
+
+dist_doc_DATA = \
+       CONTRIB
diff --git a/TODO b/TODO
index 48d2f19..0215d7b 100644 (file)
--- a/TODO
+++ b/TODO
@@ -10,7 +10,6 @@ Generic cleanups
 
 - switch cli parsing to getopt
 - hunt for extern's and prototypes spread all over the source
-- use automake
 - hunt for more hardcoded variant-specific constants
   - position of captured pieces in curses mode
   - compile with bound-checker
index 9213a89..e852a73 100644 (file)
@@ -6,6 +6,7 @@ dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.57)
 AC_INIT([gnushogi],[1.4.1+],[https://savannah.gnu.org/bugs/?group=gnushogi])
+AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([gnushogi/gnushogi.h])
 AC_CONFIG_HEADER(config.h)
 
@@ -37,7 +38,8 @@ LIBCURSES=
 AS_IF([test "x$with_curses" != xno],
   [AC_CHECK_LIB([curses], [clrtoeol],
     [AC_SUBST([LIBCURSES], [-lcurses])
-     AC_SUBST([CURSESDSP], [cursesdsp.o])
+     AC_SUBST([CURSESDSP], [gnushogi-cursesdsp.o])
+     AC_SUBST([CURSESDSPMINI], [gnuminishogi-cursesdsp.o])
      AC_DEFINE([HAVE_LIBCURSES], [1],
                [Define if you have lib])
     ],
@@ -57,7 +59,7 @@ AC_CHECK_LIB([termcap], [tgoto])
 
 if [[ $ac_cv_c_compiler_gnu = yes ]]
 then
-WARNINGS="-Wall -Wno-implicit-int -Wstrict-prototypes -ansi -pedantic"
+WARNINGS="-Wall -Wno-implicit-int -Wstrict-prototypes -ansi"
 CEXTRAFLAGS="-fsigned-char -funroll-loops"
 else
 # Who knows what warnings your compiler uses?
@@ -111,15 +113,6 @@ AC_CHECK_FUNCS([setvbuf setlinebuf])
 # Set various user-definable options.
 #
 
-AC_ARG_ENABLE([minishogi],
-[  --enable-minishogi
-        Build gnuminishogi instead of gnushogi (default: no)],
-[AC_DEFINE([MINISHOGI], [], [Define to build gnuminishogi instead of gnushogi])
-AC_SUBST([PROGNAME], [gnuminishogi])
-],
-[AC_SUBST([PROGNAME], [gnushogi])
-])
-
 OPT=
 FIRST_SHOGI_PROGRAM=gnushogi
 SECOND_SHOGI_PROGRAM=gnushogi
@@ -165,18 +158,18 @@ AC_SUBST(SECOND_HOST)
 
 if [[ $enable_xshogi = yes ]]
 then
-XSHOGI=xshogi_compile
-XSHOGIINSTALL=xshogi_install
-XSHOGICLEAN=xshogi_clean
+XSHOGI=xshogi
+XSHOGIMAN=xshogi.6
+XDOCS='$(XDOCS)'
 else
 XSHOGI=
-XSHOGIINSTALL=
-XSHOGICLEAN=
+XSHOGIMAN=
+XDOCS=
 fi
 
 AC_SUBST(XSHOGI)
-AC_SUBST(XSHOGIINSTALL)
-AC_SUBST(XSHOGICLEAN)
+AC_SUBST(XSHOGIMAN)
+AC_SUBST(XDOCS)
 
 ##########
 AC_CONFIG_FILES([Makefile
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..c9d76ad
--- /dev/null
@@ -0,0 +1,38 @@
+#
+# Documentation Makefile for GNU Shogi
+#
+# Copyright (c) 2013 Yann Dirson and the Free Software Foundation
+#
+# This file is part of GNU Shogi.
+#
+# GNU Shogi is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+#
+# GNU Shogi is distributed in the hope that it will be useful,
+# but WITHOUT 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 GNU Shogi; see the file COPYING.  If not, write to
+# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+info_TEXINFOS = gnushogi.texi
+AM_MAKEINFOHTMLFLAGS = --split=section
+
+dist_man_MANS = gnushogi.6 @XSHOGIMAN@
+EXTRA_MANS = xshogi.6
+
+dist_doc_DATA = \
+       BOOKFILES \
+       PORTING \
+       shogi.rules \
+       tutorial1.gam \
+       tutorial2.gam
+
+spell:
+       tr '[A-Z]' '[a-z]' < $(srcdir)/gnushogi.texi | tr -cd '[A-Za-z0-9_ \012]' | \
+       tr -s '[ ]' '\012' | sort | uniq -c | sort -nr | spell | sort | uniq
diff --git a/doc/Makefile.in b/doc/Makefile.in
deleted file mode 100644 (file)
index 356926d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-MAINTAINERCLEANFILES = *.info*
-DISTCLEANFILES = *.ps *.html
-CLEANFILES = *.log *.dvi *.aux *.dlog \
-             *.cp *.cps *.fn *.ky *.pg *.toc *.tp *.vr
-
-SRCDIR = @srcdir@
-
-info:
-       makeinfo $(SRCDIR)/gnushogi.texi
-
-dvi:
-       texi2dvi $(SRCDIR)/gnushogi.texi
-
-pdf:
-       texi2pdf $(SRCDIR)/gnushogi.texi
-
-# I do some egregious hacks to get around limitations of 
-# texi2html.
-
-html:
-       makeinfo --html --split=section $(SRCDIR)/gnushogi.texi
-
-ps: dvi
-       dvips -t letter gnushogi.dvi -o gnushogi.ps
-
-ps2: dvi
-       dvi2ps gnushogi.dvi > gnushogi.ps
-
-spell:
-       tr '[A-Z]' '[a-z]' < $(SRCDIR)/gnushogi.texi | tr -cd '[A-Za-z0-9_ \012]' | \
-       tr -s '[ ]' '\012' | sort | uniq -c | sort -nr | spell | sort | uniq
-
-clean:
-       @for file in $(CLEANFILES); \
-        do if [ -f $$file ]; then rm $$file; fi; \
-        done
-
-distclean: clean
-       @for file in $(DISTCLEANFILES); \
-        do if [ -f $$file ]; then rm $$file; fi; \
-        done
-
-maintainerclean: distclean
-       @for file in $(MAINTAINERCLEANFILES); \
-        do if [ -f $$file ]; then rm $$file; fi; \
-        done
diff --git a/gnushogi/Makefile.am b/gnushogi/Makefile.am
new file mode 100644 (file)
index 0000000..4eefd9c
--- /dev/null
@@ -0,0 +1,131 @@
+#
+# Makefile for GNU Shogi
+#
+# Copyright (c) 2013 Yann Dirson and the Free Software Foundation
+#
+# This file is part of GNU Shogi.
+#
+# GNU Shogi is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+#
+# GNU Shogi is distributed in the hope that it will be useful,
+# but WITHOUT 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 GNU Shogi; see the file COPYING.  If not, write to
+# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+pkgbindatadir = $(pkglibdir)
+
+bin_PROGRAMS = gnushogi gnuminishogi
+noinst_PROGRAMS = pat2inc sizetest
+
+pkgbindata_DATA = gnushogi.bbk
+# gnuminishogi.bbk would be empty
+
+AM_CFLAGS = @CEXTRAFLAGS@ @WARNINGS@
+
+# The hashfile is a record of positions seen. It is used by
+# GNU Shogi to avoid making the same mistakes, a form of learning.
+
+HASH       = -DHASHFILE=\"$(pkglibdir)/$(PROGNAME).hsh\"
+
+
+# The "book" is a record of the first few moves, for playing good
+# moves easily and quickly, saving time, and irritating the human
+# opponent.
+
+TEXTBOOK   = -DBOOK=\"$(pkglibdir)/$(PROGNAME).tbk\"
+BINBOOK    = -DBINBOOK=\"$(pkglibdir)/$(PROGNAME).bbk\"
+
+
+# The pattern file contains various opening patterns. The program tries to
+# obtain such a pattern in the opening stage. Sequences of opening
+# patterns may be described in order to support the correct order of moves.
+
+gnushogi_CPPFLAGS = \
+       -DHASHFILE=\"$(pkglibdir)/gnushogi.hsh\" \
+       -DBOOK=\"$(pkglibdir)/gnushogi.tbk\" \
+       -DBINBOOK=\"$(pkglibdir)/gnushogi.bbk\"
+gnuminishogi_CPPFLAGS = \
+       -DMINISHOGI \
+       -DHASHFILE=\"$(pkglibdir)/gnuminishogi.hsh\" \
+       -DBOOK=\"$(pkglibdir)/gnuminishogi.tbk\" \
+       -DBINBOOK=\"$(pkglibdir)/gnuminishogi.bbk\"
+
+noinst_HEADERS = \
+       book.h \
+       debug.h \
+       eval.h \
+       gnushogi.h \
+       opts.h \
+       pattern.h
+
+COMMONSOURCES =         \
+       globals.c       \
+       init-common.c   \
+       pattern-common.c
+
+NOTCOMMONFILES =       \
+       attacks.c      \
+       book.c         \
+       commondsp.c    \
+       eval.c         \
+       genmove.c      \
+       init.c         \
+       pattern.c      \
+       rawdsp.c       \
+       search.c       \
+       tcontrl.c      \
+       util.c
+
+gnushogi_SOURCES = \
+       main.c \
+       $(NOTCOMMONFILES) \
+       $(COMMONSOURCES)
+gnuminishogi_SOURCES = \
+       main.c \
+       $(NOTCOMMONFILES) \
+       $(COMMONSOURCES)
+
+EXTRA_gnushogi_SOURCES = \
+       cursesdsp.c
+EXTRA_gnuminishogi_SOURCES = \
+       cursesdsp.c
+
+BUILT_SOURCES = \
+       gnushogi-pattern.inc \
+       gnuminishogi-pattern.inc
+
+gnushogi_DEPENDENCIES = @CURSESDSP@
+gnushogi_LDADD = @CURSESDSP@ @LIBCURSES@
+gnuminishogi_DEPENDENCIES = @CURSESDSPMINI@
+gnuminishogi_LDADD = @CURSESDSPMINI@ @LIBCURSES@
+
+pat2inc_SOURCES = \
+       pat2inc.c \
+       makepattern.c \
+       $(COMMONSOURCES)
+
+pat2inc_LDADD = @LIBCURSES@
+
+gnushogi-pattern.inc: $(top_srcdir)/misc/gnushogi.pat pat2inc
+       ./pat2inc $< $@
+gnuminishogi-pattern.inc: $(top_srcdir)/misc/gnuminishogi.pat pat2inc
+       ./pat2inc $< $@
+
+gnushogi.bbk: $(top_srcdir)/misc/gnushogi.tbk gnushogi
+       rm -f $@
+       cat $< > _tmp_t
+       echo quit | ./gnushogi -R -b _tmp_t -B $@ -S 8000 -P 40 3 0
+       rm _tmp_t
+gnuminishogi.bbk: $(top_srcdir)/misc/gnuminishogi.tbk gnuminishogi
+       rm -f $@
+       cat $< > _tmp_t
+       echo quit | ./gnuminishogi -R -b _tmp_t -B $@ -S 8000 -P 40 3 0
+       rm _tmp_t
index 60d5c7b..176454c 100644 (file)
@@ -95,7 +95,6 @@ BINBOOK    = -DBINBOOK=\"$(LIBDIR)/$(PROGNAME).bbk\"
 # patterns may be described in order to support the correct order of moves.
 
 PATTERNFILE=$(ROOT)/misc/$(PROGNAME).pat
-PATTERN    = -DPATTERNFILE=\"$(PATTERNFILE)\"
 
 
 all:
@@ -116,7 +115,6 @@ NOTCOMMONFILES = \
                 book.o         \
                 commondsp.o    \
                 @CURSESDSP@    \
-                dspwrappers.o  \
                 eval.o         \
                 genmove.o      \
                 init.o         \
@@ -166,9 +164,6 @@ commondsp.o: commondsp.c
 cursesdsp.o: cursesdsp.c
        $(CC) $(CFLAGS) -c $<
 
-dspwrappers.o: dspwrappers.c
-       $(CC) $(CFLAGS) -c $<
-
 genmove.o: genmove.c
        $(CC) $(CFLAGS) -c $<
 
@@ -191,7 +186,7 @@ main.o: main.c
 # pattern textfile must be used.
 
 makepattern.o: makepattern.c
-       $(CC) $(CFLAGS) $(PATTERN) -c $<
+       $(CC) $(CFLAGS) -c $<
 
 pattern.o: pattern.c
        $(CC)  $(CFLAGS) -c $<
@@ -221,7 +216,7 @@ sizetest.o: sizetest.c
        $(CC) $(CFLAGS) -c $<
 
 pattern.inc: $(PATTERNFILE) pat2inc
-       ./pat2inc
+       ./pat2inc $< $@
 
 #
 # Other targets.
@@ -275,11 +270,11 @@ attacks.o:     attacks.c gnushogi.h
 book.o:        book.c gnushogi.h
 commondsp.o:   commondsp.c gnushogi.h
 cursesdsp.o:   cursesdsp.c gnushogi.h
-dspwrappers.o: dspwrappers.c gnushogi.h
 genmove.o:     genmove.c gnushogi.h
 globals.o:     globals.c gnushogi.h
 eval.o:        eval.c eval.h gnushogi.h $(SRCDIR)/pattern.h
 init.o:        init.c gnushogi.h $(SRCDIR)/pattern.h
+init-common.o: init-common.c gnushogi.h
 main.o:        main.c gnushogi.h
 makepattern.o: pattern.c gnushogi.h $(SRCDIR)/pattern.h
 pattern.o:     pattern.c gnushogi.h $(SRCDIR)/pattern.h pattern.inc
index 009e409..5a331c9 100644 (file)
@@ -366,7 +366,7 @@ RESET(void)
 
 static
 int
-Vparse (FILE * fd, USHORT *mv, USHORT *flags, USHORT side, int moveno)
+Vparse (FILE * fd, USHORT *mv, USHORT *flags, int moveno)
 {
     int c, i;
     char s[255];
@@ -647,7 +647,7 @@ GetOpenings(void)
 {
     short i;
     int mustwrite = false, first;
-    unsigned short xside, side;
+    unsigned short side;
     short c;
     USHORT mv, flags;
     unsigned int x;
@@ -716,11 +716,10 @@ GetOpenings(void)
         {
             /* setvbuf(fd, buffr, _IOFBF, 2048); */
             side = black;
-            xside = white;
             hashbd = hashkey = 0;
             i = 0;
 
-            while ((c = Vparse(fd, &mv, &flags, side, i)) >= 0)
+            while ((c = Vparse(fd, &mv, &flags, i)) >= 0)
             {
                 if (c == 1)
                 {
@@ -822,7 +821,6 @@ GetOpenings(void)
                     computer = opponent;
                     opponent = computer ^ 1;
 
-                    xside = side;
                     side = side ^ 1;
                 }
                 else if (i > 0)
@@ -833,8 +831,6 @@ GetOpenings(void)
                     RESET();
                     i = 0;
                     side = black;
-                    xside = white;
-
                 }
             }
 
@@ -876,8 +872,8 @@ GetOpenings(void)
 
         }
 
-        sprintf(msg, "Book used %d(%d).", B.bookcount, B.booksize);
-        ShowMessage(msg);
+        sprintf(msg, "Book used %lu(%lu).", B.bookcount, B.booksize);
+        dsp->ShowMessage(msg);
     }
 
     /* Set everything back to start the game. */
@@ -887,7 +883,7 @@ GetOpenings(void)
     /* Now get ready to play .*/
     if (!B.bookcount)
     {
-        ShowMessage("Can't find book.");
+        dsp->ShowMessage("Can't find book.");
         Book = 0;
     }
 }
@@ -895,7 +891,7 @@ GetOpenings(void)
 
 
 /*
- * OpeningBook(hint, side)
+ * OpeningBook(hint)
  *
  * Go through each of the opening lines of play and check for a match with
  * the current game listing. If a match occurs, generate a random
@@ -907,7 +903,7 @@ GetOpenings(void)
  */
 
 int
-OpeningBook(unsigned short *hint, short side)
+OpeningBook(unsigned short *hint)
 {
     unsigned short r, m;
     int possibles = TrPnt[2] - TrPnt[1];
index 49b3805..a6f567d 100644 (file)
@@ -52,6 +52,7 @@
 char mvstr[4][6];
 char *InPtr;
 int InBackground = false;
+struct display *dsp = &raw_display;
 
 
 #if defined(BOOKTEST)
@@ -128,8 +129,6 @@ movealgbr(short m, char *s)
 #endif /* BOOKTEST */
 
 
-
-
 /*
  * Generate move strings in different formats.
  *
@@ -169,7 +168,7 @@ algbr(short f, short t, short flag)
     if ((f == t) && ((f != 0) || (t != 0)))
     {
         if (!barebones) {
-            Printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
+            dsp->Printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
         }
 
         mvstr[0][0] = mvstr[1][0] = mvstr[2][0] = mvstr[3][0] = '\0';
@@ -221,7 +220,6 @@ algbr(short f, short t, short flag)
 }
 
 
-
 /*
  * Compare the string 's' to the list of legal moves available for the
  * opponent. If a match is found, make the move on the board.
@@ -302,7 +300,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
         if (SqAttacked(PieceList[opponent][0], computer, &blocked))
         {
             UnmakeMove(opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
-            AlwaysShowMessage("Illegal move (in check) %s", s);
+            dsp->AlwaysShowMessage("Illegal move (in check) %s", s);
             return false;
         }
         else
@@ -310,7 +308,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
             if (iop == VERIFY_AND_TRY_MODE)
                 return true;
 
-            UpdateDisplay(xnode.f, xnode.t, 0, (short) xnode.flags);
+            dsp->UpdateDisplay(xnode.f, xnode.t, 0, (short) xnode.flags);
             GameList[GameCnt].depth = GameList[GameCnt].score = 0;
             GameList[GameCnt].nodes = 0;
             ElapsedTime(COMPUTE_AND_INIT_MODE);
@@ -335,7 +333,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
                     char buf[20];
 
                     sprintf(buf, "%s mates!\n", ColorStr[opponent]);
-                    ShowMessage(buf);
+                    dsp->ShowMessage(buf);
                     flag.mate = true;
                 }
             }
@@ -344,21 +342,20 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
         }
     }
 
-    AlwaysShowMessage("Illegal move (no match) %s", s);
+    dsp->AlwaysShowMessage("Illegal move (no match) %s", s);
 
     if (!barebones && (cnt > 1))
     {
         sprintf(buffer, "Ambiguous Move %s!", s);
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
     }
 
     return false;
 }
 
 
-
 static int
-parser(char *f, int side, short *fpiece)
+parser(char *f, short *fpiece)
 {
     int c1, r1, c2, r2;
     short i, p = false;
@@ -406,7 +403,6 @@ skip()
 }
 
 
-
 void
 skipb()
 {
@@ -415,8 +411,25 @@ skipb()
 }
 
 
+void RequestInputString(char* buffer, unsigned bufsize)
+{
+    static char fmt[10];
+    int ret = snprintf(fmt, sizeof(fmt), "%%%us", bufsize);
+    if (ret < 0 ) {
+        perror("RequestInputString snprintf");
+        exit(1);
+    }
+    if (ret >= sizeof(fmt)) {
+        fprintf(stderr,
+                "Insufficient format-buffer size in %s for bufsize=%u\n",
+                __FUNCTION__, bufsize);
+        exit(1);
+    }
+    dsp->doRequestInputString(fmt, buffer);
+}
+
 
-void
+static void
 GetGame(void)
 {
     FILE *fd;
@@ -428,7 +441,7 @@ GetGame(void)
     if (savefile[0]) {
         strcpy(fname, savefile);
     } else {
-        ShowMessage("Enter file name: ");
+        dsp->ShowMessage("Enter file name: ");
         RequestInputString(fname, sizeof(fname)-1);
     }
 
@@ -580,7 +593,7 @@ GetGame(void)
             InPtr = fname;
             skipb();
             g = &GameList[GameCnt];
-            g->gmove = parser(InPtr, side, &g->fpiece);
+            g->gmove = parser(InPtr, &g->fpiece);
             skip();
             g->score = atoi(InPtr);
             skip();
@@ -633,14 +646,13 @@ GetGame(void)
 
     ZeroRPT();
     InitializeStats();
-    UpdateDisplay(0, 0, 1, 0);
+    dsp->UpdateDisplay(0, 0, 1, 0);
     Sdepth = 0;
     hint = 0;
 }
 
 
-
-void
+static void
 SaveGame(void)
 {
     FILE *fd;
@@ -653,7 +665,7 @@ SaveGame(void)
     if (savefile[0]) {
         strcpy(fname, savefile);
     } else {
-        ShowMessage("Enter file name: ");
+        dsp->ShowMessage("Enter file name: ");
         RequestInputString(fname, sizeof(fname)-1);
     }
 
@@ -778,22 +790,21 @@ SaveGame(void)
 
         fclose(fd);
 
-        ShowMessage("Game saved");
+        dsp->ShowMessage("Game saved");
     }
     else
     {
-        ShowMessage("Could not open file");
+        dsp->ShowMessage("Could not open file");
     }
 }
 
 
-
 /*
  * GetXGame, SaveXGame and BookGame used to only be defined if
  * xshogi wasn't defined -- wonder why?
  */
 
-void
+static void
 GetXGame(void)
 {
     FILE *fd;
@@ -802,7 +813,7 @@ GetXGame(void)
     short sq;
     short side, isp;
 
-    ShowMessage("Enter file name: ");
+    dsp->ShowMessage("Enter file name: ");
     RequestInputString(fname, sizeof(fname)-1);
 
     if (fname[0] == '\0')
@@ -916,13 +927,13 @@ GetXGame(void)
     Game50 = 1;
     ZeroRPT();
     InitializeStats();
-    UpdateDisplay(0, 0, 1, 0);
+    dsp->UpdateDisplay(0, 0, 1, 0);
     Sdepth = 0;
     hint = 0;
 }
 
 
-void
+static void
 SaveXGame(void)
 {
     FILE *fd;
@@ -931,7 +942,7 @@ SaveXGame(void)
     short sq, piece;
     short side, isp;
 
-    ShowMessage("Enter file name: ");
+    dsp->ShowMessage("Enter file name: ");
     RequestInputString(fname, sizeof(fname)-1);
 
     if (fname[0] == '\0')
@@ -1002,7 +1013,7 @@ SaveXGame(void)
 }
 
 
-void
+static void
 BookSave(void)
 {
     FILE *fd;
@@ -1013,7 +1024,7 @@ BookSave(void)
         strcpy(fname, savefile);
     } else {
         /* Enter file name */
-        ShowMessage("Enter file name: ");
+        dsp->ShowMessage("Enter file name: ");
         RequestInputString(fname, sizeof(fname)-1);
     }
 
@@ -1085,16 +1096,15 @@ BookSave(void)
 
         fclose(fd);
 
-        ShowMessage("Game saved");
+        dsp->ShowMessage("Game saved");
     }
     else
     {
-        ShowMessage("Could not open file");
+        dsp->ShowMessage("Could not open file");
     }
 }
 
 
-
 void
 ListGame(void)
 {
@@ -1222,8 +1232,7 @@ ListGame(void)
 }
 
 
-
-void
+static void
 FlagMove(char c)
 {
     switch(c)
@@ -1245,13 +1254,11 @@ FlagMove(char c)
 }
 
 
-
-
 /*
  * Undo the most recent half-move.
  */
 
-void
+static void
 Undo(void)
 {
     short f, t;
@@ -1300,15 +1307,14 @@ Undo(void)
     flag.mate = false;
     Sdepth = 0;
     player = player ^ 1;
-    ShowSidetoMove();
-    UpdateDisplay(0, 0, 1, 0);
+    dsp->ShowSidetoMove();
+    dsp->UpdateDisplay(0, 0, 1, 0);
 
     if (flag.regularstart)
         Book = false;
 }
 
 
-
 void
 FlagString(unsigned short flags, char *s)
 {
@@ -1361,8 +1367,7 @@ FlagString(unsigned short flags, char *s)
 }
 
 
-
-void
+static void
 TestSpeed(void(*f)(short side, short ply,
                    short in_check, short blockable),
           unsigned j)
@@ -1412,15 +1417,14 @@ TestSpeed(void(*f)(short side, short ply,
     else
         et = 1;
 
-    ShowNodeCnt(cnt);
+    dsp->ShowNodeCnt(cnt);
 }
 
 
-
-void
+static void
 TestPSpeed(short(*f) (short side), unsigned j)
 {
-    short i;
+    unsigned i;
     long cnt, t1, t2;
 #ifdef HAVE_GETTIMEOFDAY
     struct timeval tv;
@@ -1450,24 +1454,22 @@ TestPSpeed(short(*f) (short side), unsigned j)
     else
         et = 1;
 
-    ShowNodeCnt(cnt);
+    dsp->ShowNodeCnt(cnt);
 }
 
 
-
-void
-SetOppTime(char *s)
+static void
+SetOppTime(char *time)
 {
-    char *time;
     int m, t, sec;
 
     sec = 0;
-    time = &s[strlen("otime")];
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
     {
         time++;
+       /* FIXME: sec is parsed but ignored */
         sec = (int)strtol(time, &time, 10);
     }
 
@@ -1489,20 +1491,18 @@ SetOppTime(char *s)
 }
 
 
-
-void
-SetMachineTime(char *s)
+static void
+SetMachineTime(char *time)
 {
-    char *time;
     int m, t, sec;
 
-    time = &s[strlen("time")];
     sec = 0;
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
     {
         time++;
+       /* FIXME: sec is parsed but ignored */
         sec = (int)strtol(time, &time, 10);
     }
 
@@ -1524,24 +1524,19 @@ SetMachineTime(char *s)
 }
 
 
-
-
-
 /* FIXME!  This is truly the function from hell! */
 
 /*
  * Process the user's command. If easy mode is OFF (the computer is thinking
  * on opponents time) and the program is out of book, then make the 'hint'
  * move on the board and call SelectMove() to find a response. The user
- * terminates the search by entering ^C (quit siqnal) before entering a
- * command. If the opponent does not make the hint move, then set Sdepth to
- * zero.
+ * terminates the search by entering a command. If the opponent does not make
+ * the hint move, then set Sdepth to zero.
  */
 
 void
 InputCommand(char *command)
 {
-    int eof = 0;
     short have_shown_prompt = false;
     short ok, done, is_move = false;
     unsigned short mv;
@@ -1568,10 +1563,8 @@ InputCommand(char *command)
         algbr((short) hint >> 8, (short) hint & 0xff, false);
         strcpy(s, mvstr[0]);
 
-#if !defined NOPOST
         if (flag.post)
-            GiveHint();
-#endif
+            dsp->GiveHint();
 
         /* do the hint move */
         if (VerifyMove(s, VERIFY_AND_TRY_MODE, &mv))
@@ -1579,7 +1572,7 @@ InputCommand(char *command)
             Sdepth = 0;
 
 #ifdef QUIETBACKGROUND
-            ShowPrompt();
+            dsp->ShowPrompt();
             have_shown_prompt = true;
 #endif /* QUIETBACKGROUND */
 
@@ -1626,7 +1619,7 @@ InputCommand(char *command)
         {
 #endif /* QUIETBACKGROUND */
 
-            ShowPrompt();
+            dsp->ShowPrompt();
 
 #ifdef QUIETBACKGROUND
         }
@@ -1635,21 +1628,16 @@ InputCommand(char *command)
 #endif /* QUIETBACKGROUND */
 
         if (command == NULL) {
-            if (NOT_CURSES)
-                s[0] = '\0';
-
-            eof = GetString(sx);
+            int eof = dsp->GetString(sx);
+            if (eof)
+                dsp->ExitShogi();
         } else {
             strcpy(sx, command);
             done = true;
         }
 
-        sscanf(sx, "%s", s);
-
-        if (eof)
-            ExitShogi();
-
-        if (s[0] == '\0')
+        /* extract first word */
+        if (sscanf(sx, "%s", s) < 1)
             continue;
 
         if (strcmp(s, "bd") == 0)   /* bd -- display board */
@@ -1660,8 +1648,8 @@ InputCommand(char *command)
             if (old_xshogi)
                 display_type = DISPLAY_RAW;
 
-            ClearScreen();
-            UpdateDisplay(0, 0, 1, 0);
+            dsp->ClearScreen();
+            dsp->UpdateDisplay(0, 0, 1, 0);
 
             if (old_xshogi)
                 display_type = DISPLAY_X;
@@ -1672,27 +1660,21 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "alg") == 0)
         {
-            /* noop */ ; /* alg */
+            /* noop */ ;
         }
         else if ((strcmp(s, "quit") == 0)
                  || (strcmp(s, "exit") == 0))
         {
             flag.quit = true;
         }
-#if !defined NOPOST
-        else if (strcmp(s, "post") == 0)
-        {
-            flag.post = !flag.post;
-        }
-#endif
         else if ((strcmp(s, "set") == 0)
                  || (strcmp(s, "edit") == 0))
         {
-            EditBoard();
+            dsp->EditBoard();
         }
-        else if ((strcmp(s, "setup") == 0))
+        else if (strcmp(s, "setup") == 0)
         {
-            SetupBoard();
+            dsp->SetupBoard();
         }
         else if (strcmp(s, "first") == 0)
         {
@@ -1716,7 +1698,7 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "help") == 0)
         {
-            help();
+            dsp->help();
         }
         else if (strcmp(s, "material") == 0)
         {
@@ -1742,16 +1724,19 @@ InputCommand(char *command)
         else if (strcmp(s, "new") == 0)
         {
             NewGame();
-            UpdateDisplay(0, 0, 1, 0);
+            dsp->UpdateDisplay(0, 0, 1, 0);
         }
         else if (strcmp(s, "list") == 0)
         {
             ListGame();
         }
-        else if ((strcmp(s, "level") == 0)
-                 || (strcmp(s, "clock") == 0))
+        else if (strcmp(s, "level") == 0)
+        {
+            dsp->SelectLevel(sx + strlen("level"));
+        }
+        else if (strcmp(s, "clock") == 0)
         {
-            SelectLevel(sx);
+            dsp->SelectLevel(sx + strlen("clock"));
         }
         else if (strcmp(s, "hash") == 0)
         {
@@ -1767,19 +1752,19 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "time") == 0)
         {
-            SetMachineTime(sx);
+            SetMachineTime(sx + strlen("time"));
         }
         else if (strcmp(s, "otime") == 0)
         {
-            SetOppTime(sx);
+            SetOppTime(sx + strlen("otime"));
         }
         else if (strcmp(s, "Awindow") == 0)
         {
-            ChangeAlphaWindow();
+            dsp->ChangeAlphaWindow();
         }
         else if (strcmp(s, "Bwindow") == 0)
         {
-            ChangeBetaWindow();
+            dsp->ChangeBetaWindow();
         }
         else if (strcmp(s, "rcptr") == 0)
         {
@@ -1787,7 +1772,7 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "hint") == 0)
         {
-            GiveHint();
+            dsp->GiveHint();
         }
         else if (strcmp(s, "both") == 0)
         {
@@ -1801,8 +1786,8 @@ InputCommand(char *command)
         else if (strcmp(s, "reverse") == 0)
         {
             flag.reverse = !flag.reverse;
-            ClearScreen();
-            UpdateDisplay(0, 0, 1, 0);
+            dsp->ClearScreen();
+            dsp->UpdateDisplay(0, 0, 1, 0);
         }
         else if (strcmp(s, "switch") == 0)
         {
@@ -1880,11 +1865,15 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "depth") == 0)
         {
-            ChangeSearchDepth();
+            dsp->ChangeSearchDepth(sx + strlen("depth"));
+        }
+        else if (strcmp(s, "sd") == 0)
+        {
+            dsp->ChangeSearchDepth(sx + strlen("sd"));
         }
         else if (strcmp(s, "hashdepth") == 0)
         {
-            ChangeHashDepth();
+            dsp->ChangeHashDepth();
         }
         else if (strcmp(s, "random") == 0)
         {
@@ -1904,26 +1893,26 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "contempt") == 0)
         {
-            SetContempt();
+            dsp->SetContempt();
         }
         else if (strcmp(s, "xwndw") == 0)
         {
-            ChangeXwindow();
+            dsp->ChangeXwindow();
         }
         else if (strcmp(s, "rv") == 0)
         {
             flag.rv = !flag.rv;
-            UpdateDisplay(0, 0, 1, 0);
+            dsp->UpdateDisplay(0, 0, 1, 0);
         }
         else if (strcmp(s, "coords") == 0)
         {
             flag.coords = !flag.coords;
-            UpdateDisplay(0, 0, 1, 0);
+            dsp->UpdateDisplay(0, 0, 1, 0);
         }
         else if (strcmp(s, "stars") == 0)
         {
             flag.stars = !flag.stars;
-            UpdateDisplay(0, 0, 1, 0);
+            dsp->UpdateDisplay(0, 0, 1, 0);
         }
         else if (!XSHOGI && strcmp(s, "moves") == 0)
         {
@@ -1941,44 +1930,44 @@ InputCommand(char *command)
 #endif
                 SwagHt = 0;
 
-            ShowMessage("Testing MoveList Speed");
+            dsp->ShowMessage("Testing MoveList Speed");
             temp = generate_move_flags;
             generate_move_flags = true;
             TestSpeed(MoveList, 1);
             generate_move_flags = temp;
-            ShowMessage("Testing CaptureList Speed");
+            dsp->ShowMessage("Testing CaptureList Speed");
             TestSpeed(CaptureList, 1);
-            ShowMessage("Testing Eval Speed");
+            dsp->ShowMessage("Testing Eval Speed");
             ExaminePosition(opponent);
             TestPSpeed(ScorePosition, 1);
         }
         else if (!XSHOGI && strcmp(s, "test") == 0)
         {
 #ifdef SLOW_CPU
-            ShowMessage("Testing MoveList Speed");
+            dsp->ShowMessage("Testing MoveList Speed");
             TestSpeed(MoveList, 2000);
-            ShowMessage("Testing CaptureList Speed");
+            dsp->ShowMessage("Testing CaptureList Speed");
             TestSpeed(CaptureList, 3000);
-            ShowMessage("Testing Eval Speed");
+            dsp->ShowMessage("Testing Eval Speed");
             ExaminePosition(opponent);
             TestPSpeed(ScorePosition, 1500);
 #else
-            ShowMessage("Testing MoveList Speed");
+            dsp->ShowMessage("Testing MoveList Speed");
             TestSpeed(MoveList, 20000);
-            ShowMessage("Testing CaptureList Speed");
+            dsp->ShowMessage("Testing CaptureList Speed");
             TestSpeed(CaptureList, 30000);
-            ShowMessage("Testing Eval Speed");
+            dsp->ShowMessage("Testing Eval Speed");
             ExaminePosition(opponent);
             TestPSpeed(ScorePosition, 15000);
 #endif
         }
         else if (!XSHOGI && strcmp(s, "p") == 0)
         {
-            ShowPostnValues();
+            dsp->ShowPostnValues();
         }
         else if (!XSHOGI && strcmp(s, "debug") == 0)
         {
-            DoDebug();
+            dsp->DoDebug();
         }
         else
         {
@@ -1994,7 +1983,7 @@ InputCommand(char *command)
                 if (rpt >= 3)
                 {
                     DRAW = DRAW_REPETITION;
-                    ShowMessage(DRAW);
+                    dsp->ShowMessage(DRAW);
                     GameList[GameCnt].flags |= draw;
 
                         flag.mate = true;
@@ -2027,8 +2016,6 @@ InputCommand(char *command)
         }
 
 #ifdef notdef /* optional pass best line to frontend with move */
-#  if !defined NOPOST
-
         if (flag.post && !flag.mate)
         {
             int i;
@@ -2041,15 +2028,12 @@ InputCommand(char *command)
                 printf("%5s ", mvstr[0]);
             }
         }
-#  endif
         printf("\n");
 #endif
     }
 }
 
 
-
-
 void
 SetTimeControl(void)
 {
@@ -2069,4 +2053,3 @@ SetTimeControl(void)
     et = 0;
     ElapsedTime(COMPUTE_AND_INIT_MODE);
 }
-
index ee492b2..9cbca2e 100644 (file)
@@ -37,6 +37,7 @@
 #include <ctype.h>
 #include <signal.h>
 #include <stdio.h>
+#include <stdarg.h>
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -44,7 +45,6 @@
 #include <curses.h>
 
 #include "gnushogi.h"
-#include "cursesdsp.h"
 
 #if HAVE_UNISTD_H
 #include <unistd.h>
@@ -73,12 +73,17 @@ unsigned short MV[MAXDEPTH];
 int MSCORE;
 char *DRAW;
 
-/* Forward declarations. */
-/* FIXME: change this name, puh-leeze! */
+/****************************************
+ * forward declarations
+ ****************************************/
 
+/* FIXME: change this name, puh-leeze! */
 static void UpdateCatched(void);
 static void DrawPiece(short sq);
 static void ShowScore(short score);
+void Curses_UpdateDisplay(short f, short t, short redraw, short isspec);
+void Curses_Die(int sig);
+void Curses_ShowSidetoMove(void);
 
 /****************************************
  * Trivial output functions.
@@ -107,14 +112,6 @@ gotoXY(short x, short y)
 }
 
 
-static void
-ClearMessage(void)
-{
-    gotoXY(TAB, 6);
-    ClearEoln();
-}
-
-
 void
 Curses_ShowCurrentMove(short pnt, short f, short t)
 {
@@ -168,20 +165,26 @@ Curses_ShowMessage(char *s)
 
 
 void
-Curses_AlwaysShowMessage(const char *format, va_list ap)
+Curses_AlwaysShowMessage(const char *format, ...)
 {
     static char buffer[60];
+    va_list ap;
+    va_start(ap, format);
     vsnprintf(buffer, sizeof(buffer), format, ap);
     Curses_ShowMessage(buffer);
+    va_end(ap);
 }
 
 
 void
-Curses_Printf(const char *format, va_list ap)
+Curses_Printf(const char *format, ...)
 {
     static char buffer[60];
+    va_list ap;
+    va_start(ap, format);
     vsnprintf(buffer, sizeof(buffer), format, ap);
     printw("%s", buffer);
+    va_end(ap);
 }
 
 
@@ -675,7 +678,7 @@ Curses_OutputMove(void)
             t = (l + h) >> 1;
         }
 
-        ShowNodeCnt(NodeCnt);
+        Curses_ShowNodeCnt(NodeCnt);
         gotoXY(TAB, 23);
         printw("Max Tree = %5d", t);
         ClearEoln();
@@ -717,7 +720,7 @@ Curses_UpdateClocks(void)
     printw("%d:%02d  ", m, s); 
 
     if (flag.post)
-        ShowNodeCnt(NodeCnt);
+        Curses_ShowNodeCnt(NodeCnt);
 
     refresh();
 }
@@ -767,10 +770,8 @@ DrawPiece(short sq)
 void
 Curses_ShowPostnValue(short sq)
 {
-    short score;
-
     gotoXY(4 + 5 * VIR_C(sq), 5 + 2 * (7 - VIR_R(sq)));        /* CHECKME */
-    score = ScorePosition(color[sq]);
+    (void) ScorePosition(color[sq]);
 
     if (color[sq] != neutral)
 #if defined SAVE_SVALUE
@@ -967,7 +968,7 @@ Curses_GiveHint(void)
 
 
 void
-Curses_ChangeSearchDepth(void)
+Curses_ChangeSearchDepth(char* sx)
 {
     Curses_ShowMessage("depth = ");
     FLUSH_SCANW("%hd", &MaxSearchDepth);
@@ -1203,3 +1204,48 @@ Curses_SetupBoard(void)
 {
     Curses_ShowMessage("'setup' command is not supported in Cursesmode");
 }
+
+
+struct display curses_display =
+{
+    .ChangeAlphaWindow    = Curses_ChangeAlphaWindow,
+    .ChangeBetaWindow     = Curses_ChangeBetaWindow,
+    .ChangeHashDepth      = Curses_ChangeHashDepth,
+    .ChangeSearchDepth    = Curses_ChangeSearchDepth,
+    .ChangeXwindow        = Curses_ChangeXwindow,
+    .ClearScreen          = Curses_ClearScreen,
+    .DoDebug              = Curses_DoDebug,
+    .DoTable              = Curses_DoTable,
+    .EditBoard            = Curses_EditBoard,
+    .ExitShogi            = Curses_ExitShogi,
+    .GiveHint             = Curses_GiveHint,
+    .Initialize           = Curses_Initialize,
+    .ShowNodeCnt          = Curses_ShowNodeCnt,
+    .OutputMove           = Curses_OutputMove,
+    .PollForInput         = Curses_PollForInput,
+    .SetContempt          = Curses_SetContempt,
+    .SearchStartStuff     = Curses_SearchStartStuff,
+    .SelectLevel          = Curses_SelectLevel,
+    .ShowCurrentMove      = Curses_ShowCurrentMove,
+    .ShowDepth            = Curses_ShowDepth,
+    .ShowGameType         = Curses_ShowGameType,
+    .ShowLine             = Curses_ShowLine,
+    .ShowMessage          = Curses_ShowMessage,
+    .AlwaysShowMessage    = Curses_AlwaysShowMessage,
+    .Printf               = Curses_Printf,
+    .doRequestInputString = Curses_doRequestInputString,
+    .GetString            = Curses_GetString,
+    .SetupBoard           = Curses_SetupBoard,
+    .ShowPatternCount     = Curses_ShowPatternCount,
+    .ShowPostnValue       = Curses_ShowPostnValue,
+    .ShowPostnValues      = Curses_ShowPostnValues,
+    .ShowPrompt           = Curses_ShowPrompt,
+    .ShowResponseTime     = Curses_ShowResponseTime,
+    .ShowResults          = Curses_ShowResults,
+    .ShowSidetoMove       = Curses_ShowSidetoMove,
+    .ShowStage            = Curses_ShowStage,
+    .TerminateSearch      = Curses_TerminateSearch,
+    .UpdateClocks         = Curses_UpdateClocks,
+    .UpdateDisplay        = Curses_UpdateDisplay,
+    .help                 = Curses_help,
+};
diff --git a/gnushogi/cursesdsp.h b/gnushogi/cursesdsp.h
deleted file mode 100644 (file)
index a936254..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * FILE: cursesdsp.h
- *
- *     Curses interface for GNU Shogi.
- *
- * ----------------------------------------------------------------------
- * Copyright (c) 1993, 1994, 1995 Matthias Mutz
- * Copyright (c) 1999 Michael Vanier and the Free Software Foundation
- * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
- *
- * GNU SHOGI is based on GNU CHESS
- *
- * Copyright (c) 1988, 1989, 1990 John Stanback
- * Copyright (c) 1992 Free Software Foundation
- *
- * This file is part of GNU SHOGI.
- *
- * GNU Shogi is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
- * 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 GNU Shogi; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- * ----------------------------------------------------------------------
- *
- */
-
-#ifndef _CURSESDSP_H_
-#define _CURSESDSP_H_
-
-#include "gnushogi.h"
-
-/* The following are common to rawdsp.h and cursesdsp.h */
-
-void Curses_ChangeAlphaWindow(void);
-void Curses_ChangeBetaWindow(void);
-void Curses_ChangeHashDepth(void);
-void Curses_ChangeSearchDepth(void);
-void Curses_ChangeXwindow(void);
-void Curses_ClearScreen(void);
-void Curses_Die(int sig);
-void Curses_DoDebug(void);
-void Curses_DoTable(short table[NO_SQUARES]);
-void Curses_EditBoard(void);
-void Curses_ExitShogi(void);
-void Curses_GiveHint(void);
-void Curses_Initialize(void);
-void Curses_ShowNodeCnt(long NodeCnt);
-void Curses_OutputMove(void);
-void Curses_PollForInput(void);
-void Curses_SearchStartStuff(short side);
-void Curses_SelectLevel(char *sx);
-void Curses_SetContempt(void);
-void Curses_ShowCurrentMove(short pnt, short f, short t);
-void Curses_ShowDepth(char ch);
-void Curses_ShowGameType(void);
-void Curses_ShowLine(unsigned short *bstline);
-void Curses_ShowMessage(char *s);
-void Curses_AlwaysShowMessage(const char *format, va_list ap);
-void Curses_Printf(const char *format, va_list ap);
-void Curses_doRequestInputString(const char* fmt, char* buffer);
-int  Curses_GetString(char* sx);
-void Curses_SetupBoard(void);
-void Curses_ShowPatternCount(short side, short n);
-void Curses_ShowPostnValue(short sq);
-void Curses_ShowPostnValues(void);
-void Curses_ShowPrompt(void);
-void Curses_ShowResponseTime(void);
-void Curses_ShowResults(short score, unsigned short *bstline, char ch);
-void Curses_ShowSidetoMove(void);
-void Curses_ShowStage(void);
-void Curses_TerminateSearch(int sig);
-void Curses_UpdateClocks(void);
-void Curses_UpdateDisplay(short f, short t, short redraw, short isspec);
-void Curses_help(void);
-
-#endif /* _CURSESDSP_H_ */
diff --git a/gnushogi/dspwrappers.c b/gnushogi/dspwrappers.c
deleted file mode 100644 (file)
index d7f23c8..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * FILE: dspwrappers.c
- *
- *     Wrapper functions which call analogous functions in rawdsp.c
- *     or cursesdsp.c depending on the interface.
- *
- * ----------------------------------------------------------------------
- * Copyright (c) 1993, 1994, 1995 Matthias Mutz
- * Copyright (c) 1999 Michael Vanier and the Free Software Foundation
- * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
- *
- * GNU SHOGI is based on GNU CHESS
- *
- * Copyright (c) 1988, 1989, 1990 John Stanback
- * Copyright (c) 1992 Free Software Foundation
- *
- * This file is part of GNU SHOGI.
- *
- * GNU Shogi is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
- * 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 GNU Shogi; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- * ----------------------------------------------------------------------
- *
- */
-
-/* request *snprintf prototypes*/
-#define _POSIX_C_SOURCE 200112L
-
-#include "gnushogi.h"
-#include "dspwrappers.h"
-#include "rawdsp.h"
-#include "cursesdsp.h"
-
-#include <stdio.h>
-
-#define CASE_DSP_RAW(func,args) \
-  case DISPLAY_RAW:             \
-  case DISPLAY_X:               \
-    func args;                  \
-    break
-
-#ifdef HAVE_LIBCURSES
-#define CASE_DSP_CURSES(func,args) \
-  case DISPLAY_CURSES:             \
-    func args;                     \
-    break;
-#else
-#define CASE_DSP_CURSES(func,args)
-#endif
-
-#define DISPLAY_FUNC(func,argsdecl,args)        \
-  void func argsdecl                            \
-  {                                             \
-    switch (display_type) {                     \
-      CASE_DSP_RAW(Raw_ ## func, args);         \
-      CASE_DSP_CURSES(Curses_ ## func, args);   \
-    }                                           \
-  }
-#define DISPLAY_VOIDFUNC(func)                  \
-  DISPLAY_FUNC(func,(void),())
-
-#define DISPLAY_STDARGFUNC(func,argsdecl,last,args)     \
-  void func argsdecl                                    \
-  {                                                     \
-    va_list ap;                                         \
-    va_start(ap, last);                                 \
-    switch (display_type) {                             \
-      CASE_DSP_RAW(Raw_ ## func, args);                 \
-      CASE_DSP_CURSES(Curses_ ## func, args);           \
-    }                                                   \
-    va_end(ap);                                         \
-  }
-
-DISPLAY_VOIDFUNC(ChangeAlphaWindow)
-DISPLAY_VOIDFUNC(ChangeBetaWindow)
-DISPLAY_VOIDFUNC(ChangeHashDepth)
-DISPLAY_VOIDFUNC(ChangeSearchDepth)
-DISPLAY_VOIDFUNC(ChangeXwindow)
-DISPLAY_VOIDFUNC(ClearScreen)
-DISPLAY_VOIDFUNC(DoDebug)
-DISPLAY_FUNC(DoTable, (short table[NO_SQUARES]), (table))
-DISPLAY_VOIDFUNC(EditBoard)
-DISPLAY_VOIDFUNC(ExitShogi)
-DISPLAY_VOIDFUNC(GiveHint)
-DISPLAY_VOIDFUNC(Initialize)
-DISPLAY_FUNC(ShowNodeCnt, (long NodeCnt), (NodeCnt))
-DISPLAY_VOIDFUNC(OutputMove)
-DISPLAY_VOIDFUNC(PollForInput)
-DISPLAY_VOIDFUNC(SetContempt)
-DISPLAY_FUNC(SearchStartStuff, (short side), (side))
-DISPLAY_FUNC(SelectLevel, (char *sx), (sx))
-DISPLAY_VOIDFUNC(SetupBoard)
-DISPLAY_FUNC(ShowCurrentMove, (short pnt, short f, short t), (pnt, f, t))
-DISPLAY_FUNC(ShowDepth, (char ch), (ch))
-DISPLAY_VOIDFUNC(ShowGameType)
-DISPLAY_FUNC(ShowLine, (unsigned short *bstline), (bstline))
-DISPLAY_FUNC(ShowMessage, (char *s), (s))
-DISPLAY_STDARGFUNC(AlwaysShowMessage, (const char *format, ...), format, (format, ap))
-DISPLAY_STDARGFUNC(Printf, (const char *format, ...), format, (format, ap))
-DISPLAY_FUNC(ShowPatternCount, (short side, short n), (side, n))
-DISPLAY_FUNC(ShowPostnValue, (short sq), (sq))
-DISPLAY_VOIDFUNC(ShowPostnValues)
-DISPLAY_VOIDFUNC(ShowPrompt)
-DISPLAY_VOIDFUNC(ShowResponseTime)
-DISPLAY_FUNC(ShowResults, (short score, unsigned short *bstline, char ch), (score, bstline, ch))
-DISPLAY_VOIDFUNC(ShowSidetoMove)
-DISPLAY_VOIDFUNC(ShowStage)
-DISPLAY_FUNC(TerminateSearch, (int sig), (sig))
-DISPLAY_VOIDFUNC(UpdateClocks)
-DISPLAY_FUNC(UpdateDisplay, (short f, short t, short redraw, short isspec), (f, t, redraw, isspec))
-DISPLAY_VOIDFUNC(help)
-
-DISPLAY_FUNC(doRequestInputString, (const char* fmt, char* buffer), (fmt, buffer))
-void RequestInputString(char* buffer, unsigned bufsize)
-{
-    static char fmt[10];
-    int ret = snprintf(fmt, sizeof(fmt), "%%%us", bufsize);
-    if (ret >= sizeof(fmt)) {
-        fprintf(stderr,
-                "Insufficient format-buffer size in %s for bufsize=%u\n",
-                __FUNCTION__, bufsize);
-        exit(1);
-    }
-    doRequestInputString(fmt, buffer);
-}
-
-/*********/
-
-#define CASE_DSPFUNC_RAW(func,args) \
-  case DISPLAY_RAW:                 \
-  case DISPLAY_X:                   \
-    return (func args);             \
-    break
-
-#ifdef HAVE_LIBCURSES
-#define CASE_DSPFUNC_CURSES(func,args) \
-  case DISPLAY_CURSES:                 \
-    return (func args);                \
-    break;
-#else
-#define CASE_DSPFUNC_CURSES(func,args)
-#endif
-
-#define DISPLAY_INTFUNC(func,argsdecl,args)         \
-  int func argsdecl                                 \
-  {                                                 \
-    switch (display_type) {                         \
-      CASE_DSPFUNC_RAW(Raw_ ## func, args);         \
-      CASE_DSPFUNC_CURSES(Curses_ ## func, args);   \
-    }                                               \
-    assert(0);                                      \
-  }
-
-DISPLAY_INTFUNC(GetString, (char* sx), (sx))
diff --git a/gnushogi/dspwrappers.h b/gnushogi/dspwrappers.h
deleted file mode 100644 (file)
index bcb6189..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * FILE: dspwrappers.h
- *
- *     Wrapper functions which call analogous functions in rawdsp.c
- *     or cursesdsp.c depending on the interface.
- *
- * ----------------------------------------------------------------------
- * Copyright (c) 1993, 1994, 1995 Matthias Mutz
- * Copyright (c) 1999 Michael Vanier and the Free Software Foundation
- * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
- *
- * GNU SHOGI is based on GNU CHESS
- *
- * Copyright (c) 1988, 1989, 1990 John Stanback
- * Copyright (c) 1992 Free Software Foundation
- *
- * This file is part of GNU SHOGI.
- *
- * GNU Shogi is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
- * 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 GNU Shogi; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- * ----------------------------------------------------------------------
- *
- */
-
-#ifndef _DSPWRAPPERS_H_
-#define _DSPWRAPPERS_H_
-
-#include <stdarg.h>
-
-extern void ChangeAlphaWindow(void);
-extern void ChangeBetaWindow(void);
-extern void ChangeHashDepth(void);
-extern void ChangeSearchDepth(void);
-extern void ChangeXwindow(void);
-extern void ClearScreen(void);
-extern void DoDebug(void);
-extern void DoTable(short table[NO_SQUARES]);
-extern void EditBoard(void);
-extern void ExitShogi(void);
-extern void GiveHint(void);
-extern void Initialize(void);
-extern void ShowNodeCnt(long NodeCnt);
-extern void OutputMove(void);
-extern void PollForInput(void);
-extern void SetContempt(void);
-extern void SearchStartStuff(short side);
-extern void SelectLevel(char *sx);
-extern void ShowCurrentMove(short pnt, short f, short t);
-extern void ShowDepth(char ch);
-extern void ShowGameType(void);
-extern void ShowLine(unsigned short *bstline);
-extern void ShowMessage(char *s);
-extern void AlwaysShowMessage(const char *format, ...);
-extern void Printf(const char *format, ...);
-extern void RequestInputString(char* buffer, unsigned bufsize);
-extern int  GetString(char* sx);
-extern void SetupBoard(void);
-extern void ShowPatternCount(short side, short n);
-extern void ShowPostnValue(short sq);
-extern void ShowPostnValues(void);
-extern void ShowPrompt(void);
-extern void ShowResponseTime(void);
-extern void ShowResults(short score, unsigned short *bstline, char ch);
-extern void ShowSidetoMove(void);
-extern void ShowStage(void);
-extern void TerminateSearch(int sig);
-extern void UpdateClocks(void);
-extern void UpdateDisplay(short f, short t, short redraw, short isspec);
-extern void help(void);
-
-#endif /* _DSPWRAPPERS_H_ */
index cbae968..12197a2 100644 (file)
@@ -33,9 +33,6 @@
 #include "gnushogi.h"
 #include "pattern.h"
 
-extern void
-ShowStage(void);
-
 /* Hash table for preventing multiple scoring of the same position */
 
 int EADD = 0;       /* number of writes to the cache table */
@@ -1263,13 +1260,12 @@ trapped(short sq)
 
 
 static int
-AttackedPieceValue(short sq, short side)
+AttackedPieceValue(short sq)
 {
-    short s, ds;
+    short s;
 
     s = 0;
 
-       ds = -fv1[HUNGP] * 2;
     hung[c1]++;
     shung[sq]++;
 
@@ -1427,7 +1423,7 @@ PawnValue(short sq, short side)
  */
 
 static inline int
-LanceValue(short sq, short side)
+LanceValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1457,7 +1453,7 @@ LanceValue(short sq, short side)
  */
 
 static inline int
-KnightValue(short sq, short side)
+KnightValue(short sq)
 {
     short s = 0, ad;
     short ds, checked_trapped = false;
@@ -1494,7 +1490,7 @@ KnightValue(short sq, short side)
  */
 
 static inline int
-SilverValue(short sq, short side)
+SilverValue(short sq)
 {
     short s= 0, ds, ad;
 
@@ -1542,7 +1538,7 @@ SilverValue(short sq, short side)
  */
 
 static inline int
-GoldValue(short sq, short side)
+GoldValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1584,7 +1580,7 @@ GoldValue(short sq, short side)
  */
 
 static inline int
-BishopValue(short sq, short side)
+BishopValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1719,7 +1715,7 @@ RookValue(short sq, short side)
  */
 
 static inline int
-PPawnValue(short sq, short side)
+PPawnValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1736,7 +1732,7 @@ PPawnValue(short sq, short side)
  */
 
 static inline int
-PLanceValue(short sq, short side)
+PLanceValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1752,7 +1748,7 @@ PLanceValue(short sq, short side)
  */
 
 static inline int
-PKnightValue(short sq, short side)
+PKnightValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1769,7 +1765,7 @@ PKnightValue(short sq, short side)
  */
 
 static inline int
-PSilverValue(short sq, short side)
+PSilverValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1785,7 +1781,7 @@ PSilverValue(short sq, short side)
  */
 
 static inline int
-PBishopValue(short sq, short side)
+PBishopValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1801,7 +1797,7 @@ PBishopValue(short sq, short side)
  */
 
 static inline int
-PRookValue(short sq, short side)
+PRookValue(short sq)
 {
     short s = 0, ds, ad;
 
@@ -1819,7 +1815,7 @@ PRookValue(short sq, short side)
  */
 
 static inline int
-KingValue(short sq, short side)
+KingValue(short sq)
 {
     short s = 0, ds;
 
@@ -1905,7 +1901,7 @@ PieceValue(short sq, short side)
         if (a1 == 0)
         {
             /* undefended piece */
-            s += AttackedPieceValue(sq, side);
+            s += AttackedPieceValue(sq);
         }
         else
         {
@@ -1916,7 +1912,7 @@ PieceValue(short sq, short side)
             if (attack_value < piece_value)
             {
                 /* attacked by a weaker piece */
-                s += AttackedPieceValue(sq, side) / 2;
+                s += AttackedPieceValue(sq) / 2;
             }
             else if (abs(attack_value - piece_value) < 10)
             {
@@ -1983,24 +1979,24 @@ PieceValue(short sq, short side)
 
 #ifndef MINISHOGI
     case lance:
-        s += LanceValue(sq, side);
+        s += LanceValue(sq);
         break;
 
     case knight:
-        s += KnightValue(sq, side);
+        s += KnightValue(sq);
         break;
 #endif
 
     case silver:
-        s += SilverValue(sq, side);
+        s += SilverValue(sq);
         break;
 
     case gold:
-        s += GoldValue(sq, side);
+        s += GoldValue(sq);
         break;
 
     case bishop:
-        s += BishopValue(sq, side);
+        s += BishopValue(sq);
         break;
 
     case rook:
@@ -2008,33 +2004,33 @@ PieceValue(short sq, short side)
         break;
 
     case king:
-        s += KingValue(sq, side);
+        s += KingValue(sq);
         break;
 
     case ppawn:
-        s += PPawnValue(sq, side);
+        s += PPawnValue(sq);
         break;
 
 #ifndef MINISHOGI
     case plance:
-        s += PLanceValue(sq, side);
+        s += PLanceValue(sq);
         break;
 
     case pknight:
-        s += PKnightValue(sq, side);
+        s += PKnightValue(sq);
         break;
 #endif
 
     case psilver:
-        s += PSilverValue(sq, side);
+        s += PSilverValue(sq);
         break;
 
     case pbishop:
-        s += PBishopValue(sq, side);
+        s += PBishopValue(sq);
         break;
 
     case prook:
-        s += PRookValue(sq, side);
+        s += PRookValue(sq);
         break;
     }
 
@@ -2139,7 +2135,7 @@ UpdatePatterns(short side, short GameCnt)
     }
 
     if (flag.post)
-        ShowPatternCount(side, n);
+        dsp->ShowPatternCount(side, n);
 
     if (os != END_OF_SEQUENCES)
         update_advance_bonus(side, os);
@@ -2531,8 +2527,8 @@ DetermineGameType(short side_to_move)
     }
     else
     {
-        ShowPatternCount(black, -1);
-        ShowPatternCount(white, -1);
+        dsp->ShowPatternCount(black, -1);
+        dsp->ShowPatternCount(white, -1);
     }
 }
 
@@ -2709,7 +2705,7 @@ DetermineStage(short side)
         stage = 0;
 
     if (flag.post)
-        ShowStage();
+        dsp->ShowStage();
 
     /* Determine stage dependant weights */
 
@@ -2745,6 +2741,7 @@ DetermineStage(short side)
 void
 UpdateWeights(short stage)
 {
+  /* FIXME: this was emptied between 1.1p02 ans 1.2p03, do we keep it ? */
 }
 
 
index ae91939..208966d 100644 (file)
@@ -246,12 +246,12 @@ gives_check_flag(unsigned short *flags, short side, short f, short t)
 
 
 inline static void
-Link(short side, short piece,
+Link(short side,
      short from, short to, unsigned short local_flag, short s)
 {
     if (*TrP == TREE)
     {
-        ShowMessage("TREE overflow\n");
+        dsp->ShowMessage("TREE overflow\n");
     }
     else
     {
@@ -341,8 +341,8 @@ PromotionPossible(short color, short f, short t, short p)
 }
 
 
-inline int
-NonPromotionPossible(short color, short f,
+static inline int
+NonPromotionPossible(short color,
                      short t, short p)
 {
     switch (p)
@@ -401,7 +401,7 @@ NonPromotionPossible(short color, short f,
 /* bonus for possible next moves */
 
 inline static short
-field_bonus(short ply, short side, short piece,
+field_bonus(short side, short piece,
             short f, short t, unsigned short *local_flag)
 {
     short s, u, ptyp;
@@ -621,7 +621,7 @@ LinkMove(short ply, short f,
     if (score_if_impossible < 0)
     {
         /* The move is flagged as illegal. */
-        Link(side, piece,
+        Link(side,
              f, t, local_flag, score_if_impossible);
 
         return;
@@ -730,7 +730,7 @@ LinkMove(short ply, short f,
             s -= 16 / Captured[side][silver];
 
 #if defined DROPBONUS
-        s += field_bonus(ply, side, piece, f, t, &local_flag);
+        s += field_bonus(side, piece, f, t, &local_flag);
 
         if (s == 10 && piece != pawn)
             local_flag |= questionable;
@@ -819,7 +819,7 @@ LinkMove(short ply, short f,
         else
         {
 #if defined FIELDBONUS
-            s += field_bonus(ply, side, piece, f, t, &local_flag);
+            s += field_bonus(side, piece, f, t, &local_flag);
 #endif
         }
     }
@@ -871,7 +871,7 @@ LinkMove(short ply, short f,
 
     if (try_link || GenerateAllMoves)
     {
-        Link(side, piece, f, t, local_flag,
+        Link(side, f, t, local_flag,
              s - ((SCORE_LIMIT + 1000) * 2));
     }
 
@@ -1041,7 +1041,7 @@ GenMoves(short ply, short sq, short side,
                 LinkMove(ply, sq, u, local_flag | promote, xside, true);
 
                 if ((possible
-                     = NonPromotionPossible(color[sq], sq, u, piece)))
+                     = NonPromotionPossible(color[sq], u, piece)))
                 {
                     LinkMove(ply, sq, u, local_flag, xside, possible);
                 }
@@ -1497,7 +1497,7 @@ CaptureList(short side, short ply,
 
                     if ((PP = PromotionPossible(color[sq], sq, u, piece)))
                     {
-                        Link(side, piece,
+                        Link(side,
                              sq, u, capture | promote,
                              (*value)[stage][board[u]]
 #if !defined SAVE_SVALUE
@@ -1508,7 +1508,7 @@ CaptureList(short side, short ply,
 
                     if (!PP || flag.tsume)
                     {
-                        Link(side, piece,
+                        Link(side,
                              sq, u, capture,
                              (*value)[stage][board[u]]
 #if !defined SAVE_SVALUE
index 7cd5a49..edea646 100644 (file)
@@ -44,6 +44,8 @@
 #include "debug.h"
 #include "opts.h"          /* Various option-setting #defines.  */
 
+#include <stdarg.h>
+
 /*
  * Display options.
  */
@@ -58,8 +60,6 @@ typedef enum {
 extern display_t display_type;
 
 #define XSHOGI     (display_type == DISPLAY_X)
-#define NOT_CURSES ((display_type == DISPLAY_X) \
-  || (display_type == DISPLAY_RAW))
 
 
 /* Miscellaneous globals. */
@@ -915,10 +915,8 @@ extern void Unlock_data(void);     /* init.c */
 extern void Initialize_dist(void); /* init.c */
 extern void Initialize_eval(void); /* eval.c */
 extern void NewGame(void);
-extern int  parse(FILE * fd, unsigned short *mv,
-                  short side, char *opening);
 extern void GetOpenings(void);
-extern int  OpeningBook(unsigned short *hint, short side);
+extern int  OpeningBook(unsigned short *hint);
 
 typedef enum
 {
@@ -965,7 +963,6 @@ PutInTTable(short side,
             short score,
             short depth,
             short ply,
-            short alpha,
             short beta,
             unsigned short mv);
 
@@ -1125,6 +1122,55 @@ typedef enum
 extern int VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv);
 extern unsigned short TTage;
 
-#include "dspwrappers.h"   /* Display functions. */
+/* display driver framework */
+
+struct display
+{
+    void (*ChangeAlphaWindow)(void);
+    void (*ChangeBetaWindow)(void);
+    void (*ChangeHashDepth)(void);
+    void (*ChangeSearchDepth)(char *sx);
+    void (*ChangeXwindow)(void);
+    void (*ClearScreen)(void);
+    void (*DoDebug)(void);
+    void (*DoTable)(short table[NO_SQUARES]);
+    void (*EditBoard)(void);
+    void (*ExitShogi)(void);
+    void (*GiveHint)(void);
+    void (*Initialize)(void);
+    void (*ShowNodeCnt)(long NodeCnt);
+    void (*OutputMove)(void);
+    void (*PollForInput)(void);
+    void (*SetContempt)(void);
+    void (*SearchStartStuff)(short side);
+    void (*SelectLevel)(char *sx);
+    void (*ShowCurrentMove)(short pnt, short f, short t);
+    void (*ShowDepth)(char ch);
+    void (*ShowGameType)(void);
+    void (*ShowLine)(unsigned short *bstline);
+    void (*ShowMessage)(char *s);
+    void (*AlwaysShowMessage)(const char *format, ...);
+    void (*Printf)(const char *format, ...);
+    void (*doRequestInputString)(const char* fmt, char* buffer);
+    int  (*GetString)(char* sx);
+    void (*SetupBoard)(void);
+    void (*ShowPatternCount)(short side, short n);
+    void (*ShowPostnValue)(short sq);
+    void (*ShowPostnValues)(void);
+    void (*ShowPrompt)(void);
+    void (*ShowResponseTime)(void);
+    void (*ShowResults)(short score, unsigned short *bstline, char ch);
+    void (*ShowSidetoMove)(void);
+    void (*ShowStage)(void);
+    void (*TerminateSearch)(int sig);
+    void (*UpdateClocks)(void);
+    void (*UpdateDisplay)(short f, short t, short redraw, short isspec);
+    void (*help)(void);
+};
+
+extern struct display *dsp;
+
+extern struct display raw_display;
+extern struct display curses_display;
 
 #endif /* _GNUSHOGI_H_ */
index 061c7f9..1f71994 100644 (file)
@@ -150,7 +150,7 @@ Initialize_data(void)
 
         if (x >= 0)
         {
-            ShowMessage("datatype 'small_short' is unsigned; "
+            dsp->ShowMessage("datatype 'small_short' is unsigned; "
                         "check gnushogi.h\n");
             return 1;
         }
@@ -163,7 +163,7 @@ Initialize_data(void)
     {
         sprintf(buffer, "Cannot allocate %ld bytes for search tree",
                 (long)n);
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
         return 1;
     }
 
@@ -173,7 +173,7 @@ Initialize_data(void)
     if (!hashcode)
     {
         sprintf(buffer, "Cannot allocate %ld bytes for hashcode", (long)n);
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
         return 1;
     }
 
@@ -185,7 +185,7 @@ Initialize_data(void)
         sprintf(buffer,
                 "Cannot allocate %ld bytes for drop_hashcode",
                 (long)n);
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
         return 1;
     }
 
@@ -197,7 +197,7 @@ Initialize_data(void)
         sprintf(buffer,
                 "Cannot allocate %ld bytes for game record",
                 (long)n);
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
         return 1;
     }
 
@@ -214,7 +214,7 @@ Initialize_data(void)
             {
                 sprintf(buffer, "cannot allocate %ld space for nextdir %d",
                         (long)(n), i);
-                ShowMessage(buffer);
+                dsp->ShowMessage(buffer);
             }
 
             nextdir[i] = NULL;
@@ -229,7 +229,7 @@ Initialize_data(void)
             {
                 sprintf(buffer, "cannot allocate %ld space for nextpos %d",
                         (long)(n), i);
-                ShowMessage(buffer);
+                dsp->ShowMessage(buffer);
             }
 
             use_nextpos = false;
@@ -247,7 +247,7 @@ Initialize_data(void)
 
     if (!value)
     {
-        ShowMessage("cannot allocate value space");
+        dsp->ShowMessage("cannot allocate value space");
         return 1;
     }
 
@@ -256,7 +256,7 @@ Initialize_data(void)
 
     if (!fscore)
     {
-        ShowMessage("cannot allocate fscore space");
+        dsp->ShowMessage("cannot allocate fscore space");
         return 1;
     }
 
@@ -268,7 +268,7 @@ Initialize_data(void)
     {
         sprintf(buffer, "Cannot allocate %ld bytes for history table",
                 (long)sizeof_history);
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
         use_history = false;
     }
 #endif
@@ -284,7 +284,7 @@ Initialize_data(void)
         {
             sprintf(buffer, "Cannot allocate %ld bytes for cache table %ld",
                     (long)n, (long)i);
-            ShowMessage(buffer);
+            dsp->ShowMessage(buffer);
             use_etable = false;
         }
     }
@@ -334,7 +334,7 @@ Initialize_data(void)
     {
         sprintf(buffer, "Cannot allocate %ld bytes for transposition table",
                 (long)(2 * n));
-        ShowMessage(buffer);
+        dsp->ShowMessage(buffer);
         ttable[0] = ttable[1] = NULL;
     }
 #endif /* ttblsz */
@@ -345,7 +345,7 @@ Initialize_data(void)
 
     if (!distdata)
     {
-        ShowMessage("cannot allocate distdata space...");
+        dsp->ShowMessage("cannot allocate distdata space...");
         use_distdata = false;
     }
 #endif
index 742b754..b0f63df 100644 (file)
@@ -592,7 +592,7 @@ NewGame(void)
     }
 
     ClearCaptured();
-    ClearScreen();
+    dsp->ClearScreen();
     InitializeStats();
 
 #ifdef HAVE_GETTIMEOFDAY
@@ -615,9 +615,9 @@ NewGame(void)
         if (TCflag)
             SetTimeControl();
         else if (MaxResponseTime == 0)
-            SelectLevel(sx);
+            dsp->SelectLevel(sx);
 
-        UpdateDisplay(0, 0, 1, 0);
+        dsp->UpdateDisplay(0, 0, 1, 0);
         GetOpenings();
         GetOpeningPatterns(&max_opening_sequence);
 
@@ -676,7 +676,7 @@ InitMain(void)
         barebones    = 0;
     }
 
-    Initialize();
+    dsp->Initialize();
     Initialize_dist();
     Initialize_eval();
 #if !defined SAVE_NEXTPOS
@@ -726,6 +726,6 @@ ExitMain(void)
 #endif /* HASHFILE */
 #endif /* ttblsz */
 
-    ExitShogi();
+    dsp->ExitShogi();
 }
 
index 7551512..d9fae21 100644 (file)
@@ -81,17 +81,14 @@ main (int argc, char **argv)
                 binbookfile = NULL;
 #endif
             }
-
             break;
 
 #ifdef BINBOOK
         case 'B':
             argc--;
             argv++;
-
             if (argc > 0)
                 binbookfile = argv[0];
-
             break;
 #endif
 
@@ -99,7 +96,7 @@ main (int argc, char **argv)
         case 'C':
             /* Curses interface. */
             display_type = DISPLAY_CURSES;
-
+            dsp = &curses_display;
             break;
 #endif
 
@@ -108,17 +105,14 @@ main (int argc, char **argv)
             hash = ((argv[0][0] == '-') ? false : true);
             break;
 
-
         case 'l':
             argc--;
             argv++;
 
             if (argc > 0)
                 Lang = argv[0];
-
             break;
 
-
         case 'L':
             argc--;
             argv++;
@@ -127,34 +121,28 @@ main (int argc, char **argv)
                 strcpy(listfile, argv[0]);
             break;
 
-
         case 's':
             argc--;
             argv++;
 
             if (argc > 0)
                 strcpy(savefile, argv[0]);
-
             break;
 
-
         case 'P':
             argc--;
             argv++;
 
             if (argc > 0)
                 bookmaxply = atoi(argv[0]);
-
             break;
 
-
         case 'R':
             /* Raw text interface. */
             display_type = DISPLAY_RAW;
-
+            dsp = &raw_display;
             break;
 
-
         case 'S':
             argc--;
             argv++;
@@ -170,23 +158,18 @@ main (int argc, char **argv)
 
             if (argc > 0)
                 rehash = atoi(argv[0]);
-
             if (rehash > MAXrehash)
                 rehash = MAXrehash;
-
             break;
 
-
         case 'T':
             argc--;
             argv++;
 
             if (argc > 0)
                 ttblsize = atoi(argv[0]);
-
-            if ((ttblsize <= MINTTABLE))
+            if (ttblsize <= MINTTABLE)
                 ttblsize = (MINTTABLE) + 1;
-
             break;
 
 #ifdef HASHFILE
@@ -230,7 +213,6 @@ main (int argc, char **argv)
 
             return 0;
 
-
         case 't':   /* Create or test persistent transposition table. */
             hashfile = fopen(HASHFILE, RWA_ACC);
 
@@ -272,7 +254,7 @@ main (int argc, char **argv)
                     }
                 }
 
-                printf("The file contains %d entries out of max %d\n", nr[0], i);
+                printf("The file contains %d entries out of max %ld\n", nr[0], i);
 
                 for (j = 1; j < MAXDEPTH; j++)
                     printf("%d ", nr[j]);
@@ -282,7 +264,6 @@ main (int argc, char **argv)
 
             return 0;
 
-
 #endif /* HASHFILE */
 #endif /* ttblsz */
 
@@ -294,20 +275,17 @@ main (int argc, char **argv)
         case 'X':
             /* X interface. */
             display_type = DISPLAY_X;
-
+            dsp = &raw_display;
             break;
 
-
         case 'x':
             argc--;
             argv++;
 
             if (argc > 0)
                 xwin = argv[0];
-
             break;
 
-
         default:
             fputs("Usage: gnushogi [-a] [-t] [-c size] [-s savefile][-l listfile] [-x xwndw]\n", stderr);
             exit(1);
index 0d510d9..6dbca38 100644 (file)
 #define MAX_OPENING_SEQUENCE 20
 #define MAX_PATTERN          200
 
-static char *patternfile = PATTERNFILE;
 small_short pattern_data[MAX_PATTERN_DATA];
 
 /* minimal ShowMessage to avoid dependency on extraneous display code */
-void
-ShowMessage(char *s)
+static void
+Dummy_ShowMessage(char *s)
 {
     printf("%s\n", s);
 }
+static struct display dummydsp = {
+  .ShowMessage = Dummy_ShowMessage,
+};
+struct display *dsp = &dummydsp;
 
 #define is_digit(c) (((c) >= '0') && ((c) <= '9'))
 #define is_alpha(c) ((((c) >= 'a') && ((c) <= 'z')) \
@@ -188,74 +191,73 @@ ScanPattern (char *s, short *pindex)
 
 
 void
-ReadOpeningSequences (short *pindex)
+ReadOpeningSequences (short *pindex, const char* patternfile)
 {
     FILE *fd;
     char s[256];
     short max_pattern = 0;
     short max_opening_sequence = 0;
 
-    if ((fd = fopen (patternfile, "r")) == NULL)
-        fd = fopen ("gnushogi.pat", "r");
+    fd = fopen (patternfile, "r");
 
-    if (fd != NULL)
-    {
-        *pindex = 0;
+    if (fd == NULL) {
+        sprintf(s, "no pattern file '%s'", patternfile);
+        dsp->ShowMessage(s);
+        return;
+    }
 
-        while (fgets (s, 256, fd) != NULL)
+    *pindex = 0;
+
+    while (fgets (s, 256, fd) != NULL)
+    {
+        if (*s == '#')
+        {
+            /* comment, skip line */
+        }
+        else if (is_alpha(*s))
         {
-            if (*s == '#')
+            if (max_opening_sequence++ > 0)
             {
-                /* comment, skip line */
+                pattern_data[(*pindex)++] = END_OF_PATTERNS;
             }
-            else if (is_alpha(*s))
-            {
-                if (max_opening_sequence++ > 0)
-                {
-                    pattern_data[(*pindex)++] = END_OF_PATTERNS;
-                }
 
-                pattern_data[(*pindex)++] = ValueOfOpeningName(s);
+            pattern_data[(*pindex)++] = ValueOfOpeningName(s);
+        }
+        else
+        {
+            if (ScanPattern(s, pindex))
+            {
+                dsp->ShowMessage("error in pattern sequence...");
+                exit(1);
             }
             else
             {
-                if (ScanPattern(s, pindex))
-                {
-                    ShowMessage("error in pattern sequence...");
-                    exit(1);
-                }
-                else
-                {
-                    max_pattern++;
-                }
+                max_pattern++;
             }
         }
+    }
 
-        pattern_data[(*pindex)++] = END_OF_PATTERNS;
-        pattern_data[(*pindex)++] = END_OF_SEQUENCES;
+    pattern_data[(*pindex)++] = END_OF_PATTERNS;
+    pattern_data[(*pindex)++] = END_OF_SEQUENCES;
 
-        sprintf(s,
-                "Pattern: %d bytes for %d sequences with %d patterns.\n",
-                *pindex, max_opening_sequence, max_pattern);
-        ShowMessage(s);
+    sprintf(s,
+            "Pattern: %d bytes for %d sequences with %d patterns.\n",
+            *pindex, max_opening_sequence, max_pattern);
+    dsp->ShowMessage(s);
 
-        fclose(fd);
-    } else {
-        sprintf(s, "no pattern file '%s'", patternfile);
-        ShowMessage(s);
-    }
+    fclose(fd);
 }
 
 
 void
-WriteOpeningSequences (short pindex)
+WriteOpeningSequences (short pindex, const char* patternincfile)
 {
     FILE *fd;
     short n = 0;
     short max_pattern = 0;
     short max_opening_sequence = 0;
 
-    fd = fopen ("pattern.inc", "w");
+    fd = fopen (patternincfile, "w");
     fprintf(fd, "#define MAX_PATTERN_DATA %d\n\n", pindex);
     fprintf(fd, "small_short pattern_data[MAX_PATTERN_DATA] =\n{\n");
 
index 1382261..1299e2a 100644 (file)
@@ -36,8 +36,8 @@
 #include "pattern.h"
 
 
-extern void ReadOpeningSequences(short *pindex);
-extern void WriteOpeningSequences(short pindex);
+extern void ReadOpeningSequences(short *pindex, const char* patternfile);
+extern void WriteOpeningSequences(short pindex, const char* patternincfile);
 
 small_short board[NO_SQUARES];
 small_short color[NO_SQUARES];
@@ -47,6 +47,13 @@ main(int argc, char **argv)
 {
     short sq, side, max_pattern_data;
 
+    if (argc != 3) {
+        fprintf(stderr, "Usage: %s gnushogi.pat pattern.inc\n", argv[0]);
+        exit(1);
+    }
+    char* patternfile = argv[1];
+    char* patternincfile = argv[2];
+
 #ifdef TEST_DISTANCE
     short d;
     char  s[80];
@@ -84,8 +91,8 @@ main(int argc, char **argv)
 
 #endif
 
-    ReadOpeningSequences(&max_pattern_data);
-    WriteOpeningSequences(max_pattern_data);
+    ReadOpeningSequences(&max_pattern_data, patternfile);
+    WriteOpeningSequences(max_pattern_data, patternincfile);
 
     return 0;
 }
index 05d15ca..349cd94 100644 (file)
 #include "pattern.h"
 
 /* "pat2inc" generates constants and pattern_data */
-#include "pattern.inc"
+#ifndef MINISHOGI
+# include "gnushogi-pattern.inc"
+#else
+# include "gnuminishogi-pattern.inc"
+#endif
 
 struct Pattern_rec Pattern[MAX_PATTERN];
 struct OpeningSequence_rec OpeningSequence[MAX_OPENING_SEQUENCE];
index b0e4084..4225799 100644 (file)
@@ -33,6 +33,7 @@
 #include <ctype.h>
 #include <signal.h>
 #include <stdarg.h>
+#include <stdio.h>
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/file.h>
@@ -42,7 +43,6 @@
 #endif
 
 #include "gnushogi.h"
-#include "rawdsp.h"
 
 unsigned short MV[MAXDEPTH];
 int MSCORE;
@@ -52,6 +52,11 @@ char *DRAW;
 extern char *InPtr;
 extern short pscore[];
 
+/****************************************
+ * forward declarations
+ ****************************************/
+
+void Raw_UpdateDisplay(short f, short t, short redraw, short isspec);
 
 /****************************************
  * Trivial output functions.
@@ -127,17 +132,23 @@ Raw_ShowMessage(char *s)
 
 
 void
-Raw_AlwaysShowMessage(const char *format, va_list ap)
+Raw_AlwaysShowMessage(const char *format, ...)
 {
+    va_list ap;
+    va_start(ap, format);
     vprintf(format, ap);
     printf("\n");
+    va_end(ap);
 }
 
 
 void
-Raw_Printf(const char *format, va_list ap)
+Raw_Printf(const char *format, ...)
 {
+    va_list ap;
+    va_start(ap, format);
     vprintf(format, ap);
+    va_end(ap);
 }
 
 
@@ -152,10 +163,17 @@ int
 Raw_GetString(char* sx)
 {
     int eof = 0;
+    char *nl;
     sx[0] = '\0';
 
     while(!eof && !sx[0])
         eof = (fgets(sx, 80, stdin) == NULL);
+
+    /* remove any trailing newline */
+    nl = strchr(sx, '\n');
+    if (nl)
+        nl[0] = '\0';
+
     return eof;
 }
 
@@ -290,30 +308,48 @@ Raw_help(void)
 {
     Raw_ClearScreen();
     printf("GNU Shogi %s command summary\n", PACKAGE_VERSION);
-    printf("----------------------------------"
-           "------------------------------\n");
-    fputs ("7g7f      move from 7g to 7f      quit      Exit Shogi\n", stdout);
-    printf("S6h       move silver to 6h       beep      turn %s\n", (flag.beep) ? "OFF" : "ON");
-    printf("2d2c+     move to 2c and promote  material  turn %s\n", (flag.material) ? "OFF" : "ON");
-    printf("P*5e      drop pawn to 5e         easy      turn %s\n", (flag.easy) ? "OFF" : "ON");
-    printf("tsume     toggle tsume mode       hash      turn %s\n", (flag.hash) ? "OFF" : "ON");
-    fputs ("bd        redraw board            reverse   board display\n", stdout);
-    printf("list      game to shogi.lst       book      turn %s used %d of %d\n", (Book) ? "OFF" : "ON", bookcount, booksize);
-    fputs ("undo      undo last ply           remove    take back a move\n", stdout);
-    fputs ("edit      edit board              force     toggle manual move mode\n", stdout);
-    fputs ("switch    sides with computer     both      computer match\n", stdout);
-    fputs ("black     computer plays black    white     computer plays white\n", stdout);
-    fputs ("depth     set search depth        clock     set time control\n", stdout);
-    fputs ("post      principle variation     hint      suggest a move\n", stdout);
-    fputs ("save      game to file            get       game from file\n", stdout);
-    printf("xsave     pos. to xshogi file     xget"
-           "      pos. from xshogi file\n");
-    fputs("random    randomize play          new       start new game\n", stdout);
-    printf("--------------------------------"
-           "--------------------------------\n");
+    printf("----------------------------------------------------------------\n");
+    printf("7g7f      move from 7g to 7f      quit      Exit Shogi\n");
+    printf("S6h       move silver to 6h       beep      turn %s\n",
+           (flag.beep) ? "OFF" : "ON");
+    printf("2d2c+     move to 2c and promote  material  turn %s\n",
+           (flag.material) ? "OFF" : "ON");
+    printf("P*5e      drop pawn to 5e         easy      turn %s\n",
+           (flag.easy) ? "OFF" : "ON");
+    printf("tsume     toggle tsume mode       hash      turn %s\n",
+           (flag.hash) ? "OFF" : "ON");
+    printf("bd        redraw board            reverse   board display\n");
+    printf("list      game to shogi.lst       book      turn %s used %d of %d\n",
+           (Book) ? "OFF" : "ON", bookcount, booksize);
+    printf("undo      undo last ply           remove    take back a move\n");
+    printf("edit      edit board              force     toggle manual move mode\n");
+    printf("switch    sides with computer     both      computer match\n");
+    printf("black     computer plays black    white     computer plays white\n");
+    printf("sd        set search depth        clock     set time control\n");
+    printf("post      principle variation     hint      suggest a move\n");
+    printf("save      game to file            get       game from file\n");
+    printf("xsave     pos. to xshogi file     xget      pos. from xshogi file\n");
+    printf("random    randomize play          new       start new game\n");
+    printf("setup                             first     \n");
+    printf("go        computer plays now      material  turn %s\n",
+           flag.material ? "OFF" : "ON");
+    printf("level     time control            gamein    \n");
+    printf("time      set engine clock        otime     set opponent clock\n");
+    printf("Awindow                           Bwindow     \n");
+    printf("rcptr     turn %3s                bsave     book save\n",
+           flag.rcptr ? "OFF" : "ON ");
+    printf("hashdepth                         hard      turn easy OFF\n");
+    printf("contempt                          xwndw                  \n");
+    printf("rv        turn %3s                coords    turn %s\n",
+           flag.rv ? "OFF" : "ON ", flag.coords ? "OFF" : "ON");
+    printf("stars     turn %3s                moves                  \n",
+           flag.stars ? "OFF" : "ON ");
+    printf("test                              p                      \n");
+    printf("debug                             depth     alias for 'sd'\n");
+    printf("----------------------------------------------------------------\n");
     printf("Computer: %-12s Opponent:            %s\n",
            ColorStr[computer], ColorStr[opponent]);
-    printf("Depth:    %-12d Response time:       %d sec\n",
+    printf("Depth:    %-12d Response time:       %ld sec\n",
            MaxSearchDepth, MaxResponseTime/100);
     printf("Random:   %-12s Easy mode:           %s\n",
            (dither) ? "ON" : "OFF", (flag.easy) ? "ON" : "OFF");
@@ -321,7 +357,7 @@ Raw_help(void)
            (flag.beep) ? "ON" : "OFF", (flag.hash) ? "ON" : "OFF");
     printf("Tsume:    %-12s Force:               %s\n",
            (flag.tsume) ? "ON" : "OFF", (flag.force) ? "ON" : "OFF");
-    printf("Time Control %s %d moves %d sec %d add %d depth\n",
+    printf("Time Control %s %d moves %ld sec %d add %d depth\n",
            (TCflag) ? "ON" : "OFF",
            TimeControl.moves[black], TimeControl.clock[black] / 100,
            TCadd/100, MaxSearchDepth);
@@ -688,28 +724,17 @@ Raw_GiveHint(void)
 void
 Raw_SelectLevel(char *sx)
 {
+    /* FIXME: NO_SQUARES is nonsense here */
+    char T[NO_SQUARES + 1], *p;
 
-    char T[NO_SQUARES + 1], *p, *q;
-
-    if ((p = strstr(sx, "level")) != NULL)
-        p += strlen("level");
-    else if ((p = strstr(sx, "clock")) != NULL)
-        p += strlen("clock");
-
-    strcat(sx, "XX");
-    q = T;
-    *q = '\0';
+    strncpy(T, sx, NO_SQUARES);
+    T[NO_SQUARES] = '\0';
 
-    for (; *p != 'X'; *q++ = *p++);
-
-    *q = '\0';
-
-    /* line empty ask for input */
+    /* if line empty, ask for input */
     if (!T[0])
     {
         fputs("Enter #moves #minutes: ", stdout);
         fgets(T, NO_SQUARES + 1, stdin);
-        strcat(T, "XX");
     }
 
     /* skip blackspace */
@@ -719,6 +744,7 @@ Raw_SelectLevel(char *sx)
     if (*p == 'f')
     {
         /* its a fischer clock game */
+        char *q;
         p++;
         TCminutes = (short)strtol(p, &q, 10);
         TCadd = (short)strtol(q, NULL, 10) *100;
@@ -728,6 +754,7 @@ Raw_SelectLevel(char *sx)
     else
     {
         /* regular game */
+        char *q;
         TCadd = 0;
         TCmoves = (short)strtol(p, &q, 10);
         TCminutes = (short)strtol(q, &q, 10);
@@ -768,10 +795,16 @@ Raw_SelectLevel(char *sx)
 
 
 void
-Raw_ChangeSearchDepth(void)
+Raw_ChangeSearchDepth(char *sx)
 {
-    printf("depth = ");
-    scanf("%hd", &MaxSearchDepth);
+    char buf[80+1];
+    strncpy(buf, sx, 80); buf[80] = '\0';
+    /* if line empty, ask for input */
+    if (!buf[0]) {
+        printf("depth = ");
+        fgets(buf, 80+1, stdin);
+    }
+    sscanf(buf, "%hd", &MaxSearchDepth);
     TCflag = !(MaxSearchDepth > 0);
 }
 
@@ -809,8 +842,7 @@ Raw_ChangeXwindow(void)
 void
 Raw_ShowPostnValue(short sq)
 {
-    short score;
-    score = ScorePosition(color[sq]);
+    (void) ScorePosition(color[sq]);
 
     if (color[sq] != neutral)
     {
@@ -957,12 +989,12 @@ Raw_PollForInput(void)
     if (!PeekNamedPipe(GetStdHandle(STD_INPUT_HANDLE), NULL, 0, NULL, &cnt, NULL))
         cnt = 1;
 #else
-    static struct pollfd pollfds[1] = { /* [0] = */ { /* .fd = */ STDIN_FILENO,
-                                                      /* .events = */ POLLIN } };
+    static struct pollfd pollfds[1] = { [0] = { .fd = STDIN_FILENO,
+                                                .events = POLLIN } };
     int cnt = poll(pollfds, sizeof(pollfds)/sizeof(pollfds[0]), 0);
     if (cnt < 0) {
         perror("polling standard input");
-        ExitShogi();
+        Raw_ExitShogi();
     }
 #endif
     if (cnt) { /* if anything to read, or error occured */
@@ -971,3 +1003,47 @@ Raw_PollForInput(void)
         flag.bothsides = false;
     }
 }
+
+struct display raw_display =
+{
+    .ChangeAlphaWindow    = Raw_ChangeAlphaWindow,
+    .ChangeBetaWindow     = Raw_ChangeBetaWindow,
+    .ChangeHashDepth      = Raw_ChangeHashDepth,
+    .ChangeSearchDepth    = Raw_ChangeSearchDepth,
+    .ChangeXwindow        = Raw_ChangeXwindow,
+    .ClearScreen          = Raw_ClearScreen,
+    .DoDebug              = Raw_DoDebug,
+    .DoTable              = Raw_DoTable,
+    .EditBoard            = Raw_EditBoard,
+    .ExitShogi            = Raw_ExitShogi,
+    .GiveHint             = Raw_GiveHint,
+    .Initialize           = Raw_Initialize,
+    .ShowNodeCnt          = Raw_ShowNodeCnt,
+    .OutputMove           = Raw_OutputMove,
+    .PollForInput         = Raw_PollForInput,
+    .SetContempt          = Raw_SetContempt,
+    .SearchStartStuff     = Raw_SearchStartStuff,
+    .SelectLevel          = Raw_SelectLevel,
+    .ShowCurrentMove      = Raw_ShowCurrentMove,
+    .ShowDepth            = Raw_ShowDepth,
+    .ShowGameType         = Raw_ShowGameType,
+    .ShowLine             = Raw_ShowLine,
+    .ShowMessage          = Raw_ShowMessage,
+    .AlwaysShowMessage    = Raw_AlwaysShowMessage,
+    .Printf               = Raw_Printf,
+    .doRequestInputString = Raw_doRequestInputString,
+    .GetString            = Raw_GetString,
+    .SetupBoard           = Raw_SetupBoard,
+    .ShowPatternCount     = Raw_ShowPatternCount,
+    .ShowPostnValue       = Raw_ShowPostnValue,
+    .ShowPostnValues      = Raw_ShowPostnValues,
+    .ShowPrompt           = Raw_ShowPrompt,
+    .ShowResponseTime     = Raw_ShowResponseTime,
+    .ShowResults          = Raw_ShowResults,
+    .ShowSidetoMove       = Raw_ShowSidetoMove,
+    .ShowStage            = Raw_ShowStage,
+    .TerminateSearch      = Raw_TerminateSearch,
+    .UpdateClocks         = Raw_UpdateClocks,
+    .UpdateDisplay        = Raw_UpdateDisplay,
+    .help                 = Raw_help,
+};
diff --git a/gnushogi/rawdsp.h b/gnushogi/rawdsp.h
deleted file mode 100644 (file)
index 952b8c5..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * FILE: rawdsp.h
- *
- *     Raw text interface for GNU Shogi.
- *
- * ----------------------------------------------------------------------
- * Copyright (c) 1993, 1994, 1995 Matthias Mutz
- * Copyright (c) 1999 Michael Vanier and the Free Software Foundation
- * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
- *
- * GNU SHOGI is based on GNU CHESS
- *
- * Copyright (c) 1988, 1989, 1990 John Stanback
- * Copyright (c) 1992 Free Software Foundation
- *
- * This file is part of GNU SHOGI.
- *
- * GNU Shogi is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
- * 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 GNU Shogi; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- * ----------------------------------------------------------------------
- *
- */
-
-#ifndef _RAWDSP_H_
-#define _RAWDSP_H_
-
-#include "gnushogi.h"
-
-/* The following are common to rawdsp.h and cursesdsp.h */
-
-void Raw_ChangeAlphaWindow(void);
-void Raw_ChangeBetaWindow(void);
-void Raw_ChangeHashDepth(void);
-void Raw_ChangeSearchDepth(void);
-void Raw_ChangeXwindow(void);
-void Raw_ClearScreen(void);
-void Raw_Die(int sig);
-void Raw_DoDebug(void);
-void Raw_DoTable(short table[NO_SQUARES]);
-void Raw_EditBoard(void);
-void Raw_ExitShogi(void);
-void Raw_GiveHint(void);
-void Raw_Initialize(void);
-void Raw_ShowNodeCnt(long NodeCnt);
-void Raw_OutputMove(void);
-void Raw_PollForInput(void);
-void Raw_SearchStartStuff(short side);
-void Raw_SelectLevel(char *sx);
-void Raw_SetContempt(void);
-void Raw_ShowCurrentMove(short pnt, short f, short t);
-void Raw_ShowDepth(char ch);
-void Raw_ShowGameType(void);
-void Raw_ShowLine(unsigned short *bstline);
-void Raw_ShowMessage(char *s);
-void Raw_AlwaysShowMessage(const char *format, va_list ap);
-void Raw_Printf(const char *format, va_list ap);
-void Raw_doRequestInputString(const char* fmt, char* buffer);
-int  Raw_GetString(char* sx);
-void Raw_SetupBoard(void);
-void Raw_ShowPatternCount(short side, short n);
-void Raw_ShowPostnValue(short sq);
-void Raw_ShowPostnValues(void);
-void Raw_ShowPrompt(void);
-void Raw_ShowResponseTime(void);
-void Raw_ShowResults(short score, unsigned short *bstline, char ch);
-void Raw_ShowSidetoMove(void);
-void Raw_ShowStage(void);
-void Raw_TerminateSearch(int sig);
-void Raw_UpdateClocks(void);
-void Raw_UpdateDisplay(short f, short t, short redraw, short isspec);
-void Raw_help(void);
-
-#endif /* _RAWDSP_H_ */
-
index 84850e7..1c4bbf7 100644 (file)
@@ -181,7 +181,7 @@ SelectMove(short side, SelectMove_mode iop)
 #ifdef QUIETBACKGROUND
     if (!background)
 #endif /* QUIETBACKGROUND */
-        ShowResponseTime();
+        dsp->ShowResponseTime();
 
     ExtraTime = 0;
 
@@ -190,12 +190,12 @@ SelectMove(short side, SelectMove_mode iop)
 #ifdef QUIETBACKGROUND
     if (!background)
 #endif /* QUIETBACKGROUND */
-        ShowSidetoMove();
+        dsp->ShowSidetoMove();
 
 #ifdef QUIETBACKGROUND
     if (!background)
 #endif /* QUIETBACKGROUND */
-        SearchStartStuff(side);
+        dsp->SearchStartStuff(side);
 
 #ifdef HISTORY
     array_zero(history, sizeof_history);
@@ -259,7 +259,7 @@ SelectMove(short side, SelectMove_mode iop)
 
     if (flag.regularstart && Book)
     {
-        flag.timeout = bookflag = OpeningBook(&hint, side);
+        flag.timeout = bookflag = OpeningBook(&hint);
 
         if (TCflag)
             ResponseTime += ResponseTime;
@@ -305,7 +305,7 @@ SelectMove(short side, SelectMove_mode iop)
 # ifdef QUIETBACKGROUND
         if (!background)
 #endif /* QUIETBACKGROUND */
-            ShowDepth(' ');
+            dsp->ShowDepth(' ');
 
         /* search at this level returns score of PV */
         score = search(side, 1, Sdepth, alpha, beta, PrVar, &rpt);
@@ -321,7 +321,7 @@ SelectMove(short side, SelectMove_mode iop)
 #ifdef QUIETBACKGROUND
             if (!background)
 #endif /* QUIETBACKGROUND */
-                ShowDepth('-');
+                dsp->ShowDepth('-');
 
             if (TCflag && TCcount < MAXTCCOUNTR)
             {
@@ -343,7 +343,7 @@ SelectMove(short side, SelectMove_mode iop)
 #ifdef QUIETBACKGROUND
             if (!background)
 #endif /* QUIETBACKGROUND */
-                ShowDepth('+');
+                dsp->ShowDepth('+');
 
             score = search(side, 1, Sdepth, -(SCORE_LIMIT + 999),
                            (SCORE_LIMIT + 999), PrVar, &rpt);
@@ -396,7 +396,7 @@ SelectMove(short side, SelectMove_mode iop)
 #ifdef QUIETBACKGROUND
         if (!background)
 #endif /* QUIETBACKGROUND */
-            ShowResults(score, PrVar, '.');
+            dsp->ShowResults(score, PrVar, '.');
     }
 
     /********************** end of main loop ***************************/
@@ -453,7 +453,7 @@ SelectMove(short side, SelectMove_mode iop)
         ElapsedTime(COMPUTE_AND_INIT_MODE);
 
     /* update time control info */
-    OutputMove();
+    dsp->OutputMove();
 
     /* if mate set flag */
     if ((score == -(SCORE_LIMIT + 999) || score == (SCORE_LIMIT + 998)))
@@ -581,7 +581,7 @@ search(short side,
 #ifdef QUIETBACKGROUND
             if (!background)
 #endif
-                ShowResponseTime();
+                dsp->ShowResponseTime();
         }
         else if (!TCflag && flag.musttimeout && Sdepth > MINDEPTH)
         {
@@ -711,7 +711,7 @@ search(short side,
                  && (ProbeFTable(side, depth, ply, &alpha, &beta, &score)
                      == true))
         {
-            PutInTTable(side, score, depth, ply, alpha, beta, PV);
+            PutInTTable(side, score, depth, ply, beta, PV);
             bstline[ply] = PV;
             bstline[ply + 1] = 0;
 
@@ -862,7 +862,6 @@ search(short side,
         nxtline[ply + 1] = 0;
 
         /* if at top level */
-#if !defined NOPOST
         if (ply == 1)
         {
 /* at the top update search status */
@@ -871,10 +870,9 @@ search(short side,
 #ifdef QUIETBACKGROUND
                 if (!background)
 #endif /* QUIETBACKGROUND */
-                    ShowCurrentMove(pnt, node->f, node->t);
+                    dsp->ShowCurrentMove(pnt, node->f, node->t);
             }
         }
-#endif
 
         if (!(node->flags & exact))
         {
@@ -985,15 +983,15 @@ search(short side,
                     {
                         if (best > beta)
                         {
-                            ShowResults(best, bstline, '+');
+                            dsp->ShowResults(best, bstline, '+');
                         }
                         else if (best < alpha)
                         {
-                            ShowResults(best, bstline, '-');
+                            dsp->ShowResults(best, bstline, '-');
                         }
                         else
                         {
-                            ShowResults (best, bstline, '&');
+                            dsp->ShowResults(best, bstline, '&');
                         }
                     }
 #ifdef QUIETBACKGROUND
@@ -1026,13 +1024,13 @@ search(short side,
     {
 #  ifdef HASHFILE /* MCV: warning: this confuses the formatter. */
         if (use_ttable
-            && PutInTTable(side, best, depth, ply, alpha, beta, mv)
+            && PutInTTable(side, best, depth, ply, beta, mv)
             && hashfile
             && (depth > HashDepth)
             && (GameCnt < HashMoveLimit))
 #  else
         if (use_ttable
-            && PutInTTable(side, best, depth, ply, alpha, beta, mv))
+            && PutInTTable(side, best, depth, ply, beta, mv))
 #  endif
         {
             PutInFTable(side, best, depth, ply,
@@ -1117,8 +1115,8 @@ UpdatePieceList(short side, short sq, UpdatePieceList_mode iop)
 
 /* Make or Unmake drop move. */
 
-void
-drop(short side, short piece, short f, short t, short iop)
+static void
+drop(short side, short piece, short t, short iop)
 {
     if (iop == 1)
     {
@@ -1286,7 +1284,7 @@ MakeMove(short side,
         *tempst = svalue[t];
 #endif
 
-        (void)drop(side, g->fpiece, f, t, 1);
+        (void)drop(side, g->fpiece, t, 1);
     }
     else
     {
@@ -1414,7 +1412,7 @@ UnmakeMove(short side,
 
     if (node->flags & dropmask)
     {
-        (void)drop(side, (node->flags & pmask), f, t, 2);
+        (void)drop(side, (node->flags & pmask), t, 2);
 
 #if !defined SAVE_SVALUE
         svalue[t] = *tempst;
index a9ec0d3..00a2032 100644 (file)
@@ -346,7 +346,7 @@ CheckForTimeout(int score, int globalscore, int Jscore, int zwndw)
 #endif
 
     if (flag.timeout)
-        ShowMessage("timeout");
+        dsp->ShowMessage("timeout");
 }
 
 
@@ -366,7 +366,7 @@ ElapsedTime(ElapsedTime_mode iop)
     struct timeval tv;
 #endif
 
-    PollForInput();
+    dsp->PollForInput();
 
 #ifdef HAVE_GETTIMEOFDAY
     gettimeofday(&tv, NULL);
@@ -411,6 +411,6 @@ ElapsedTime(ElapsedTime_mode iop)
 #ifdef QUIETBACKGROUND
         if (!background)
 #endif
-            UpdateClocks();
+            dsp->UpdateClocks();
     }
 }
index 0d1611e..4f746b9 100644 (file)
@@ -36,9 +36,9 @@ unsigned int TTadd = 0;
 short recycle;
 short ISZERO = 1;
 
-
+#if 0
 int
-parse(FILE * fd, unsigned short *mv, short side, char *opening)
+parse(FILE * fd, unsigned short *mv, char *opening)
 {
     int c, i, r1, r2, c1, c2;
     char s[128];
@@ -100,7 +100,7 @@ parse(FILE * fd, unsigned short *mv, short side, char *opening)
 
     return 1;
 }
-
+#endif
 
 /*
  * The field of a hashtable is computed as follows:
@@ -227,7 +227,6 @@ PutInTTable(short side,
             short score,
             short depth,
             short ply,
-            short alpha,
             short beta,
             unsigned short mv)
 {
diff --git a/install-sh b/install-sh
deleted file mode 100755 (executable)
index ebc6691..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-       -c) instcmd="$cpprog"
-           shift
-           continue;;
-
-       -d) dir_arg=true
-           shift
-           continue;;
-
-       -m) chmodcmd="$chmodprog $2"
-           shift
-           shift
-           continue;;
-
-       -o) chowncmd="$chownprog $2"
-           shift
-           shift
-           continue;;
-
-       -g) chgrpcmd="$chgrpprog $2"
-           shift
-           shift
-           continue;;
-
-       -s) stripcmd="$stripprog"
-           shift
-           continue;;
-
-       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
-           shift
-           continue;;
-
-       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-           shift
-           continue;;
-
-       *)  if [ x"$src" = x ]
-           then
-               src=$1
-           else
-               # this colon is to work around a 386BSD /bin/sh bug
-               :
-               dst=$1
-           fi
-           shift
-           continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-       echo "install:  no input file specified"
-       exit 1
-else
-       true
-fi
-
-if [ x"$dir_arg" != x ]; then
-       dst=$src
-       src=""
-       
-       if [ -d $dst ]; then
-               instcmd=:
-       else
-               instcmd=mkdir
-       fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-       if [ -f $src -o -d $src ]
-       then
-               true
-       else
-               echo "install:  $src does not exist"
-               exit 1
-       fi
-       
-       if [ x"$dst" = x ]
-       then
-               echo "install:  no destination specified"
-               exit 1
-       else
-               true
-       fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-       if [ -d $dst ]
-       then
-               dst="$dst"/`basename $src`
-       else
-               true
-       fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='   
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-       pathcomp="${pathcomp}${1}"
-       shift
-
-       if [ ! -d "${pathcomp}" ] ;
-        then
-               $mkdirprog "${pathcomp}"
-       else
-               true
-       fi
-
-       pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-       $doit $instcmd $dst &&
-
-       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-       if [ x"$transformarg" = x ] 
-       then
-               dstfile=`basename $dst`
-       else
-               dstfile=`basename $dst $transformbasename | 
-                       sed $transformarg`$transformbasename
-       fi
-
-# don't allow the sed command to completely eliminate the filename
-
-       if [ x"$dstfile" = x ] 
-       then
-               dstfile=`basename $dst`
-       else
-               true
-       fi
-
-# Make a temp file name in the proper directory.
-
-       dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-       $doit $instcmd $src $dsttmp &&
-
-       trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-       $doit $rmcmd -f $dstdir/$dstfile &&
-       $doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0
diff --git a/xshogi/Makefile.am b/xshogi/Makefile.am
new file mode 100644 (file)
index 0000000..2f0f554
--- /dev/null
@@ -0,0 +1,272 @@
+#
+# Makefile for XShogi
+#
+# Copyright (c) 2013 Yann Dirson and the Free Software Foundation
+#
+# This file is part of GNU Shogi.
+#
+# GNU Shogi is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+#
+# GNU Shogi is distributed in the hope that it will be useful,
+# but WITHOUT 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 GNU Shogi; see the file COPYING.  If not, write to
+# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+bin_PROGRAMS = @XSHOGI@
+EXTRA_PROGRAMS = xshogi
+xdocdir = ${datarootdir}/doc/xshogi
+
+xshogi_SOURCES = \
+       xshogi.c \
+       parser.y \
+       scanner.l
+
+xshogi_CPPFLAGS = \
+       @OPT@ \
+       -DFIRST_SHOGI_PROGRAM=\"@FIRST_SHOGI_PROGRAM@\" \
+       -DSECOND_SHOGI_PROGRAM=\"@SECOND_SHOGI_PROGRAM@\" \
+       -DFIRST_HOST=\"@FIRST_HOST@\" \
+       -DSECOND_HOST=\"@SECOND_HOST@\"
+
+AM_CFLAGS = @CEXTRAFLAGS@ @WARNINGS@
+
+xshogi_LDADD = @X_LIBS@ -lXaw -lXmu -lXt -lXext -lX11
+
+BUILT_SOURCES = parser.h
+AM_YFLAGS = -d
+
+XDOCS = \
+       README.xboard \
+       BUGS
+dist_xdoc_DATA = @XDOCS@
+EXTRA_DATA = $(XDOCS)
+
+dist_noinst_DATA = \
+       REMOTEHOSTS
+
+noinst_HEADERS = \
+       bitmaps.h \
+       sysdeps.h \
+       xshogi.h \
+       xshogifn.h \
+       \
+       eastern_bitmaps/bigblank.xbm \
+       eastern_bitmaps/bigblankR.xbm \
+       eastern_bitmaps/biglight.xbm \
+       eastern_bitmaps/bigsolid.xbm \
+       eastern_bitmaps/bigsolidR.xbm \
+       eastern_bitmaps/bigsolidR_l.xbm \
+       eastern_bitmaps/bigsolidR_m.xbm \
+       eastern_bitmaps/bigsolid_l.xbm \
+       eastern_bitmaps/bigsolid_m.xbm \
+       eastern_bitmaps/bishop.xbm \
+       eastern_bitmaps/bishopP.top.xbm \
+       eastern_bitmaps/bishopP.xbm \
+       eastern_bitmaps/bishopPR.top.xbm \
+       eastern_bitmaps/bishopPR.xbm \
+       eastern_bitmaps/bishopPR_l.top.xbm \
+       eastern_bitmaps/bishopPR_l.xbm \
+       eastern_bitmaps/bishopPR_m.top.xbm \
+       eastern_bitmaps/bishopPR_m.xbm \
+       eastern_bitmaps/bishopP_l.top.xbm \
+       eastern_bitmaps/bishopP_l.xbm \
+       eastern_bitmaps/bishopP_m.top.xbm \
+       eastern_bitmaps/bishopP_m.xbm \
+       eastern_bitmaps/bishopR.xbm \
+       eastern_bitmaps/bishopR_l.xbm \
+       eastern_bitmaps/bishopR_m.xbm \
+       eastern_bitmaps/bishop_l.xbm \
+       eastern_bitmaps/bishop_m.xbm \
+       eastern_bitmaps/gold.xbm \
+       eastern_bitmaps/goldR.xbm \
+       eastern_bitmaps/goldR_l.xbm \
+       eastern_bitmaps/goldR_m.xbm \
+       eastern_bitmaps/gold_l.xbm \
+       eastern_bitmaps/gold_m.xbm \
+       eastern_bitmaps/icon.xbm \
+       eastern_bitmaps/king.xbm \
+       eastern_bitmaps/kingR.xbm \
+       eastern_bitmaps/kingR_l.xbm \
+       eastern_bitmaps/kingR_m.xbm \
+       eastern_bitmaps/king_l.xbm \
+       eastern_bitmaps/king_m.xbm \
+       eastern_bitmaps/knight.xbm \
+       eastern_bitmaps/knightP.xbm \
+       eastern_bitmaps/knightPR.xbm \
+       eastern_bitmaps/knightPR_l.xbm \
+       eastern_bitmaps/knightPR_m.xbm \
+       eastern_bitmaps/knightP_l.xbm \
+       eastern_bitmaps/knightP_m.xbm \
+       eastern_bitmaps/knightR.xbm \
+       eastern_bitmaps/knightR_l.xbm \
+       eastern_bitmaps/knightR_m.xbm \
+       eastern_bitmaps/knight_l.xbm \
+       eastern_bitmaps/knight_m.xbm \
+       eastern_bitmaps/lance.xbm \
+       eastern_bitmaps/lanceP.xbm \
+       eastern_bitmaps/lancePR.xbm \
+       eastern_bitmaps/lancePR_l.xbm \
+       eastern_bitmaps/lancePR_m.xbm \
+       eastern_bitmaps/lanceP_l.xbm \
+       eastern_bitmaps/lanceP_m.xbm \
+       eastern_bitmaps/lanceR.xbm \
+       eastern_bitmaps/lanceR_l.xbm \
+       eastern_bitmaps/lanceR_m.xbm \
+       eastern_bitmaps/lance_l.xbm \
+       eastern_bitmaps/lance_m.xbm \
+       eastern_bitmaps/none.xbm \
+       eastern_bitmaps/none_l.xbm \
+       eastern_bitmaps/none_m.xbm \
+       eastern_bitmaps/pawn.xbm \
+       eastern_bitmaps/pawnP.xbm \
+       eastern_bitmaps/pawnPR.xbm \
+       eastern_bitmaps/pawnPR_l.xbm \
+       eastern_bitmaps/pawnPR_m.xbm \
+       eastern_bitmaps/pawnP_l.xbm \
+       eastern_bitmaps/pawnP_m.xbm \
+       eastern_bitmaps/pawnR.xbm \
+       eastern_bitmaps/pawnR_l.xbm \
+       eastern_bitmaps/pawnR_m.xbm \
+       eastern_bitmaps/pawn_l.xbm \
+       eastern_bitmaps/pawn_m.xbm \
+       eastern_bitmaps/rook.xbm \
+       eastern_bitmaps/rookP.top.xbm \
+       eastern_bitmaps/rookP.xbm \
+       eastern_bitmaps/rookPR.top.xbm \
+       eastern_bitmaps/rookPR.xbm \
+       eastern_bitmaps/rookPR_l.top.xbm \
+       eastern_bitmaps/rookPR_l.xbm \
+       eastern_bitmaps/rookPR_m.top.xbm \
+       eastern_bitmaps/rookPR_m.xbm \
+       eastern_bitmaps/rookP_l.top.xbm \
+       eastern_bitmaps/rookP_l.xbm \
+       eastern_bitmaps/rookP_m.top.xbm \
+       eastern_bitmaps/rookP_m.xbm \
+       eastern_bitmaps/rookR.xbm \
+       eastern_bitmaps/rookR_l.xbm \
+       eastern_bitmaps/rookR_m.xbm \
+       eastern_bitmaps/rook_l.xbm \
+       eastern_bitmaps/rook_m.xbm \
+       eastern_bitmaps/silver.xbm \
+       eastern_bitmaps/silverP.xbm \
+       eastern_bitmaps/silverPR.xbm \
+       eastern_bitmaps/silverPR_l.xbm \
+       eastern_bitmaps/silverPR_m.xbm \
+       eastern_bitmaps/silverP_l.xbm \
+       eastern_bitmaps/silverP_m.xbm \
+       eastern_bitmaps/silverR.xbm \
+       eastern_bitmaps/silverR_l.xbm \
+       eastern_bitmaps/silverR_m.xbm \
+       eastern_bitmaps/silver_l.xbm \
+       eastern_bitmaps/silver_m.xbm \
+       eastern_bitmaps/smallblank.xbm \
+       eastern_bitmaps/smallblankR.xbm \
+       eastern_bitmaps/smalllight.xbm \
+       eastern_bitmaps/smallsolid.xbm \
+       eastern_bitmaps/smallsolidR.xbm \
+       eastern_bitmaps/smallsolidR_l.xbm \
+       eastern_bitmaps/smallsolidR_m.xbm \
+       eastern_bitmaps/smallsolid_l.xbm \
+       eastern_bitmaps/smallsolid_m.xbm \
+       \
+       western_bitmaps/bishopPRW.xbm \
+       western_bitmaps/bishopPW.xbm \
+       western_bitmaps/bishopRW.xbm \
+       western_bitmaps/bishopW.xbm \
+       western_bitmaps/goldRW.xbm \
+       western_bitmaps/goldW.xbm \
+       western_bitmaps/kingRW.xbm \
+       western_bitmaps/kingW.xbm \
+       western_bitmaps/knightPRW.xbm \
+       western_bitmaps/knightPW.xbm \
+       western_bitmaps/knightRW.xbm \
+       western_bitmaps/knightW.xbm \
+       western_bitmaps/lancePRW.xbm \
+       western_bitmaps/lancePW.xbm \
+       western_bitmaps/lanceRW.xbm \
+       western_bitmaps/lanceW.xbm \
+       western_bitmaps/noneW.xbm \
+       western_bitmaps/pawnPRW.xbm \
+       western_bitmaps/pawnPW.xbm \
+       western_bitmaps/pawnRW.xbm \
+       western_bitmaps/pawnW.xbm \
+       western_bitmaps/rookPRW.xbm \
+       western_bitmaps/rookPW.xbm \
+       western_bitmaps/rookRW.xbm \
+       western_bitmaps/rookW.xbm \
+       western_bitmaps/silverPRW.xbm \
+       western_bitmaps/silverPW.xbm \
+       western_bitmaps/silverRW.xbm \
+       western_bitmaps/silverW.xbm \
+        \
+       new_eastern_bitmaps/bigsolidR_l.xbm \
+       new_eastern_bitmaps/bigsolid_l.xbm \
+       new_eastern_bitmaps/bishopPR_l.xbm \
+       new_eastern_bitmaps/bishopP_l.xbm \
+       new_eastern_bitmaps/bishopR_l.xbm \
+       new_eastern_bitmaps/bishop_l.xbm \
+       new_eastern_bitmaps/goldR_l.xbm \
+       new_eastern_bitmaps/gold_l.xbm \
+       new_eastern_bitmaps/kingR_l.xbm \
+       new_eastern_bitmaps/king_l.xbm \
+       new_eastern_bitmaps/knightPR_l.xbm \
+       new_eastern_bitmaps/knightP_l.xbm \
+       new_eastern_bitmaps/knightR_l.xbm \
+       new_eastern_bitmaps/knight_l.xbm \
+       new_eastern_bitmaps/lancePR_l.xbm \
+       new_eastern_bitmaps/lanceP_l.xbm \
+       new_eastern_bitmaps/lanceR_l.xbm \
+       new_eastern_bitmaps/lance_l.xbm \
+       new_eastern_bitmaps/none_l.xbm \
+       new_eastern_bitmaps/pawnPR_l.xbm \
+       new_eastern_bitmaps/pawnP_l.xbm \
+       new_eastern_bitmaps/pawnR_l.xbm \
+       new_eastern_bitmaps/pawn_l.xbm \
+       new_eastern_bitmaps/rookPR_l.xbm \
+       new_eastern_bitmaps/rookP_l.xbm \
+       new_eastern_bitmaps/rookR_l.xbm \
+       new_eastern_bitmaps/rook_l.xbm \
+       new_eastern_bitmaps/silverPR_l.xbm \
+       new_eastern_bitmaps/silverP_l.xbm \
+       new_eastern_bitmaps/silverR_l.xbm \
+       new_eastern_bitmaps/silver_l.xbm \
+       new_eastern_bitmaps/smallsolidR_l.xbm \
+       new_eastern_bitmaps/smallsolid_l.xbm \
+       \
+       new_western_bitmaps/bishopPRW.xbm \
+       new_western_bitmaps/bishopPW.xbm \
+       new_western_bitmaps/bishopRW.xbm \
+       new_western_bitmaps/bishopW.xbm \
+       new_western_bitmaps/goldRW.xbm \
+       new_western_bitmaps/goldW.xbm \
+       new_western_bitmaps/kingRW.xbm \
+       new_western_bitmaps/kingW.xbm \
+       new_western_bitmaps/knightPRW.xbm \
+       new_western_bitmaps/knightPW.xbm \
+       new_western_bitmaps/knightRW.xbm \
+       new_western_bitmaps/knightW.xbm \
+       new_western_bitmaps/lancePRW.xbm \
+       new_western_bitmaps/lancePW.xbm \
+       new_western_bitmaps/lanceRW.xbm \
+       new_western_bitmaps/lanceW.xbm \
+       new_western_bitmaps/noneW.xbm \
+       new_western_bitmaps/pawnPRW.xbm \
+       new_western_bitmaps/pawnPW.xbm \
+       new_western_bitmaps/pawnRW.xbm \
+       new_western_bitmaps/pawnW.xbm \
+       new_western_bitmaps/rookPRW.xbm \
+       new_western_bitmaps/rookPW.xbm \
+       new_western_bitmaps/rookRW.xbm \
+       new_western_bitmaps/rookW.xbm \
+       new_western_bitmaps/silverPRW.xbm \
+       new_western_bitmaps/silverPW.xbm \
+       new_western_bitmaps/silverRW.xbm \
+       new_western_bitmaps/silverW.xbm
diff --git a/xshogi/Makefile.in b/xshogi/Makefile.in
deleted file mode 100644 (file)
index c015cad..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#
-# Makefile for XShogi, part of GNU shogi.
-#
-# Copyright (c) 1993 Matthias Mutz
-# Copyright (c) 1998, 1999 Michael C. Vanier and the Free Software Foundation
-#
-# XShogi 1.1 is based on XBoard 2.0
-# Copyright (c) 1992 Free Software Foundation
-#
-# This file is part of XShogi.
-#
-# XShogi is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 1, or (at your option)
-# any later version.
-#
-# XShogi is distributed in the hope that it will be useful,
-# but WITHOUT 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 XShogi; see the file COPYING.  If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-#
-# xshogi is the X Windows-based user interface for GNU Shogi.
-#
-
-SHELL           = /bin/sh
-INSTALL         = @INSTALL@
-INSTALL_DATA    = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-ROOT            = @top_srcdir@
-SRCDIR         = @srcdir@
-
-VPATH=$(SRCDIR)
-
-
-#
-# Installation directories.
-#
-
-prefix  = @prefix@
-BINDIR  = $(prefix)/bin
-MANDIR  = $(prefix)/man/man6
-
-
-#
-# Parser generator.
-#
-
-LEX    =   @LEX@
-YACC   =   @YACC@
-
-
-#
-# C compiler and compiler options.
-#
-
-CC          = @CC@
-XINCLUDES   = @X_CFLAGS@
-CWARNINGS   = @WARNINGS@
-CEXTRAFLAGS = @CEXTRAFLAGS@
-CFLAGS      = @CFLAGS@ $(CEXTRAFLAGS) $(XINCLUDES) -I$(ROOT) -I@top_builddir@
-LIBS        =
-XLIBS       = @X_LIBS@ -lXaw -lXmu -lXt -lXext -lX11
-LDFLAGS     = @LDFLAGS@ $(XLIBS) $(LIBS)
-
-
-OPT                   = @OPT@
-FIRST_SHOGI_PROGRAM   = -DFIRST_SHOGI_PROGRAM=\"@FIRST_SHOGI_PROGRAM@\"
-SECOND_SHOGI_PROGRAM  = -DSECOND_SHOGI_PROGRAM=\"@SECOND_SHOGI_PROGRAM@\"
-FIRST_HOST            = -DFIRST_HOST=\"@FIRST_HOST@\"
-SECOND_HOST           = -DSECOND_HOST=\"@SECOND_HOST@\"
-
-
-#
-# Targets.
-#
-
-all: xshogi
-
-xshogi: 
-       $(CC) -o xshogi xshogi.o parser.o $(CFLAGS) $(LDFLAGS) 
-
-xshogi.o: xshogi.c
-       $(CC) -c $< $(CWARNINGS) $(CFLAGS) \
-        $(OPT) $(FIRST_SHOGI_PROGRAM) $(SECOND_SHOGI_PROGRAM) \
-        $(FIRST_HOST) $(SECOND_HOST) 
-
-
-#
-# Regenerate the parser.  NOTE: scanner.c is never compiled; it
-# is #included into parser.y.
-#
-
-parser.o: parser.c
-       $(CC) $(CFLAGS) -I$(SRCDIR) -c $<
-
-parser.c: parser.y
-       $(YACC) $<
-       mv y.tab.c parser.c
-
-scanner.c: scanner.l
-       $(LEX) $<
-       mv lex.yy.c scanner.c
-
-
-#
-# Sources.
-#
-
-SOURCES = xshogi.c 
-
-
-#
-# Installation.
-#
-
-install: xshogi
-       strip xshogi
-       $(INSTALL_PROGRAM) -d $(BINDIR)
-       $(INSTALL_PROGRAM) -d $(MANDIR)
-       $(INSTALL_PROGRAM) xshogi $(BINDIR)
-       $(INSTALL_DATA)    $(ROOT)/doc/xshogi.6 $(MANDIR)
-
-
-#
-# Cleanup.
-#
-
-CLEANFILES = xshogi *.o parser.c y.tab.c scanner.c lex.yy.c
-
-clean:
-       for file in $(CLEANFILES); do \
-    if [ -f $$file ]; then rm $$file; fi; \
-       done
-
-
-#
-# Dependencies.
-#
-
-xshogi:     xshogi.o parser.o
-xshogi.o:   xshogi.c $(SRCDIR)/sysdeps.h $(SRCDIR)/xshogi.h $(SRCDIR)/bitmaps.h ../config.h
-parser.o:   parser.c $(SRCDIR)/xshogi.h
-parser.c:   parser.y scanner.c
-scanner.c:  scanner.l
-
index 0d2784b..809d3a4 100644 (file)
@@ -89,6 +89,8 @@ extern void SendToProgram(char *message, FILE *fp);
 extern void MakeMove(ShogiMove *move_type, int from_x, int from_y, 
                      int to_x, int to_y);
 
+int lines = 1, cols = 1;
+
 %}
 
 %start goal
@@ -198,10 +200,6 @@ extern void MakeMove(ShogiMove *move_type, int from_x, int from_y,
 %%
  
 
-
-#include "scanner.c"
-
-
 static void yyerror(char *errmsg)
 {                               
     if (strlen(token) > 0) 
@@ -219,6 +217,7 @@ static void yyerror(char *errmsg)
     exit(-1); 
 }
        
+extern FILE *yyin;
 
 void parseGameFile()
 { 
index ff3cb1f..92ec42f 100644 (file)
  * ------------------------------------------------------------------------
  *
  */
-static int lines = 1, cols = 1;
+
+#include "parser.h"
+
+extern int lines, cols;
+
 %}
 
 PIECE   [PLNSGBRK]