Index: /branches/New_Config_Format-branch/gsdl/INSTALL.TXT
===================================================================
--- /branches/New_Config_Format-branch/gsdl/INSTALL.TXT	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/INSTALL.TXT	(revision 1278)
@@ -0,0 +1,196 @@
+
+Greenstone installation instructions
+
+       Greenstone software:
+       
+     * Unix
+          + Source distribution
+          + Building collections
+     * Windows
+          + Source distribution
+          + Binary distributions
+          + Building collections
+       
+   Greenstone Collections
+   
+   Other software:
+     * Perl for Windows
+     * Apache web server
+       
+   For more information about how to use the software, consult The
+   Greenstone Digital Library Software manual.
+   
+Unix source distribution
+
+     * Download the latest version of the source distribution
+     * Extract the gzipped tar archive (tar xvzf gsdl-xx.x.tgz); this
+       will create a directory gsdl into which all software is installed
+     * In the gsdl directory, type ./configure
+     * When the configure script has finished running, type make
+     * Type make install, which copies the compiled library file into the
+       gsdl/cgi-bin directory, and also installs several executables that
+       are used to build collections into gsdl/bin/$GSDLOS
+     * Move both library and the gsdlsite.cfg configuration file to your
+       system's cgi-bin directory, so that the library runs as a cgi
+       script
+     * Edit the gsdlsite.cfg configuration file to suit your site. Set
+       the gsdlhome field to point to your gsdl directory. Other fields
+       that may need changing are httpprefix (the web path to the gsdl
+       directory) and httpimg (the path to gsdl/images)
+     * Build the Demo Collection that comes with the distribution
+     * Access the Greenstone Digital Library home page at
+       http://localhost/cgi-bin/library (replace "localhost" by the
+       server's URL if your Internet browser is not running on the server
+       computer)
+     * If the Demo Collection does not appear on the home page, run
+       library from the Unix command line to generate debugging
+       information to help you locate the problem
+     * Access the administration page at
+       http://localhost/cgi-bin/library?a=status
+       
+Windows source distribution
+
+     * Download the latest version of the source distribution--the same
+       source code as for Unix (though for Windows you may want to select
+       a zipped version)
+     * Extract the distribution using WinZip or a similar utility
+     * The default is to extract Greenstone directly into C:\ (i.e. a
+       directory C:\gsdl will be created into which all software is
+       installed)
+     * In the resulting gsdl directory type nmake win32.mak
+     * Type nmake /f win32.mak install, which copies the Web Library
+       version of library.exe into the gsdl\cgi-bin directory and the
+       Local Library version into the gsdl directory; it also installs
+       several executables that are used to build collections into
+       gsdl\bin\windows
+       
+Windows binary distributions
+
+       Three separate binary distributions are available for Windows: the
+       Local Library, the Web Library, and the Collection Builder. First
+       decide which distribution you want; then:
+       
+     * Download the latest version of the desired binary distribution
+     * Extract the distribution using WinZip or a similar utility
+     * The default is to extract Greenstone directly into C:\ (i.e. a
+       directory C:\gsdl will be created into which all software is
+       installed).
+     * If installing the Collection Builder as well as one of the
+       Libraries, be sure to extract both distributions in the same
+       directory. It is safe to allow files occurring in the second
+       distribution installed to overwrite those in the first.
+     * Follow the instructions below for the version you have downloaded:
+       Local Library
+          + Run the library.exe executable. This will automatically start
+            your Internet browser and load the Greenstone Digital Library
+            home page. The Demo collection should be accessible from this
+            page.
+          + Access the administration page at
+            http://localhost/cgi-bin/library?a=status
+       Web Library
+          + If Greenstone is not installed to C:\gsdl, edit the
+            gsdlsite.cfg configuration file (in the cgi-bin directory) by
+            setting the gsdlhome field to point to your gsdl directory
+          + If you do not already have a webserver, install Apache as
+            described below
+          + If using an existing webserver, check the gsdlsite.cfg
+            configuration file to ensure that httpprefix contains the web
+            path to the gsdl directory and httpimg contains the path to
+            gsdl\images
+          + The Greenstone Digital Library home page will appear as
+            http://localhost/cgi-bin/library (replace "localhost" by the
+            server's URL if your Internet browser is not running on the
+            server computer)
+          + If the Demo Collection does not appear on the home page, run
+            library.exe from the DOS prompt to generate debugging
+            information to help you locate the problem
+          + Access the administration page at
+            http://localhost/cgi-bin/library?a=status
+       Collection Builder
+          + If you do not already have Perl, you will need to install it
+            (see below)
+          + Download a test collection (e.g. the Demo Collection) and
+            build it
+          + Reload the Greenstone home page at
+            http://localhost/cgi-bin/library
+          + If the Demo Collection does not appear on the home page, run
+            library.exe from the DOS prompt to generate debugging
+            information to help you locate the problem
+       
+Greenstone Collections
+
+     * Install Greenstone as described above
+     * Download the required collection. Collection distributions with
+       filenames like ***_prebuilt.zip are pre-built collections. All
+       others will require building.
+     * Extract the .zip or .tgz file to your gsdl/collect directory
+     * Build the collection if it was not pre-built
+       
+   Once a new collection has been built, Greenstone will automatically
+   notice it and include it on the home page (when you click Reload).
+   
+   Building Greenstone Collections on Unix
+     * Source setup.bash or setup.csh from within the gsdl directory to
+       set up environment variables and path (e.g. source setup.bash)
+     * Note that pwd is used to set $GSDLHOME. If you need to be able to
+       source setup.bash or setup.csh from a directory other than gsdl
+       (e.g. from your .profile or .bashrc) you will need to edit the
+       script.
+     * Run build colname, where colname is the directory name of your
+       collection (e.g. demo).
+       
+   Building Greenstone Collections on Windows
+     * Make sure the setup.bat batch file is correct (i.e. that it sets
+       the GSDLHOME environment variable to the correct path of your gsdl
+       directory)
+     * run setup.bat
+     * Run build colname, where colname is the directory name of your
+       collection (e.g. demo).
+       
+   To find out more about building collections, consult The Greenstone
+   Digital Library Software manual.
+   
+Perl for Windows
+
+     * Download Perl (pre-5.6 version)
+     * Doubleclick the self-extracting executable and follow instructions
+       
+The Apache Webserver
+
+     * Download the latest version of the Apache distribution
+     * Doubleclick the self-extracting executable and follow instructions
+     * Configure Apache for use with Greenstone by adding the following
+       to your Apache server's httpd.conf configuration file (which
+       resides in the Apache conf directory)
+     * Existing server configurations may need to be configured
+       differently--see your system administrator if necessary
+         _____________________________________________________________
+       
+       # Some NT installations complain about an inability to work
+       ServerName
+       # out for themselves -- on most systems you can leave it commented
+       out.
+       # "localhost" should be replaced by www.yourserver.com if you plan
+       # to serve Greenstone to anyone other than the local machine.
+       # ServerName localhost
+       # Make cgi-bin point to your Greenstone cgi-bin directory.
+       # Note the forward
+       # slashes (/) instead of standard Windows
+       # backslashes (\) -- a hangover from Apache's Unix roots.
+       ScriptAlias /cgi-bin/ "c:/gsdl/cgi-bin/"
+       <Directory "c:/gsdl/cgi-bin">
+       AllowOverride None
+       Options None
+       </Directory>
+       # DocumentRoot points to your Greenstone root directory.
+       # Make sure that httpd.conf doesn't contain any other DocumentRoot
+       # directives -- if they come after this they'll override it
+       DocumentRoot "c:/gsdl"
+       <Directory "c:/gsdl">
+       Allow from All
+       </Directory>
+       # Redirect http://localhost to http://localhost/cgi-bin/library
+       # "localhost" should be replaced by www.yourserver.com if you plan
+       # to serve Greenstone to anyone other than the local machine.
+       Redirect /index.html http://localhost/cgi-bin/library
+         _____________________________________________________________
Index: /branches/New_Config_Format-branch/gsdl/README.TXT
===================================================================
--- /branches/New_Config_Format-branch/gsdl/README.TXT	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/README.TXT	(revision 1278)
@@ -0,0 +1,179 @@
+   
+The Greenstone software
+
+       Here we explain the software packages and information collections
+       in the Greenstone Digital Library software that you can download
+       and run on your own computer. Installation instructions for each
+       version of the software are given separately.
+       Greenstone is open-source software, distributed under the terms of
+       the GNU General Public License.
+       For more information about how to use the software, read The
+       Greenstone Digital Library Software manual (PDF format, 570 Kb).
+       This document also describes how to obtain associated software,
+       that is also freely available--ActiveState Perl and the Apache
+       Webserver.
+       
+Greenstone Distributions
+
+       Versions of Greenstone are available for
+       
+     * Unix
+          + Source distribution
+     * Windows
+          + Source distribution
+          + Binary distributions
+               o Local Library
+               o Web Library
+               o Collection Builder
+       
+   and you can also download some
+   
+     * Greenstone Collections
+       
+   All distributions are downloaded using the ftp protocol. The
+   directories contain old versions too, but we recommend that you always
+   download the latest release.
+   
+Unix source distribution
+
+   Greenstone has been developed and thoroughly tested on Linux systems.
+       It has also been compiled and had some testing on SunOS 5.6.
+       Please tell us if you port it to other flavors of Unix. Currently,
+       only a source distribution is available for Unix (let us know if
+       you need Unix binaries).
+       
+   In order to compile the Greenstone source on Unix, you will need
+     * GCC, the Gnu C++ compiler. Greenstone makes extensive use of the
+       C++ standard template library (we've found it to be broken on some
+       older versions of GCC; please tell us if you have STL problems)
+     * GDBM, the Gnu database manager (www.gnu.org)
+       
+   In order to run the Greenstone software, you will also need
+     * Perl (version 5 or higher) (www.gnu.org)
+     * Webserver software, e.g. Apache (www.apache.org)
+       
+   Most Unix installations will already have all that is required.
+   
+Windows source distribution
+
+       The source code is the same for Windows as for Unix, but the
+       installation instructions are different. Greenstone has currently
+       only been compiled on Windows using Microsoft Visual C++ 4.2 (we
+       use this version to retain compatibility with Windows 3.x). Minor
+       problems may occur with compilers other than VC++ 4.2--these will
+       be sorted out very soon for VC++ 6.0 and various Windows ports of
+       GNU GCC.
+       
+   In order to compile the Greenstone source on Windows, you will need
+     * Microsoft Visual C++ 4.2
+     * STL, the C++ standard template library (newer versions of VC++ and
+       GCC come with STL included) (www.sgi.com/Technology/STL)
+       
+   The GDBM source is included in the Greenstone source distribution.
+   
+   In order to run the Greenstone software, you will also need
+     * Perl (we recommend ActivePerl, see below)
+     * Webserver software (we recommend Apache, see below)
+       
+Windows binary distributions
+
+       There are three separate binary distributions for Windows: the
+       Local Library, the Web Library, and the Collection Builder.
+       Local Library. This enables any Windows computer to serve
+       pre-built Greenstone collections. The package includes the Demo
+       Collection; other collections can be downloaded in pre-built form.
+       The software is the same as that used on Greenstone CD-ROMs.
+       The Local Library is intended for use on standalone computers or
+       computers that do not already have webserver software. It contains
+       a built-in webserver, with limited web-serving configurability, so
+       that other computers on the same network can also access the
+       library.
+       
+   In order to construct new Greenstone collections, you will also need
+     * Collection Builder
+       
+   Web Library. This enables any computer with an existing webserver
+   (e.g. Apache) to serve pre-built Greenstone collections. The package
+   includes the Demo Collection; other collections can be downloaded in
+   pre-built form.
+   
+   The Web Library differs from the Local Library because the Local
+   Library is intended for computers that do not already have webserver
+   software.
+   
+   In order to run the Web Library, you will also need
+     * Webserver software (we recommend Apache, see below)
+       
+   In order to construct new Greenstone collections, you will also need
+     * Collection Builder
+       
+   Collection Builder. This allows you to build collections containing
+   material of your choice. Once built, collections can be served by
+   either the Local Library or the Web Library package. Several NZDL
+   collections can be downloaded in unbuilt form (see below) and built
+   using the Collection Builder.
+   
+   This package does not include any collections. You need to download a
+   collection (e.g. the Demo Collection) in order to try it out.
+   
+   In order to run the Collection Builder, you will also need
+     * Perl (we recommend ActivePerl, see below)
+       
+   In order to serve any collections you build, you will also need
+     * Local Library or Web Library package
+       
+Associated Software
+
+       Perl. We recommend ActivePerl from www.activestate.com
+       It seems that newer versions (Perl 5.6) do not work with the
+       Greenstone building programs: accordingly, you should download a
+       pre-5.6 version. (Whether this is a bug in our code, in
+       ActiveState's port of Perl 5.6, or in Perl 5.6 itself, is
+       difficult to say.) Please tell us any information on which Perl
+       ports work and which don't.
+       
+   Apache Webserver. Apache is free, and easy to install.
+   
+Greenstone Collections
+
+   Several of the collections on the NZDL website are available for
+       download, either in pre-built or unbuilt form.
+       
+   Note: on Windows, you need the Collection Builder package to make use
+   of unbuilt collections.
+   
+   The following collections are currently available
+   
+   Arabic Demonstration Collection arabic 4.2 Mb
+   Bibliotheque pour le developpement ... tulane 340 Mb
+   Chinese Demonstration Collection chinese 0.47 Mb
+   Collection on Critical Global Issues unu 71 Mb
+   Collection on Critical Global Issues 2 ccgi 102 Mb
+   Computer Science Bibliographies csbib 112 Mb
+   Computer Science Technical Reports cstr 1800 Mb
+   Demo Collection demo 2.5 Mb
+   Food and Nutrition Library fnl 98 Mb
+   HCI Bibliography hcibib 4.8 Mb
+   Humanity Development Library hdl 387 Mb
+   Indigenous Peoples Collection ipc 3.6 Mb
+   Mäori Newspapers niupepa 659 Mb
+   Medical and Health Library mhl 73 Mb
+   Project Gutenberg Collection gberg 428 Mb
+   Sahel Point Doc unesco 78 Mb
+   The Computists' Weekly tcc 5.0 Mb
+   Tidbits tidbits 5.4 Mb
+   Virtual Disaster Library paho 73 Mb
+   Women's History Collection whist 12 Mb
+   World Environment Library envl 220 Mb
+   Youth Oral History collection ohist 421 Mb
+       
+Bugs
+
+   Please report bugs or installation problems to
+       greenstone@cs.waikato.ac.nz
+       
+              -----------------------------------------------
+                                      
+   New Zealand Digital Library Project
+   Department of Computer Science, University of Waikato, New Zealand
+   April 2000
Index: /branches/New_Config_Format-branch/gsdl/WIN32cfg.h
===================================================================
--- /branches/New_Config_Format-branch/gsdl/WIN32cfg.h	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/WIN32cfg.h	(revision 1278)
@@ -0,0 +1,163 @@
+/* config.h.  Generated automatically by configure.  */
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Define if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+/* #undef _ALL_SOURCE */
+#endif
+
+/* Define if using alloca.c.  */
+/* #undef C_ALLOCA */
+
+/* Define to empty if the keyword does not work.  */
+/* #undef const */
+
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems.  */
+/* #undef CRAY_STACKSEG_END */
+
+/* Define if you have alloca, as a function or macro.  */
+#define HAVE_ALLOCA 1
+
+/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
+/* #define HAVE_ALLOCA_H 1 */
+
+/* Define if you don't have vprintf but do have _doprnt.  */
+/* #undef HAVE_DOPRNT */
+
+/* Define if you have the vprintf function.  */
+#define HAVE_VPRINTF 1
+
+/* Define if on MINIX.  */
+/* #undef _MINIX */
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+/* #undef off_t */
+
+/* Define if the system does not provide POSIX.1 features except
+   with this defined.  */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define if you need to in order for stat and other things to work.  */
+/* #undef _POSIX_SOURCE */
+
+/* Define as the return type of signal handlers (int or void).  */
+#define RETSIGTYPE void
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+/* #undef size_t */
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown
+ */
+/* #undef STACK_DIRECTION */
+
+/* Define if you have the ANSI C header files.  */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>.  */
+/* #define TIME_WITH_SYS_TIME 1 */
+
+/* Define if your <sys/time.h> declares struct tm.  */
+/* #undef TM_IN_SYS_TIME */
+
+/* Define to the name of the distribution.  */
+#define PACKAGE "mg"
+
+/* Define to the version of the distribution.  */
+#define VERSION "1.2"
+
+/* Define to 1 if you have the valloc function.  */
+/* #define HAVE_VALLOC 1 */
+
+/* Define to 1 if ANSI function prototypes are usable.  */
+#define PROTOTYPES 1
+
+ 
+/* Define to 1 for better use of the debugging malloc library.  See
+   site ftp.antaire.com in antaire/src, file dmalloc/dmalloc.tar.gz.  */
+/* #undef WITH_DMALLOC */
+
+ 
+/* Define to 1 if GNU regex should be used instead of GNU rx.  */
+/* #undef WITH_REGEX */
+
+/* Some braindead header files do not have the requ'd function declarations */
+#define HAVE_FGETC_DECL 1
+#define HAVE_FREAD_DECL 1
+
+/* See if have this field in the prstatus_t structure */
+/* It stores the size of the process heap */
+/* #define HAVE_PR_BRKSIZE 1 */
+
+/* Define if you have the ftime function.  */
+/* #undef HAVE_FTIME */
+
+/* Define if you have the getpagesize function.  */
+/* #undef HAVE_GETPAGESIZE */
+
+/* Define if you have the getrusage function.  */
+/* #undef HAVE_GETRUSAGE */
+
+/* Define if you have the mallinfo function.  */
+/* #undef HAVE_MALLINFO */
+
+/* Define if you have the select function.  */
+#define HAVE_SELECT 1
+
+/* Define if you have the setbuffer function.  */
+/* #undef HAVE_SETBUFFER */
+
+/* Define if you have the strftime function.  */
+#define HAVE_STRFTIME 1
+
+/* Define if you have the strtol function.  */
+#define HAVE_STRTOL 1
+
+/* Define if you have the times function.  */
+/* #define HAVE_TIMES 1 */
+
+/* Define if you have the valloc function.  */
+/* #define HAVE_VALLOC 1 */
+
+/* Define if you have the <dirent.h> header file.  */
+/* #define HAVE_DIRENT_H 1 */
+
+/* Define if you have the <fcntl.h> header file.  */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <limits.h> header file.  */
+#define HAVE_LIMITS_H 1
+
+/* Define if you have the <memory.h> header file.  */
+#define HAVE_MEMORY_H 1
+
+/* Define if you have the <ndir.h> header file.  */
+/* #undef HAVE_NDIR_H */
+
+/* Define if you have the <string.h> header file.  */
+#define HAVE_STRING_H 1
+
+/* Define if you have the <sys/dir.h> header file.  */
+/* #undef HAVE_SYS_DIR_H */
+
+/* Define if you have the <sys/ndir.h> header file.  */
+/* #undef HAVE_SYS_NDIR_H */
+
+/* Define if you have the <sys/procfs.h> header file.  */
+/* #define HAVE_SYS_PROCFS_H 1 */
+
+/* Define if you have the <sys/time.h> header file.  */
+/* #define HAVE_SYS_TIME_H 1 */
+
+/* Define if you have the <unistd.h> header file.  */
+/* #define HAVE_UNISTD_H 1 */
+
+/* Define if you have the m library (-lm).  */
+#define HAVE_LIBM 1
Index: /branches/New_Config_Format-branch/gsdl/bin/script/build
===================================================================
--- /branches/New_Config_Format-branch/gsdl/bin/script/build	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/bin/script/build	(revision 1278)
@@ -0,0 +1,145 @@
+#!/usr/bin/perl
+
+# This perl script may be called directly or by running build.bat on
+# windows (build.bat is in bin\windows)
+
+BEGIN {
+
+    die "GSDLHOME not set - did you remember to source setup.bash (unix) or " .
+	"run setup.bat (windows)?\n" unless defined $ENV{'GSDLHOME'};
+    die "GSDLOS not set - did you remember to source setup.bash (unix) or " .
+	"run setup.bat (windows)?\n" unless defined $ENV{'GSDLOS'};
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
+}
+
+use parsargv;
+use util;
+
+
+if (!parsargv::parse(\@ARGV, 
+		     'buildtype/^(build|import)$/import', \$buildtype,
+		     'maxdocs/^\-?\d+/-1', \$maxdocs)) {
+    &print_usage();
+    die "\n";
+}
+
+my ($collection) = @ARGV;
+
+if (!defined $collection || $collection !~ /\w/) {
+    print STDERR "You must specify a collection to build\n";
+    &print_usage();
+    die "\n";
+}
+
+if ($maxdocs == -1) {
+    $maxdocs = "";
+} else {
+    $maxdocs = "-maxdocs $maxdocs";
+}
+
+
+my $collectdir = &util::filename_cat ($ENV{'GSDLHOME'}, "collect", $collection);
+my $importdir = &util::filename_cat ($collectdir, "import");
+my $archivedir = &util::filename_cat ($collectdir, "archives");
+my $buildingdir = &util::filename_cat ($collectdir, "building");
+my $indexdir = &util::filename_cat ($collectdir, "index");
+my $bindir = &util::filename_cat ($ENV{'GSDLHOME'}, "bin");
+
+&main();
+
+sub print_usage {
+    print STDERR "\n  usage: $0 [options] collection-name\n\n";
+    print STDERR "  options:\n";
+    print STDERR "   -buildtype build|import If 'build' attempt to build directly\n";
+    print STDERR "                           from archives directory (bypassing import\n";
+    print STDERR "                           stage). Defaults to 'import'\n";
+    print STDERR "   -maxdocs number         Maximum number of documents to build\n\n";
+}
+
+sub main {
+
+    if (-e &util::filename_cat ($archivedir, "archives.inf")) {
+	if (&has_content ($importdir)) {
+	    if ($buildtype eq "build") {
+		&gsdl_build();
+	    } else {
+		&gsdl_import();
+		&gsdl_build();
+	    }
+	} else {
+	    # there are archives but no import, build directly from archives
+	    print STDERR "build: no import material was found, building directly\n";
+	    print STDERR "       from archives\n";
+	    &gsdl_build();
+	}
+    } else {
+	if (&has_content ($importdir)) {
+	    if ($buildtype eq "build") {
+		print STDERR "build: can't build directly from archives as no\n";
+		print STDERR "       imported archives exist (did you forget to\n";
+		print STDERR "       move the contents of $collection/import to\n";
+		print STDERR "       collection/archives?)\n";
+	    }
+	    &gsdl_import();
+	    &gsdl_build();
+	} else {
+	    # no import or archives
+	    print STDERR "build: ERROR: The $collection collection has no import\n";
+	    print STDERR "       or archives data. Try downloading an unbuilt version\n";
+	    print STDERR "       of the collection from www.nzdl.org\n";
+	    die "\n";
+	}
+    }
+}
+
+sub gsdl_import {
+
+    print STDERR "importing the $collection collection\n\n";
+
+    my $import = &util::filename_cat ($bindir, "script", "import.pl");
+    system ("perl $import -removeold $maxdocs $collection");
+    if (-e &util::filename_cat ($archivedir, "archives.inf")) {
+	print STDERR "$collection collection imported successfully\n\n";
+    } else {
+	die "\nimport.pl failed\n";
+    }
+}
+
+sub gsdl_build {
+
+    print STDERR "building the $collection collection\n\n";
+
+    my $buildcol = &util::filename_cat ($bindir, "script", "buildcol.pl");
+    system ("perl $buildcol $maxdocs $collection");
+    if (-e &util::filename_cat ($buildingdir, "text", "$collection.ldb") ||
+	-e &util::filename_cat ($buildingdir, "text", "$collection.bdb")) {
+	print STDERR "$collection collection built successfully\n\n";
+    } else {
+	die "\nbuildcol.pl failed\n";
+    }
+
+    # replace old indexes with new ones
+    if (&has_content ($indexdir)) {
+	print STDERR "removing old indexes\n";
+	&util::rm_r ($indexdir);
+    }
+    rmdir ($indexdir) if -d $indexdir;
+    rename ($buildingdir, $indexdir);
+}
+
+sub has_content {
+    my ($dir) = @_;
+
+    if (!-d $dir) {return 0;}
+
+    opendir (DIR, $dir) || return 0;
+    my @files = readdir DIR;
+    close DIR;
+    
+    foreach my $file (@files) {
+	if ($file !~ /^\.{1,2}$/) {
+	    return 1;
+	}
+    }
+    return 0;
+}
Index: /branches/New_Config_Format-branch/gsdl/bin/script/filecopy.pl
===================================================================
--- /branches/New_Config_Format-branch/gsdl/bin/script/filecopy.pl	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/bin/script/filecopy.pl	(revision 1278)
@@ -0,0 +1,162 @@
+#!/usr/bin/perl -w
+
+###########################################################################
+#
+# filecopy.pl --
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+
+# This program will "download" the specified files/directories
+
+BEGIN {
+    die "GSDLHOME not set\n" unless defined $ENV{'GSDLHOME'};
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
+}
+
+use util;
+use File::stat;
+
+sub print_usage
+{
+    print STDERR "\n  usage: $0 [filenames] [directories] collection-name\n\n";
+}
+
+
+sub download_files
+{
+    my $dirname = pop(@_);
+    my $full_importname 
+	= &util::filename_cat($ENV{'GSDLHOME'},"collect",$dirname,"import");
+
+    # split argv into 2 lists: files and directories
+    my (@files,@dirs) = ((),());
+    my $a;
+    foreach $a (@_)
+    {
+	$a =~ s/^\"//;
+	$a =~ s/\"$//;
+
+	if (-e $a)
+	{
+	    if (-d $a)
+	    {
+		push(@dirs,$a);
+	    }
+	    else
+	    {
+		push(@files,$a);
+	    }
+	}
+	else
+	{
+	    print STDERR "Error: filename '$a' does not exist\n";
+	}
+    }
+    
+    if (scalar(@files)>0)
+    {
+	my $f;	
+	foreach $f (@files)
+	{
+	    my $src_file = $f;
+	    my $dst_file = &get_dst_dir ($full_importname,$f);
+
+	    my $do_copy = "no";
+	    if (-e $dst_file)
+	    {
+		# compare file dates
+		my $src_stat = stat($src_file);
+		my $dst_stat = stat($dst_file);
+
+		if ($src_stat->mtime > $dst_stat->mtime)
+		{
+		    $do_copy = "yes";
+		}
+	    }
+	    else
+	    {
+		$do_copy = "yes";
+	    }
+
+	    if ($do_copy eq "yes")
+	    {
+		print STDOUT "Copying $src_file-->$dst_file\n";
+		&util::cp($src_file,$dst_file);
+	    }
+	}
+    }
+
+
+    if (scalar(@dirs)>0)
+    {
+	my $d;	
+	foreach $d (@dirs)
+	{
+	    my $src_dir = $d;
+	    my $dst_dir = &get_dst_dir ($full_importname, $d);
+	    if (!-e $dst_dir)
+	    {
+		# create it if it doesn't exist
+		&util::mk_all_dir($dst_dir);
+	    }
+
+	    # read in dir
+            if (!opendir (INDIR, $d)) 
+	    {
+                print STDERR "Error: Could not open directory $d\n";
+            } 
+	    else 
+	    {
+                my @sub_files = grep (!/^\.\.?$/, readdir (INDIR));
+                closedir (INDIR);
+
+		map { $_ = &util::filename_cat($d,$_); } @sub_files;
+		download_files(@sub_files,$dirname);
+	    }
+	}
+    }
+}
+
+sub main
+{
+    if (scalar(@ARGV)<2)
+    {
+	print_usage();
+	exit(1);
+    }
+
+    download_files(@ARGV);
+    return 0;
+}
+
+sub get_dst_dir {
+    my ($full_importname, $dir) = @_;
+
+    if ($ENV{'GSDLOS'} eq "windows") {
+	# don't want windows filenames like c:\gsdl\...\import\c:\dir
+	$dir =~ s/^[a-z]:[\\\/]//i;
+    }
+    return &util::filename_cat($full_importname,$dir);
+}
+
+&main();
Index: /branches/New_Config_Format-branch/gsdl/bin/script/pluginfo.pl
===================================================================
--- /branches/New_Config_Format-branch/gsdl/bin/script/pluginfo.pl	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/bin/script/pluginfo.pl	(revision 1278)
@@ -0,0 +1,106 @@
+#!/usr/bin/perl -w
+
+###########################################################################
+#
+# pluginfo.pl --
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+
+# This program will print info about a plugin
+
+BEGIN {
+    die "GSDLHOME not set\n" unless defined $ENV{'GSDLHOME'};
+    die "GSDLOS not set\n" unless defined $ENV{'GSDLOS'};
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib/plugins");
+}
+
+use strict;
+use plugin;
+use util;
+use parsargv;
+
+sub print_usage {
+    print STDERR "\n  usage: $0 [options] plugin\n\n";
+    print STDERR "  options:\n";
+    print STDERR "   -collect collection-name  Giving a collection name will make pluginfo.pl\n";
+    print STDERR "                             look in collect/collection-name/perllib/plugins\n";
+    print STDERR "                             for plugin first. If it doesn't find it there\n";
+    print STDERR "                             it will look in the general perllib/plugins\n";
+    print STDERR "                             directory\n\n";
+}
+
+
+&main ();
+
+sub main {
+    my $collect = "";
+    if (!parsargv::parse(\@ARGV, 'collect.*/', \$collect)) {
+	&print_usage();
+	die "\n";
+    }
+
+    my $plugin = shift (@ARGV);
+    if (!defined $plugin || $plugin eq "") {
+	print STDERR "You must provide a plugin name\n";
+	&print_usage();
+	die "\n";
+    }
+
+    if ($collect ne "") {
+	$ENV{'GSDLCOLLECTDIR'} = &util::filename_cat ($ENV{'GSDLHOME'}, "collect", $collect);
+    } else {
+	$ENV{'GSDLCOLLECTDIR'} = $ENV{'GSDLHOME'};
+    }
+
+    my $pluginfo = &plugin::load_plugins ([[$plugin]]);
+
+    my $plugobj = shift @$pluginfo;
+
+    print STDERR "\n$plugin info:\n\n";
+	
+    print STDERR "Options may be passed to any plugin by including them in your collect.cfg\n";
+    print STDERR "configuration file.\n\n";
+
+    print STDERR "Plugins may take two types of options:\n\n";
+
+    print STDERR "General options are defined within the base class (BasPlug.pm) and are\n";
+    print STDERR "inherited by any plugin that has been correctly derived from BasPlug.\n\n";
+
+    print STDERR "Specific options are defined within the plugin itself and are available\n";
+    print STDERR "only to this particular plugin.\n\n";
+
+    print STDERR "$plugin takes the following specific options:\n";
+    $plugobj->print_usage();
+
+    print STDERR "$plugin takes the following general options\n";
+    &BasPlug::print_general_usage($plugin);
+
+    print STDERR "The default process_exp for $plugin is\n";
+    print STDERR "\"" . $plugobj->get_default_process_exp() . "\"\n\n";
+
+    print STDERR "The default block_exp for $plugin is\n";
+    print STDERR "\"" . $plugobj->get_default_block_exp() . "\"\n\n";
+
+}
+
Index: /branches/New_Config_Format-branch/gsdl/bin/script/urlcopy.pl
===================================================================
--- /branches/New_Config_Format-branch/gsdl/bin/script/urlcopy.pl	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/bin/script/urlcopy.pl	(revision 1278)
@@ -0,0 +1,183 @@
+#!/usr/bin/perl -w
+
+###########################################################################
+#
+# urlcopy.pl --
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+
+# This program will download the specified urls (http:, ftp: and file:)
+
+BEGIN {
+    die "GSDLHOME not set\n" unless defined $ENV{'GSDLHOME'};
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
+
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib/cpan/lib");
+    $ENV{'PATH'} = "$ENV{'GSDLHOME'}/perllib/cpan/bin:$ENV{'PATH'}";
+}
+
+use util;
+use File::Basename;
+
+sub print_usage
+{
+    print STDERR "\n  usage: $0 [urls] collection-name\n\n";
+}
+
+sub main
+{
+    if (scalar(@ARGV)<2)
+    {
+	print_usage();
+	exit(1);
+    }
+
+    my $dirname = pop(@ARGV);
+    my $full_importname 
+	= &util::filename_cat($ENV{'GSDLHOME'},"collect",$dirname,"import");
+
+    mkdir ($full_importname, 0777) unless -e $full_importname;
+
+    # split argv into 3 lists: http, ftp and file
+    my (@http,@ftp,@file) = ((),(),());
+    my $a;
+    foreach $a (@ARGV)
+    {
+	$a =~ s/^\"//;
+	$a =~ s/\"$//;
+
+	if ($a =~ m/^http:/i)
+	{
+	    push(@http,$a);
+	}
+	elsif ($a =~ m/^ftp:/i)
+	{
+	    push(@ftp,$a);
+	}
+	elsif ($a =~ m/^file:/i)
+	{
+	    push(@file,$a);
+	}
+	else
+	{
+	    print STDERR "URL argument not supported: $a\n";
+	    print STDERR "Ingoring argument.\n";
+	}
+    }
+    
+    if (scalar(@http)>0)
+    {
+	my $w3mircfg_filename
+	    = &util::filename_cat($ENV{'GSDLHOME'},"tmp","$dirname.w3mir");
+
+	# create cfg file
+	open(CFGOUT,">$w3mircfg_filename")
+	    || die "Unable to open $w3mircfg_filename: $!";
+	print CFGOUT "Options: recurse\n\n";
+	
+	my $first = 1;
+	my $a;	
+	foreach $a (@http)
+	{
+	    my $src_url = $a;
+	    my $dst_dir = $a;
+	    $dst_dir =~ s/^http://i;
+	    $dst_dir = &util::filename_cat($full_importname,$dst_dir);
+
+	    if ($src_url !~ m/\/$/)
+	    {
+		# last name is a file => strip off filename
+		$dst_dir = &File::Basename::dirname($dst_dir);
+	    }
+	    if ($first)
+	    {
+		print CFGOUT "URL:        $src_url $dst_dir\n";
+		$first = 0;
+	    }
+	    else
+	    {
+		print CFGOUT "Also-queue: $src_url $dst_dir\n";
+	    }
+	}	    
+	print CFGOUT "\nFixup: run\n";
+	close(CFGOUT);
+
+	my $cmd = "cd $full_importname; ";
+	$cmd .= "w3mir.pl -cfgfile $w3mircfg_filename";
+
+	my $status = system($cmd);
+	$status /= 256;
+	if ($status != 0)
+	{
+	    print STDERR "An error was encountered executing: $cmd\n";
+	    exit($status);
+	}
+    }
+
+    if (scalar(@ftp)>0)
+    {
+	my $cmd = "cd $full_importname; ";
+	$cmd .= "ncftp ";
+	my $a;
+	foreach $a (@ftp)
+	{
+	    $a = "$a/" if ($a !~ m/\/$/);
+	    $cmd .= " \"$a/*\"";
+	}
+	my $status = system($cmd);
+	$status /= 256;
+	if ($status != 0)
+	{
+	    print STDERR "An error was encountered executing: $cmd\n";
+	    exit($status);
+	}
+
+    }
+
+    if (scalar(@file)>0)
+    {
+	my $cmd = "filedownload.pl";
+	my $a;
+	foreach $a (@file)
+	{
+	    $cmd .= " \"$a\"";
+	}
+	$cmd .= " $dirname";
+
+	my $status = system($cmd);
+	$status /= 256;
+	if ($status != 0)
+	{
+	    print STDERR "An error was encountered executing: $cmd\n";
+	    exit($status);
+	}
+    }
+
+    return 0;
+}
+
+&main();
+
+
+
+
Index: /branches/New_Config_Format-branch/gsdl/cgi-bin/GSDLHOME.pm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/cgi-bin/GSDLHOME.pm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/cgi-bin/GSDLHOME.pm	(revision 1278)
@@ -0,0 +1,36 @@
+package GSDLHOME;
+
+BEGIN {
+
+    if (!defined $ENV{'GSDLHOME'}) {
+	# read gsdlhome from gsdlsite.cfg
+	open (GSDLSITE, "gsdlsite.cfg") || die 
+	    "GSDLHOME.pm: unable to open gsdlsite.cfg\n";
+	my $line = "";
+	while (defined ($line = <GSDLSITE>)) {
+	    if ($line =~ /^gsdlhome\s+(.*?)\s*$/) {
+		$ENV{'GSDLHOME'} = $1;
+		last;
+	    }
+	}
+	die "GSDLHOME.pm: couldn't find gsdlhome field in gsdlsite.cfg\n"
+	    unless defined $ENV{'GSDLHOME'};
+    }
+
+    # just in case GSDLHOME has a slash on the end which would cause
+    # double slashes below
+    $ENV{'GSDLHOME'} =~ s/[\/\\]+$//;
+
+    $ENV{'GSDLOS'} = $^O;
+
+    if ($ENV{'GSDLOS'} =~ /(win|dos)/i) {
+	$ENV{'GSDLOS'} = 'windows';
+    }
+    
+    $ENV{'PATH'} .= ":$ENV{'GSDLHOME'}/bin/script";
+    $ENV{'PATH'} .= ":$ENV{'GSDLHOME'}/bin/$ENV{'GSDLOS'}";
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
+    unshift (@INC, "$ENV{'GSDLHOME'}/perllib/cpan");
+}
+
+1;
Index: /branches/New_Config_Format-branch/gsdl/etc/BUILDVERSION
===================================================================
--- /branches/New_Config_Format-branch/gsdl/etc/BUILDVERSION	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/etc/BUILDVERSION	(revision 1278)
@@ -0,0 +1,1 @@
+build version: 2.1
Index: /branches/New_Config_Format-branch/gsdl/macros/Chktrans.pl
===================================================================
--- /branches/New_Config_Format-branch/gsdl/macros/Chktrans.pl	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/macros/Chktrans.pl	(revision 1278)
@@ -0,0 +1,145 @@
+#! /usr/bin/perl -w
+
+use strict;
+
+my @languages = ("chinese", "french", "german", "maori");
+
+print "
+Chktrans.pl
+
+This file checks english.dm and english2.dm against 
+translations made in other languages.  It outputs 
+ whether the translation exists in each language,
+ what macros override the English (default) macros
+ what macros have not been translated,
+ what additional macros exist.
+
+Current languages:
+";
+
+foreach my $l (@languages) {
+    print " $l\n";
+}
+
+print "\nReading english.dm\n";
+
+open(E, "<english.dm");
+
+my $line;
+my $count = 0;
+my %macro;
+
+while (<E>) {
+    chomp;
+    $line = $_;
+
+    next unless ($line =~ /^_\w+_ +\{/);
+    
+    $line =~ s/ +\{.*//;
+    $macro{$line} = 1;
+    $count++;
+}
+
+print "Read $count macros.\n\n";
+
+my $file;
+
+foreach my $l (@languages) {
+    $file = "$l.dm";
+
+    print "=============================================\nLanguage: $l\n";
+
+    # make sure thwere is a translation for the language
+    if (!-e "$file") {
+	print "$file doesn't exist\n\n";
+	next;
+    }
+    
+    # read the macros in this language
+    print "Reading $file\n";
+    open(L, "<$file");
+    my (%lm, %lmnew, %lr, %lrnew);
+    my $lc = 0;
+    while (<L>) {
+	chomp;
+	$line = $_;
+	
+	next unless ($line =~ /^_\w+_/);
+	next unless ($line =~ /\{/);
+	
+	$line =~ s/ +\{.*//;
+	# There are four types of macro, the combos of:
+	#  With or without macro country code
+	#  Present or not present in %macro
+	if ($line =~ /\[/) {
+	    $line =~ s/ .*//;
+	    if (defined($macro{$line})) {
+		$lm{$line} = $line;
+	    } else {
+		$lmnew{$line} = $line;
+	    }
+	} else {
+	    if (defined($macro{$line})) {
+		$lr{$line} = $line;
+	    } else {
+		$lrnew{$line} = $line;
+	    }
+	}
+	$lc++;
+    }
+    close L;
+    print "Read $lc macros.\n\n";
+
+    # How many macros operate correctly
+    print (scalar keys %lm);
+    print" macros are translated from english to $l\n\n";
+   
+    # What are the new macros?
+    if (scalar keys %lmnew) {
+	print (scalar keys %lmnew);
+	print" macros are new $l macros with no eqivalents in english.dm:\n";
+	foreach my $m (sort (keys (%lmnew))) {
+	    print "$m ";
+	}
+	print "\n\n";
+    }
+
+    # What are the new macros?
+    if (scalar keys %lrnew) {
+	print (scalar keys %lrnew);
+	print" macros are new macros in english that do not appear in english.dm:\n";
+	foreach my $m (sort (keys (%lrnew))) {
+	    print "$m ";
+	}
+	print "\n\n";
+    }
+
+    # Which languages override their english counterparts?
+    if (scalar keys %lr) {
+	print (scalar keys %lr);
+	print" macros override equivalents in english.dm ";
+	print"(It doesn't matter if you override macros like widths, heights, and URLs):\n";
+	foreach my $m (sort (keys (%lr))) {
+	    print "$m ";
+	}
+	print "\n\n";
+    }
+
+    # Which macros in english.dm do not appear in the newfile?
+    my @missing = ();
+    foreach my $m (sort (keys (%macro))) {
+	next if defined($lm{$m});
+	push @missing, $m;
+    }
+    if (scalar @missing) {
+	print (scalar @missing);
+	print " macros in english.dm have no entry in $l.dm:\n";
+	foreach my $m (sort @missing) {
+	    print "$m ";
+	}
+	print "\n\n";
+    }
+
+    print "\n";
+
+}
Index: /branches/New_Config_Format-branch/gsdl/macros/french.dm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/macros/french.dm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/macros/french.dm	(revision 1278)
@@ -0,0 +1,956 @@
+######################################################################
+#
+# English Language text and icon macros 
+#
+######################################################################
+#
+# This is the main macro file for translation when creating an 
+# interface in another language.
+#
+# Under the 'text macros' comments are text macros of the form:
+# _macroname_ {macro value}
+# Everything between the {} is the text to be translated. This text 
+# may itself contain macros (i.e. characters other than space between
+# underscore characters, e.g. _about:numdocs_ or _textpage_). These
+# macro names occurring within text shouldn't be translated but should
+# be left as they are. Underscores or curly brackets occurring 
+# naturally within the text should be escaped with a leading backslash
+# (i.e. '\_', '\{' or '\}).
+#
+# Under the 'icons' comments are macros concerned with displaying
+# icons which themselves contain text.
+# Above each macro (or group of macros) for an icon is a comment line
+# that looks something like '## "HOME" ## top_nav_button ## chome ##'.
+# The first field of the comment ("HOME" in this case) is the text
+# that appears in the english version of the icon. This is the text
+# that must be translated, nothing needs to be done to the macros 
+# themselves. The other two fields of the comments are used by 
+# automatic icon generating software which reads the newly translated
+# file and generates appropriate icons.
+#
+# Comment lines (other than those described above) need not be 
+# translated (i.e. any lines beginning with '#', like this line).
+#
+# The simplest way to translate this file is to save it as something
+# else (e.g. french.dm) and work through translating all the text
+# macro values and icon comments.
+#
+######################################################################
+
+
+######################################################################
+# Global (base) package
+package Global
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textdefaultcontent_ [l=fr] {La page demandee n'a pu etre trouvee. Utilisez s'il vous plait
+le bouton 'retour' de votre navigateur ou le bouton 'principale' pour retourner
+a la Bibliotheque Numerique Greenstone.}
+
+_textdefaulttitle_ [l=fr] {Erreur GSDL}
+
+_collectionextra_ [l=fr] {Cette collection contient _about:numdocs_ documents.
+Sa derniere mise a jour a etait faite il y a _about:builddate_ jours.}
+
+_textimagecollection_ [l=fr] {}
+_textimageabout_ [l=fr] {Page a propos}
+_textimagehome_ [l=fr] {Page principale}
+_textimagehelp_ [l=fr] {Page d'aide}
+_textimagepref_ [l=fr] {Page de preferences}
+_textimagegreenstone_ [l=fr] {Logiciel de la Bibliotheque Numerique Greenstone}
+
+_textimagesearch_ [l=fr] {Recherche de termes specifiques}
+_textimageTitle_ [l=fr] {Naviguer a travers la liste alphabetique des titres}
+_textimageList_ [l=fr] {Naviguer a travers la liste des documents}
+_textimageCreator_ [l=fr] {Naviguer a travers la liste alphabetique des auteurs}
+_textimageSeries_ [l=fr] {Naviguer utilisant les numero}
+_textimageDate_ [l=fr] {Naviguer utilisant les dates}
+_textimageSubject_ [l=fr] {Naviguer par categorie de sujet}
+_textimageOrganization_ [l=fr] {Naviguer par organisation}
+_textimageHowto_ [l=fr] {Naviguer utilisant les categories comment faire}
+_textimageTopic_ [l=fr] {Naviguer utilisant les editions speciales a theme}
+_textimageBrowse_ [l=fr] {Naviguer}
+_textimagePeople_ [l=fr] {Naviguer par liste alphabetique de personnes}
+
+_texticontabsearchgreen_ [l=fr] {Rechercher}
+_texticontabdategreen_ [l=fr] {Dates}
+_texticontabseriesgreen_ [l=fr] {Series}
+_texticontabauthorgreen_ [l=fr] {Auteurs A-Z}
+_texticontabtitlegreen_ [l=fr] {Titres A-Z}
+_texticontablistgreen_ [l=fr] {Listing}
+_texticontabsubjectgreen_ [l=fr] {Sujets}
+_texticontaborggreen_ [l=fr] {Organisation}
+_texticontabhowgreen_ [l=fr] {Comment faire}
+_texticontabtopicgreen_ [l=fr] {Themes}
+_texticontabbrwsegreen_ [l=fr] {Naviguer}
+_texticontabPeoplegreen_ [l=fr] {Personnes A-Z}
+
+_texticontext_ [l=fr] {Voir le document}
+_texticonclosedbook_ [l=fr] {ouvrir ce document et voir son contenu}
+_texticonnext_ [l=fr] {vers la section suivante}
+_texticonprev_ [l=fr] {vers la section precedente}
+
+_page_ [l=fr] {page }
+_pages_ [l=fr] {pages}
+_of_ [l=fr] { de }
+_vol_ [l=fr] {Volume}
+_num_ [l=fr] {Nombre}
+
+_textmonth00_ [l=fr] {}
+_textmonth01_ [l=fr] {Janvier}
+_textmonth02_ [l=fr] {Fevrier}
+_textmonth03_ [l=fr] {Mars}
+_textmonth04_ [l=fr] {Avril}
+_textmonth05_ [l=fr] {Mai}
+_textmonth06_ [l=fr] {Juin}
+_textmonth07_ [l=fr] {Juillet}
+_textmonth08_ [l=fr] {Aout}
+_textmonth09_ [l=fr] {Septembre}
+_textmonth10_ [l=fr] {Octobre}
+_textmonth11_ [l=fr] {Novembre}
+_textmonth12_ [l=fr] {Decembre}
+
+_magazines_ [l=fr] {Magazines}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "PRINCIPALE" ## top_nav_button ## chome ##
+_httpiconchomeof_ [l=fr] {_httpimg_/fr/chomeof.gif}
+_httpiconchomeon_ [l=fr] {_httpimg_/fr/chomeon.gif}
+_widthchomex_ [l=fr] {72}
+_heightchomex_ [l=fr] {20}
+
+## "AIDE" ## top_nav_button ## chelp ##
+_httpiconchelpof_ [l=fr] {_httpimg_/fr/chelpof.gif}
+_httpiconchelpon_ [l=fr] {_httpimg_/fr/chelpon.gif}
+_widthchelpx_ [l=fr] {32}
+_heightchelpx_ [l=fr] {20}
+
+## "PREFERENCES" ## top_nav_button ## cpref ##
+_httpiconcprefof_ [l=fr] {_httpimg_/fr/cprefof.gif}
+_httpiconcprefon_ [l=fr] {_httpimg_/fr/cprefon.gif}
+_widthcprefx_ [l=fr] {83}
+_heightcprefx_ [l=fr] {20}
+
+## "aide" ## green_title ## h_help ##
+_httpiconhhelp_ [l=fr] {_httpimg_/fr/h\_help.gif}
+_widthhhelp_ [l=fr] {200}
+_heighthhelp_ [l=fr] {57}
+
+## "auteurs a-z" ## nav_bar_button ## tauth ##
+_httpicontauthgr_ [l=fr] {_httpimg_/fr/tauthgr.gif}
+_httpicontauthof_ [l=fr] {_httpimg_/fr/tauthof.gif}
+_httpicontauthon_ [l=fr] {_httpimg_/fr/tauthon.gif}
+_widthtauthx_ [l=fr] {100}
+_heighttauthx_ [l=fr] {17}
+
+## "series" ## nav_bar_button ## tser ##
+_httpicontsergr_ [l=fr] {_httpimg_/fr/tsergr.gif}
+_httpicontserof_ [l=fr] {_httpimg_/fr/tserof.gif}
+_httpicontseron_ [l=fr] {_httpimg_/fr/tseron.gif}
+_widthtserx_ [l=fr] {87}
+_heighttserx_ [l=fr] {17}
+
+## "dates" ## nav_bar_button ## tdate ##
+_httpicontdategr_ [l=fr] {_httpimg_/fr/tdategr.gif}
+_httpicontdateof_ [l=fr] {_httpimg_/fr/tdateof.gif}
+_httpicontdateon_ [l=fr] {_httpimg_/fr/tdateon.gif}
+_widthtdatex_ [l=fr] {87}
+_heighttdatex_ [l=fr] {17}
+
+## "sujets" ## nav_bar_button ## tsubj ##
+_httpicontsubjgr_ [l=fr] {_httpimg_/fr/tsubjgr.gif}
+_httpicontsubjon_ [l=fr] {_httpimg_/fr/tsubjon.gif}
+_httpicontsubjof_ [l=fr] {_httpimg_/fr/tsubjof.gif}
+_widthtsubjx_ [l=fr] {87}
+_heighttsubjx_ [l=fr] {17}
+
+## "organisation" ## nav_bar_button ## torg ##
+_httpicontorggr_ [l=fr] {_httpimg_/fr/torggr.gif}
+_httpicontorgon_ [l=fr] {_httpimg_/fr/torgon.gif}
+_httpicontorgof_ [l=fr] {_httpimg_/fr/torgof.gif}
+_widthtorgx_ [l=fr] {105}
+_heighttorgx_ [l=fr] {17}
+
+## "comment faire" ## nav_bar_button ## thow ##
+_httpiconthowgr_ [l=fr] {_httpimg_/fr/thowgr.gif}
+_httpiconthowon_ [l=fr] {_httpimg_/fr/thowon.gif}
+_httpiconthowof_ [l=fr] {_httpimg_/fr/thowof.gif}
+_widththowx_ [l=fr] {122}
+_heightthowx_ [l=fr] {17}
+
+## "theme" ## nav_bar_button ## ttopic ##
+_httpiconttopicgr_ [l=fr] {_httpimg_/fr/ttopicgr.gif}
+_httpiconttopicon_ [l=fr] {_httpimg_/fr/ttopicon.gif}
+_httpiconttopicof_ [l=fr] {_httpimg_/fr/ttopicof.gif}
+_widthttopicx_ [l=fr] {87}
+_heightttopicx_ [l=fr] {17}
+
+## "naviguer" ## nav_bar_button ## tbrwse ##
+_httpicontbrwsegr_ [l=fr] {_httpimg_/fr/tbrwsegr.gif}
+_httpicontbrwseon_ [l=fr] {_httpimg_/fr/tbrwseon.gif}
+_httpicontbrwseof_ [l=fr] {_httpimg_/fr/tbrwseof.gif}
+_widthtbrwsex_ [l=fr] {87}
+_heighttbrwsex_ [l=fr] {17}
+
+## "rechercher" ## nav_bar_button ## tsrch ##
+_httpicontsrchgr_ [l=fr] {_httpimg_/fr/tsrchgr.gif}
+_httpicontsrchof_ [l=fr] {_httpimg_/fr/tsrchof.gif}
+_httpicontsrchon_ [l=fr] {_httpimg_/fr/tsrchon.gif}
+_widthtsrchx_ [l=fr] {90}
+_heighttsrchx_ [l=fr] {17}
+
+## "titres a-z" ## nav_bar_button ## ttitl ##
+_httpiconttitlgr_ [l=fr] {_httpimg_/fr/ttitlgr.gif}
+_httpiconttitlof_ [l=fr] {_httpimg_/fr/ttitlof.gif}
+_httpiconttitlon_ [l=fr] {_httpimg_/fr/ttitlon.gif}
+_widthttitlx_ [l=fr] {87}
+_heightttitlx_ [l=fr] {17}
+
+## "personnes" ## nav_bar_button ## tpeop ##
+_httpicontpeopgr_ [l=fr] {_httpimg/tpeopgr.gif}
+_httpicontpeopof_ [l=fr] {_httpimg/tpeopof.gif}
+_httpicontpeopon_ [l=fr] {_httpimg/tpeopon.gif}
+_widthtpeopx_ [l=fr] {87}
+_heighttpeopx_ [l=fr] {17}
+
+
+
+######################################################################
+# 'about' page
+package about
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textabcol_ [l=fr] {A propos de cette collection}
+
+_textsubcols1_ [l=fr] {<p>La collection comprents _1_ sous-collections au total:
+<blockquote>}
+
+_textsubcols2_ [l=fr] {</blockquote>
+Vous pouvez verifier (et modifier) la collection que vous
+utilisez courament en utilisant la page des preferences.}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "about" ## green_title ## h_about ##
+_httpiconhabout_ [l=fr] {_httpimg_/fr/h\_about.gif}
+_widthhabout_ [l=fr] {200}
+_heighthabout_ [l=fr] {57}
+
+
+
+######################################################################
+# document package
+package document
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textTitlepage_ [l=fr] {_texticonhtitle_}
+_textCreatorpage_ [l=fr] {_texticonhauth_}
+_textSubjectpage_ [l=fr] {_texticonhsubj_}
+_textSeriespage_ [l=fr] {_texticonhser_}
+_textDatepage_ [l=fr] {_texticonhdate_}
+_textHowtopage_ [l=fr] {_texticonhhow_}
+_textOrganizationpage_ [l=fr] {_texticonhorg_}
+_textBrowsepage_ [l=fr] {_texticonhbrwse_}
+_textPeoplepage_ [l=fr] {_texticonhpeople_}
+
+_texticonhtitle_ [l=fr] {Titres A-Z}
+_texticonhauth_ [l=fr] {Auteurs A-Z}
+_texticonhsubj_ [l=fr] {Sujets}
+_texticonhser_ [l=fr] {Series}
+_texticonhdate_ [l=fr] {Dates}
+_texticonhhow_ [l=fr] {Comment faire}
+_texticonhorg_ [l=fr] {Organisations}
+_texticonhbrwse_ [l=fr] {Naviguer}
+_texticonhpeople_ [l=fr] {Personnes A-Z}
+
+_texticonopenbookshelf_ [l=fr] {fermer cette section de la bibliotheque}
+_texticonclosedbookshelf_ [l=fr] {ouvrir cette section de la bibliotheque et voir son contenu}
+_texticonopenbook_ [l=fr] {fermer ce livre}
+_texticonclosedfolder_ [l=fr] {Ouvrir ce repertoire et voir son contenu}
+_texticonclosedfolder2_ [l=fr] {ouvrir sous-section: }
+_texticonopenfolder_ [l=fr] {fermer ce repertoitre}
+_texticonopenfolder2_ [l=fr] {fermer sous-section: }
+_texticonsmalltext_ [l=fr] {Voir cette portion de texte}
+_texticonsmalltext2_ [l=fr] {voir texte: }
+_texticonpointer_ [l=fr] {section courante}
+_texticondetach_ [l=fr] {Ouvrir cette page dans une nouvelle fenetre}
+_texticonhighlight_ [l=fr] {Mettre en evidence les termes de recherche}
+_texticonnohighlight_ [l=fr] {Ne pas mettre en evidence les termes de recherche}
+_texticoncontracttoc_ [l=fr] {Reduire la table des matieres}
+_texticonexpandtoc_ [l=fr] {Etendre la table des matieres}
+_texticonexpandtext_ [l=fr] {Display all text}
+_texticoncontracttext_ [l=fr] {Display text only for currently selected section}
+_texticonwarning_ [l=fr] {<b>Attention: </b>}
+_texticoncont_ [l=fr] {continue?}
+
+_textltwarning_ [l=fr] {
+<p><center>
+<table cellspacing=0 cellpadding=0 width=_pagewidth_>
+<tr valign=top><td>_iconwarning_Etendre le texte 
+a ce niveau generera une importante quantite d'informations 
+a traiter par votre navigateur _imagecont_
+</td></tr></table></center>
+}
+
+_textgoto_ [l=fr] {aller a la page}
+_textintro_ [l=fr] { <i>(texte d'introduction)</i>}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "titres a-z" ## green_title ## h_title ##
+_httpiconhtitle_ [l=fr] {_httpimg_/fr/h\_title.gif}
+_widthhtitle_ [l=fr] {200}
+_heighthtitle_ [l=fr] {57}
+
+## "auteurs a-z" ## green_title ## h_auth ##
+_httpiconhauth_ [l=fr] {_httpimg_/fr/h\_auth.gif}
+_widthhauth_ [l=fr] {200}
+
+## "sujets" ## green_title ## h_subj ##
+_httpiconhsubj_ [l=fr] {_httpimg_/fr/h\_subj.gif}
+_widthhsubj_ [l=fr] {200}
+_heighthsubj_ [l=fr] {57}
+
+## "series" ## green_title ## h_ser ##
+_httpiconhser_ [l=fr] {_httpimg_/fr/h\_ser.gif}
+_widthhser_ [l=fr] {200}
+_heighthser_ [l=fr] {57}
+
+## "dates" ## green_title ## h_date ##
+_httpiconhdate_ [l=fr] {_httpimg_/fr/h\_date.gif}
+_widthhdate_ [l=fr] {200}
+_heighthdate_ [l=fr] {57}
+
+## "comment faire" ## green_title ## h_how ##
+_httpiconhhow_ [l=fr] {_httpimg_/fr/h\_how.gif}
+_widthhhow_ [l=fr] {200}
+_heighthhow_ [l=fr] {57}
+
+## "themes" ## green_title ## h_topic ##
+_httpiconhtopic_ [l=fr] {_httpimg_/fr/h\_topic.gif}
+_widthhtopic_ [l=fr] {200}
+_heighthtopic_ [l=fr] {57}
+
+## "organisation" ## green_title ## h_org ##
+_httpiconhorg_ [l=fr] {_httpimg_/fr/h\_org.gif}
+_widthhorg_ [l=fr] {250}
+_heighthorg_ [l=fr] {57}
+
+## "naviguer" ## green_title ## h_brwse ##
+_httpiconhbrwse_ [l=fr] {_httpimg_/fr/h\_brwse.gif}
+_widthhbrwse_ [l=fr] {200}
+_heighthbrwse_ [l=fr] {57}
+
+## "personnes" ## green_title ## h_people ##
+_httpiconhpeople_ [l=fr] {_httpimg_/fr/h\_people.gif}
+_widthhpeople_ [l=fr] {200}
+_heighthpeople_ [l=fr] {57}
+
+## "CONTINUE?" ## top_nav_button ## cont ##
+_httpiconcontoff_ [l=fr] {_httpimg_/fr/contoff.gif}
+_httpiconconton_ [l=fr] {_httpimg_/fr/conton.gif}
+_widthcontx_ [l=fr] {72}
+_heightcontx_ [l=fr] {17}
+
+## "ETENDRE LE TEXTE" ## document_button ## eallt ## 
+_httpiconealltof_ [l=fr] {_httpimg_/fr/ealltof.gif}
+_httpiconeallton_ [l=fr] {_httpimg_/fr/eallton.gif}
+_widthealltx_ [l=fr] {92}
+_heightealltx_ [l=fr] {30}
+
+## "CONTRACT CONTENTS" ## document_button ## econc ##
+_httpiconeconcof_ [l=fr] {_httpimg_/fr/econcof.gif}
+_httpiconeconcon_ [l=fr] {_httpimg_/fr/econcon.gif}
+_widtheconcx_ [l=fr] {113}
+_heighteconcx_ [l=fr] {30}
+
+## "DETACH" ## document_button ## edtch ##
+_httpiconedtchof_ [l=fr] {_httpimg_/fr/edtchof.gif}
+_httpiconedtchon_ [l=fr] {_httpimg_/fr/edtchon.gif}
+_widthedtchx_ [l=fr] {65}
+_heightedtchx_ [l=fr] {30}
+
+## "ETENDRE LE CONTENU" ## document_button ## eexpc ##
+_httpiconeexpcof_ [l=fr] {_httpimg_/fr/eexpcof.gif}
+_httpiconeexpcon_ [l=fr] {_httpimg_/fr/eexpcon.gif}
+_widtheexpcx_ [l=fr] {110}
+_heighteexpcx_ [l=fr] {30}
+
+## "CONTRACT TEXT" ## document_button ## etsec ##
+_httpiconetsecof_ [l=fr] {_httpimg_/fr/etsecof.gif}
+_httpiconetsecon_ [l=fr] {_httpimg_/fr/etsecon.gif}
+_widthetsecx_ [l=fr] {85}
+_heightetsecx_ [l=fr] {30}
+
+## "METTRE EN EVIDENCE" ## document_button ## ehl ##
+_httpiconehlof_ [l=fr] {_httpimg_/fr/ehlof.gif}
+_httpiconehlon_ [l=fr] {_httpimg_/fr/ehlon.gif}
+_widthehlx_ [l=fr] {106}
+_heightehlx_ [l=fr] {30}
+
+## "NE PAS METTRE EN EVIDENCE" ## document_button ## enhl ##
+_httpiconenhlof_ [l=fr] {_httpimg_/fr/enhlof.gif}
+_httpiconenhlon_ [l=fr] {_httpimg_/fr/enhlon.gif}
+_widthenhlx_ [l=fr] {142}
+_heightenhlx_ [l=fr] {30}
+
+
+
+######################################################################
+# 'search' page
+package query
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+# this if statement produces the text 'results n1 - nn for query: querystring' or 
+# 'No matches for query: querystring', depending on whether or not there were
+# any matches
+_textquerytitle_ [l=fr] {_If_(_thislast_,resultats _thisfirst_ - _thislast_ pour la requete: _cgiargq_,Pas de documents contenant: _cgiargq_)}
+_textnoquerytitle_ [l=fr] {Page de recherche}
+
+_texticonthispage_ [l=fr] {rechercher}
+_textsome_ [l=fr] {_If_(_cgiargb_,ranked,quelque uns des)}
+_textall_ [l=fr] {_If_(_cgiargb_,booleen,tous les)}
+_texticonqueryresultsbar_ [l=fr] {}
+_textfreqmsg1_ [l=fr] {Compte des mots: }
+_textpostprocess_ [l=fr] {_If_(_quotedquery_,<br><i>post-processed to find _quotedquery_</i>
+)}
+
+_textmorethan_ [l=fr] {Plus de }
+_textapprox_ [l=fr] {A propos }
+_textnodocs_ [l=fr] {Aucun document ne contient la requete.}
+_text1doc_ [l=fr] {1 document contient la requete.}
+_textlotsdocs_ [l=fr] {documents contiennent la requete.}
+_textmatches_ [l=fr] {Matches }
+_textbeginsearch_ [l=fr] {Demarrer la recherche}
+
+# the textselect macro may need to be overridden for some collections
+# _hselection_, _jselection_ and _nselection_ are set from within the server
+# some or all of them may remain unset
+_textselect_ [l=fr] {_If_(_cgiargb_,_textadvancedsearch_,_textsimplesearch_)}
+
+_textsimplesearch_ [l=fr] {Rechercher pour des _If_(_hselection_, _hselection_)_If_(_jselection_,_textjselect_)_If_(_nselection_, in _nselection_ language) 
+contenant _querytypeselection_ mots}
+
+_textadvancedsearch_ [l=fr] {Search_If_(_hselection_, _hselection_, _defaultindextext_)_If_(_jselection_,_textjselect_)_If_(_nselection_, in _nselection_ language) 
+using _querytypeselection_ query}
+
+_textjselect_ [l=fr] {_If_(_hselection_, of) _jselection_}
+
+_querytypeselection_ [l=fr] {
+<select name="t">
+<option value="1"_If_(_cgiargt_, selected)>_textsome_
+<option value="0"_If_(_cgiargt_,, selected)>_textall_
+</select>
+}
+
+_textstemon_ [l=fr] { (ignorer la fin des mots)}
+_textclearhistory_ [l=fr] {Clear History}
+_textexpand_ [l=fr] {Etendre}
+_textcontract_ [l=fr] {Reduire}
+_textsearchhistory_ [l=fr] {Search History}
+_textquery_ [l=fr] {Requete}
+_textresults_ [l=fr] {Resultats}
+_textview_ [l=fr] {Voir}
+_textnohistory_ [l=fr] {Search history not available}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "search" ## green_title ## h_search ##
+_httpiconhsearch_ [l=fr] {_httpimg_/fr/h\_search.gif}
+_widthhsearch_ [l=fr] {200}
+_heighthsearch_ [l=fr] {57}
+
+## "results" ## green_bar_left_aligned ## qryresb ##
+_httpiconqryresb_ [l=fr] {_httpimg_/fr/qryresb.gif}
+_widthqryresb_ [l=fr] {_pagewidth_}
+_heightqryresb_ [l=fr] {17}
+
+## "display" ## hand_made ##
+_httpicondisplay_ [l=fr] {_httpimg_/display.gif}
+_widthdisplay_ [l=fr] {60}
+_heightdisplay_ [l=fr] {20}
+
+
+
+######################################################################
+# 'preferences' page
+package preferences
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textsearchprefs_ [l=fr] {Preferences de recherche}
+_textcollectionprefs_ [l=fr] {Preferences de collection}
+_textpresentationprefs_ [l=fr] {Preferences de presentation}
+_textpreferences_ [l=fr] {Preferences}
+_textignorecase_ [l=fr] { ignorer la difference de casse}
+_textmatchcase_ [l=fr] { haute/basse case doivent correspondres}
+_textstem_ [l=fr] { ignorer la fin des mots}
+_textnostem_ [l=fr] { le mot entier doit correspondre}
+_textprefop_ [l=fr] {Retourner jusqu'a _maxdocoption_ enregistrement avec _hitsperpageoption_ enregistrement par page.}
+_textextlink_ [l=fr] {Acces aux pages Web externes: }
+_textintlink_ [l=fr] {Source documents retrieved from:}
+_textlanguage_ [l=fr] {Language de l'interface: }
+_textencoding_ [l=fr] {Encodage: }
+_textformat_ [l=fr] {Format de l'interface: }
+_textall_ [l=fr] {tous}
+_textsimplemode_ [l=fr] {mode requete simple}
+_textadvancedmode_ [l=fr] {mode requete avancee (authorise recherche booleenne utilisant !, &, |, et parentheses)}
+_textlinkinterm_ [l=fr] {through intermediate page}
+_textlinkdirect_ [l=fr] {aller directement la-bas}
+_textdigitlib_ [l=fr] {la bibliotheque numerique}
+_textweb_ [l=fr] {l'internet}
+_textlangeng_ [l=fr] {Anglais}
+_textlangmaori_ [l=fr] {M_amn_ori}
+_textlangchinese_ [l=fr] {Chinois}
+_textgraphical_ [l=fr] {Graphique}
+_texttextual_ [l=fr] {Textuel}
+_textcollectionoption_ [l=fr] {<p>
+Subcollections to include:
+<br>}
+_textfcoption_ [l=fr] {Inclure la barre de naviguation en haut des pages de document}
+_texthloption_ [l=fr] {Mettre en evidence les termes de recherche au sein du document}
+_texthistorydisplay_ [l=fr] {afficher l'historique des recherches}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "preferences" ## green_title ## h_pref ##
+_httpiconhpref_ [l=fr] {_httpimg_/fr/h\_pref.gif}
+_widthhpref_ [l=fr] {200}
+_heighthpref_ [l=fr] {57}
+
+
+
+######################################################################
+# 'delete search history' page
+package delhistory
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textdsh_ [l=fr] {Delete Search History}
+
+_textselectdelete_ [l=fr] {<a href="_httpclearhistory_&hdh=1">Effacer tout
+les enregistrements</a> ou choisir les documents a <select name=hmode><option value=save>ne
+pas effacer<option value=delete selected>effacer</select><br> Les enregistrements peuvent etre 
+selectionnes en tapant leur numero dans la boite,<br> ou en clickant dans la boite de chaque 
+enregistrement.<br> Les valeurs acceptees sont 1,2,3-6,7- etc }
+
+_textclearselected_ [l=fr] {Clear selectionne}
+_textselect_ [l=fr] {selectionner}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+
+
+######################################################################
+# 'help' page -- this is lower priority for translating than the
+# rest of this file
+package help
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textHelp_ [l=fr] {Help}
+_textSearchshort_ [l=fr] {chercher pour des mots en particulier}
+_textSeriesshort_ [l=fr] {acceder aux publications par series}
+_textDateshort_ [l=fr] {acceder aux publications par date}
+_textSubjectshort_ [l=fr] {acceder aux publications par sujet}
+_textTitleshort_ [l=fr] {acceder aux publications par titres}
+_textBrowseshort_ [l=fr] {naviguer a travers les publications}
+_textCreatorshort_ [l=fr] {acceder aux publications par auteurs}
+_textOrganizationshort_ [l=fr] {acceder aux publications par organisation}
+_textHowtoshort_ [l=fr] {acceder aux publications par la liste des comment faire}
+_textTopicshort_ [l=fr] {acceder aux publications par themes}
+_textPeopleshort_ [l=fr] {acceder aux publications par personnes}
+_textdefaultshorttext_ [l=fr] {classification non-definie}
+
+_textSearchlong_ [l=fr] { <p>Vous pouvez <i>rechercher certain mots</i> presents
+dans le texte a partir de la page de recherche. C'est la premiere page a s'afficher
+lorsque vous debutez, et peut etre atteinte a partir des autres pages par le bouton
+<i>rechercher</i>. }
+
+_textTitlelong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par titre</i> en
+pressant le bouton <i>titres a-z</i>. Ceci afichera une liste alphabetique 
+de livres. }
+
+_textOrganizationlong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par 
+organisation</i> en pressant le bouton <i>organisation</i>. Ceci afichera 
+une liste alphabetique d'organisations.  }
+
+_textHowtolong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par la liste des comment faire</i>
+ en pressant le bouton <i>comment faire</i>. Ceci afichera une liste de comment faire strings.  }
+
+_textCreatorlong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par auteur</i> en pressant le bouton 
+<i>auteurs a-z</i>. Ceci afichera une liste livres, classee par leur nom d'auteur.  }
+
+_textTopiclong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par theme</i> en pressant le bouton 
+<i>theme</i>. Ceci afichera une liste theme a naviguer.  }
+
+_textSubjectlong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par sujet</i> en pressant le bouton 
+<i>sujets</i>. Ceci afichera une liste de sujets, representee par rayons de livres.  }
+
+_textSerieslong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par series</i> en pressant le bouton 
+<i>series</i>.  Ceci afichera la liste des series comprisent actuellement dans la collection.  }
+
+_textDatelong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par date</i> en pressant le bouton 
+<i>dates</i>. Ceci afichera la liste des editions, triee chronologiquement. }
+
+_textBrowselong_ [l=fr] { <p>Vous pouvez <i>browse publications</i> en pressant le bouton 
+<i>naviguer</i>.  }
+
+_textPeoplelong_ [l=fr] { <p>Vous pouvez <i>acceder aux publications par personne</i> en pressant le bouton 
+<i>personne a-z</i>. Ceci afichera une liste d'entrees, triee par nom de famille.  }
+
+_textdefaultlongtext_ [l=fr] { <p>Pressez le bouton <i>inconu</i> par naviguer
+a travers les publications (la liste est triee par un champ inconu).  }
+
+_texthelptopics_ [l=fr] {
+<h2 align=left>Themes</h2>
+<ul>
+  <li><a href="\#finding-information">_textsimplehelpheading_</a>
+  _topicreadingdocs_
+  <li><a href="\#searching">Comment rechercher pour des mots particuliers</a>
+<ul>
+  <li><a href="\#query-terms">Termes de recherche</a>
+  <li><a href="\#query-type">Type de requetes</a>
+  <li><a href="\#scope-of-queries">Etendue des requetes</a>
+</ul>
+  <li><a href="\#preferences">_textchangeprefs_</a>
+<ul>
+  <li><a href="\#col-prefs">Preferences de la collection</a>
+  <li><a href="\#pres-prefs">Preferences de la presentation</a>
+  <li><a href="\#search-prefs">Preferences de recherche</a>
+</ul>
+</ul>
+}
+
+# there are 4 versions of this section of the help text.
+# which version is used is currently set within the server
+# (it should probably use the macro language e.g. [type=book])
+# 1 = html (like fao collections) -- section is empty
+# 2 = book (like hdl collection) -- macros beginning with book
+# 3 = bibliographic (like csbib) -- macros beginning with bib
+# 4 = standard (like gberg) -- the default
+
+_topicreadingdocs_ [l=fr] {<li><a href="\#reading-docs">_textreadingdocs_</a>}
+
+_textreadingdocs_ [l=fr] {Comment lire les documents}
+_booktextreadingdocs_ [l=fr] {Comment lire les livres}
+_bibtextreadingdocs_ [l=fr] {Obtenir plus d'informations sur une bibliographie}
+
+_texthelpreadingdocs_ [l=fr] {
+<p>_iconblankbar_
+<a name=reading-docs>
+<h2>_textreadingdocs_</h2>
+
+<p>Vous pouvez voir quand vous atteignez un document individuel car ses
+titres et auteurs apparaissent en haut a gauche de la page. A cote de 
+ces derniers, se presente le numero de la page courante, une boite vous
+permettant de selectionner une nouvelle page et des fleches suivante et
+precedente.
+
+<p>En dessous se trouve le texte de la portion courante. Lorsque
+vous aurez termine votre lecture, vous aurez deux fleches a votre disposition
+ pour vous emmener a la portion suivante ou vous ramener a la precedente.
+
+<p>Sous le titre et l'auteur se trouvent trois boutons.
+
+
+Below the title and author are three buttons. Click on <i>expand
+text</i> to expand out the whole text of the current document. If the
+document is large, this could take a long time and use a lot of memory!
+Click on <i>detach</i> to make a new browser window for this
+document. (This is useful if you want to compare documents, or read two at
+once.)  Finally, when you do a search the words you search for are
+highlighted.  Click on <i>no highlighting</i> to remove the highlighting.
+<p>
+<table cellspacing="0" cellpadding="2" border="0">
+<tr><td colspan=2><img src="_httpiconmore_" border="0"></td><td>Click on the arrow to go to the next section ...</td></tr>
+<tr><td colspan=2><img src="_httpiconless_" border="0"></td><td>... or back to the previous section</td></tr>
+<tr><td><img src="_document:httpiconealltof_" border="0"></td><td><img 
+src="_document:httpiconetsecof_" border="0"></td><td>Display all text, or not</td></tr>
+<tr><td colspan=2><img src="_document:httpiconedtchof_" border="0"></td><td>Open this page in a new window</td></tr>
+<tr><td><img src="_document:httpiconehlof_" border="0"></td><td><img
+src="_document:httpiconenhlof_" border="0"></td><td>Highlight search terms, or not</td></tr>
+</table>
+
+}
+
+_booktexthelpreadingdocs_ [l=fr] {
+<p>_iconblankbar_
+<a name=reading-docs>
+<h2>_textreadingdocs_</h2>
+
+<p>You can tell when you have arrived at an individual book because there
+is a photograph of its front cover at the top left of the page.  Beside the
+photograph is a table of contents with an arrow marking where you are.
+This table is expandable: click on the folders to open them or close them.
+Click on the open book at the top to close it.
+
+<p>Underneath is the text of the current section.  When you have read
+through it, there are arrows at the bottom to take you on to the next
+section or back to the previous one.
+
+<p>Below the photograph are four buttons. Click on <i>expand text</i> to
+expand out the whole text of the current section, or book.  If the book is
+large, this could take a long time and use a lot of memory! Click on
+<i>expand contents</i> to expand out the whole table of contents so that
+you can see the titles of all chapters and subsections. Click on
+<i>detach</i> to make a new browser window for this book.  (This is useful
+if you want to compare books, or read two at once.) Finally, when you do a
+search the words you search for are highlighted. Click on <i>no
+highlighting</i> to remove highlighting.
+
+<p>
+<table cellspacing="0" cellpadding="2" border="0">
+<tr><td colspan=2><img src="_httpiconbshelf_" border="0"></td><td>Open this bookshelf</td></tr>
+<tr><td><img src="_httpiconopenbook_" border="0"></td><td><img 
+src="_httpiconbook_" border="0"></td><td>Open/close this book</td></tr>
+<tr><td colspan=2><img src="_httpiconitext_" border="0"></td><td>View this section of the text</td></tr>
+<tr><td><img src="_document:httpiconealltof_" border="0"></td><td><img 
+src="_document:httpiconetsecof_" border="0"></td><td>Display all text, or not</td></tr>
+<tr><td><img src="_document:httpiconeexpcof_" border="0"></td><td><img
+src="_document:httpiconeconcof_" border="0"></td><td>Expand table of contents, or not</td></tr>
+<tr><td colspan=2><img src="_document:httpiconedtchof_" border="0"></td><td>Open this page in a new window</td></tr>
+<tr><td><img src="_document:httpiconehlof_" border="0"></td><td><img
+src="_document:httpiconenhlof_" border="0"></td><td>Highlight search terms, or not</td></tr>
+<tr><td colspan=2><img src="_httpiconmore_" border="0"></td><td>Click the arrow to go to the next section ...</td></tr>
+<tr><td colspan=2><img src="_httpiconless_" border="0"></td><td>... or back to the previous section</td></tr>
+</table>
+}
+
+_bibtexthelpreadingdocs_ [l=fr] {
+<p>_iconblankbar_
+<a name=reading-docs>
+<h2>_textreadingdocs_</h2>
+
+<p>Some bibliography items contain more information, such as an abstract.
+You can tell from the query response page if this is the case because they 
+are shown with the _icontext_ icon instead of the _iconblanktext_ icon.
+
+<p>Clicking on the _icontext_ icon will give you more information about the
+bibliography item.
+
+<p> Below the bibliography item are two buttons. Click on <i>detach</i> to 
+make a new browser window for this book. (This is useful if you want to compare
+bibliography items.) Finally, when you do a search the words you search for are 
+highlighted. Click on <i>no highlighting</i> to remove the highlighting.
+
+<p>
+<table cellspacing="0" cellpadding="2" border="0">
+<tr><td colspan=2><img src="_document:httpiconedtchof_" border="0"></td><td>Open this page in a new window</td></tr>
+<tr><td><img src="_document:httpiconehlof_" border="0"></td><td><img
+src="_document:httpiconenhlof_" border="0"></td><td>Highlight search terms, or not</td></tr>
+</table>
+}
+
+_texthelpsearching_ [l=fr] {
+<h2>How to search for particular words</h2>
+<p>
+  From the search page, you make a query in these simple steps:<p>
+  
+  <ol><li>Specify what documents you want to search
+      <li>Say whether you want to search for all or just some of the words
+      <li>Type in the words you want to search for
+      <li>Click the <i>Begin Search</i> button
+  </ol>
+
+<p>When you make a query, the titles of twenty matching documents will be shown.
+There is a button at the end to take you on to the next twenty documents.  From
+there you will find buttons to take you on to the third twenty or back to the
+first twenty, and so on.  Click the title of any document, or the little button
+beside it, to see it.
+
+<p>A maximum of 100 is imposed on the number of
+  documents returned.  You can change this number by clicking the
+  <i>preferences</i> button at the top of the page.<p>
+
+<p>_iconblankbar_
+<a name=query-terms>
+<h3>Search terms</h3>
+
+<p>Whatever you type into the query box is interpreted as a list of words
+called "search terms."  Each term contains nothing but alphabetic characters
+and digits.  Terms are separated by white space.  If any other characters such
+as punctuation appear, they serve to separate terms just as though they were
+spaces.  And then they are ignored.  You can't search for words that include
+punctuation.
+
+<p>For example, the query<p>
+    <ul><kbd>Agro-forestry in the Pacific Islands: Systems for Sustainability (1993)</kbd></ul>
+      <p>will be treated the same as<p>
+      <ul><kbd>Agro forestry in the Pacific Islands  Systems for Sustainability  1993 </kbd></ul><p>
+
+<p>_iconblankbar_
+<a name=query-type>
+<h3>Query type</h3>
+
+<p>There are two different kinds of query.
+
+<ul>
+  <li>Queries for <b>all</b> of the words.  These look for documents that 
+      contain all the words you have specified.  Documents that satisfy the
+      query are displayed, in alphabetical order.<p>
+
+  <li>Queries for <b>some</b> of the words.  Just list some terms that are
+      likely to appear in the documents you are looking for.  Documents are
+      displayed in order of how closely they match the query.  When determining
+
+      the degree of match,
+
+      <p><ul>
+        <li> the more search terms a document contains, the closer it matches;
+        <li> rare terms are more important than common ones;
+        <li> short documents match better than long ones.
+      </ul>
+</ul>
+
+<p>Use as many search terms as you like--a whole sentence, or even a
+whole paragraph.  If you specify only
+one term, documents will be ordered by its frequency of occurrence.<p>
+_texthelpscope_
+}
+
+_textchangeprefs_ [l=fr] {Changing your preferences}
+
+_texthelppreferences_ [l=fr] {<h2>_textchangeprefs_</h2>
+
+<p>When you click the <i>preferences</i> button at the top of the page you will
+be able to change some features of the interface to suit your own requirements.
+
+<p>_iconblankbar_
+<a name=col-prefs>
+<h3 align=left>Collection preferences</h3>
+
+Some collections comprise several subcollections, which can be searched
+independently or together, as one unit.  If so, you can select which
+subcollections to include in your searches on the Preferences page.
+
+<p>_iconblankbar_
+<a name=pres-prefs>
+<h3 align=left>Presentation preferences</h3>
+
+Depending on the particular collection, there may be several options you can
+set that control the presentation.
+
+Collections of Web pages allow you to suppress the Greenstone navigation bar at
+the top of each document page, so that once you have done a search you land at
+the exact Web page that matches without any Greenstone header.  To do another
+search you will have to use your browser's "back" button.  These collections
+also allow you to suppress Greenstone's warning message when you click a link
+that takes you out of the digital library collection and on to the Web itself.
+And in some Web collections you can control whether the links on the "Search
+Results" page take you straight to the actual URL in question, rather than to
+the digital library's copy of the page.
+
+Collections that are capable of being presented in different languages allow
+you to specify the interface language.  If the language is Chinese, you can
+also specify which of the standard Chinese encodings your browser uses.
+
+Finally, all collections allow you to switch to a textual interface format
+rather than the standard graphical one.  This is particularly useful for
+visually impaired users who use large screen fonts or speech synthesizers for
+output.
+
+<p>_iconblankbar_
+<a name=search-prefs>
+<h3 align=left>Search preferences</h3>
+Two pairs of buttons control the case sensitivity and stemming of the searches
+that you make. The first set of buttons controls whether upper and lower case
+must match (case sensitivity).  The second set controls whether to ignore word
+endings or not (stemming).
+
+<p>For example, if the buttons <i>ignore case differences</i> and
+<i>ignore word endings</i> are selected, the query<p>
+    <ul><kbd>African building</kbd></ul>
+      <p>will be treated the same as<p>
+      <ul><kbd>africa builds</kbd></ul><p>
+      because the uppercase letter in "African" will be transformed to
+      lowercase, and  the suffixes "n" and "ing" will be removed from
+      "African" and "building" respectively (also, "s" would be removed from
+      "builds").
+
+<p>You can also switch to an "advanced" query mode which allows you to
+combine terms using AND (&), OR (|), and NOT (!). This allows you to
+specify more precise queries.
+
+<p>Finally, you can control the number of hits returned, and the number
+presented on each screenful.
+
+}
+
+_texttanumbrowseoptions_ [l=fr] {il y a _numbrowseoptions_ facons de trouver des informations dans cette collection:}
+
+_textsimplehelpheading_ [l=fr] {Comment trouver des informations}
+
+_texthelpscope_ [l=fr] {
+<p>_iconblankbar_
+<a name=scope-of-queries>
+<h3 align=left>Scope of queries</h3>
+
+<p>
+Dans la plupart des collection, vous pouvez choisir differents indexes pour la recherche.
+Par exemple, il y aura peut-etre un indexe pour les auteurs et un autre pour les titres.
+Ou bien meme un index pur les chapitres ou paragraphes. Generalement, le document entier est retourne
+quelque soit l'index utilise.
+<p>Si les documents sont des livres, ils seront ouverts a l'endroit approprie.
+}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "aide" ## green_title ## h_help ##
+_httpiconhhelp_ [l=fr] {_httpimg_/fr/h\_help.gif}
+_widthhhelp_ [l=fr] {200}
+_heighthhelp_ [l=fr] {57}
Index: /branches/New_Config_Format-branch/gsdl/macros/french2.dm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/macros/french2.dm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/macros/french2.dm	(revision 1278)
@@ -0,0 +1,238 @@
+######################################################################
+#
+# English Language text and icon macros 
+# -- this file contains english text that is of less importance
+# -- to translate when creating a new interface language
+######################################################################
+
+
+######################################################################
+# 'home' page
+package home
+######################################################################
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_documents_ [l=fr] { documents. }
+_lastupdate_ [l=fr] {Last updated}
+_ago_ [l=fr] {days ago.}
+_colnotbuilt_ [l=fr] {Collection not built.}
+
+_textpagetitle_ [l=fr] {Greenstone Digital Library}
+_textfb_ [l=fr] {Feedback}
+_textinfosheet_ [l=fr] {Info Sheet}
+
+_textprojhead_ [l=fr] {The Greenstone software and <br>The New Zealand Digital Library Project}
+_textprojinfo_ [l=fr] {
+<p>
+The Greenstone Digital Library software provides a new way of
+organizing information and making it available over the Internet or on
+CD-ROM. It is open-source software, available under the terms of the
+GNU General Public License. 
+<p>
+A digital library is made up of a set of collections. Each collection of
+information comprises several (typically several thousand, or even
+several million) documents, which share a uniform searching and
+browsing interface. Collections can be organized in many different
+ways while retaining a strong family resemblance. 
+<p>
+The 
+<a href="http://www.nzdl.org">New Zealand Digital Library Project</a>
+is a research programme at The University of Waikato whose aim is to 
+develop the underlying technology for digital libraries and make it 
+available publicly so that others can use it to create their own 
+collections.
+Greenstone was created to further this objective.
+Further details are available from  
+<a href="http://www.nzdl.org">http://www.nzdl.org</a>
+}
+
+_textpoem_ [l=fr] {
+<br><h2>Kia papapounamu te moana</h2>
+
+<p>kia hora te marino,
+<br>kia tere te karohirohi,
+<br>kia papapounamu te moana
+
+<p>may peace and calmness surround you,
+<br>may you reside in the warmth of a summer's haze,
+<br>may the ocean of your travels be as smooth as the polished greenstone.
+}
+
+_textgreenstone_ [l=fr] { 
+<p>Greenstone is a semi-precious stone that (like this software) is sourced in New Zealand.  In traditional Maori society it was the most highly prized and sought after of all substances.  It can absorb and hold <i>wairua</i>, which is a spirit or life force, and is endowed with traditional virtues that make it an appropriate emblem for a
+public-domain digital library project.  Its lustre shows charity; its
+translucence, honesty; its toughness, courage; and the sharp edge it can
+take, justice.  The carved piece used in the Greenstone Digital Library
+Software logo is a <i>patu</i> or fighting club, and is a family heirloom
+of one of our project members.  In hand-to-hand combat its delivery is very
+quick, very accurate, and very complete.  We like to think these qualities
+also apply to our software, the razor sharp edge of the <i>patu</i>
+symbolizing the leading edge of technology.
+}
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "THE NEW ZEALAND DIGITAL LIBRARY" ## nzdl_heading ## nzdl2gr ##
+_httpiconnzdl_ [l=fr] {_httpimg_/nzdl2gr.gif}
+_widthnzdl_ [l=fr] {457}
+_heightnzdl_ [l=fr] {181}
+
+## "select a collection" ## green_bar_left_aligned ## selcolgr ##
+_httpiconselcolgr_ [l=fr] {_httpimg_/selcolgr.gif}
+_widthselcolgr_ [l=fr] {537}
+_heightselcolgr_ [l=fr] {17}
+_altselcolgr_ [l=fr] {"Select a collection"}
+
+
+######################################################################
+# 'status' pages
+package status
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textframebrowser_ [l=fr] {You must have a frame enabled browser to view this.}
+_textusermanage_ [l=fr] {User management}
+_textlistusers_ [l=fr] {list users}
+_textaddusers_ [l=fr] {add a new user}
+
+_textinfo_ [l=fr] {Information}
+_textgeneral_ [l=fr] {general}
+_textarguments_ [l=fr] {arguments}
+_textactions_ [l=fr] {actions}
+_textprotocols_ [l=fr] {protocols}
+
+_textcollections_ [l=fr] {Collections}
+_textnewcoll_ [l=fr] {new collection}
+_texteditcoll_ [l=fr] {edit collection}
+_textbuildcoll_ [l=fr] {build collection}
+_textdeletecoll_ [l=fr] {delete collection}
+
+_textlogs_ [l=fr] {Logs}
+_textinitlog_ [l=fr] {init log}
+_texterrorlog_ [l=fr] {error log}
+
+_textreturnhome_ [l=fr] {Return to home page}
+
+_titlewelcome_ [l=fr] { Maintenance and Administration }
+
+_welcome_ [l=fr] {
+
+<p> Maintenance and administration services available include:
+	view on-line logs; 
+	create, maintain and update collections; 
+	and access technical information such as CGI arguments.  
+	These services are accessed using the
+	side navigation bar on the lefthand side of the page.
+}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+
+
+######################################################################
+# html 
+package html
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textframebrowser_ [l=fr] {Vous devez avoir un navigateur acceptant les 'frames' pour voir ca.}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+
+
+######################################################################
+# external links
+package extlink
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textextlink_ [l=fr] {Lien Exterieur}
+_textlinknotfound_ [l=fr] {Lien Interieur introuvable}
+
+_textextlinkcontent_ [l=fr] {Le lien selectionne est exterieur a toutes vos collections selectionnee actuellement
+The link you have selected is external to any of your currently selected collections.
+
+    If you still wish to view this link and your browser has access to 
+    the Web, you can <a href="_nexturl_">go forward</a> to this page; otherwise 
+    use your browsers "back" button to return to the previous document.}
+
+_textlinknotfoundcontent_ [l=fr] {For reasons beyond our control, the internal link you have selected 
+    does not exist.  This is probably due to an error in the source collection.
+    Use your browsers "back" button to return to the previous document.}
+
+# should have arguments of collection, collectionname and link
+_foundintcontent_ [l=fr] {
+
+<h3>Link to "_2_" collection</h3>
+
+<p> The link you have selected is external to the "_collectionname_"
+    collection (it links to the "_2_" collection).
+    If you wish to view this link in the "_2_" collection you can 
+    <a href="_httpdoc_&c=_1_&cl=_cgiargcl_&d=_3_">go forward</a> to this page; 
+    otherwise use your browsers "back" button to return to the previous document.
+}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+
+
+######################################################################
+# authentication page
+package authen
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textGSDLtitle_ [l=fr] {Bibliotheque Numerique Greenstone}
+
+_textusername_ [l=fr] {nom d'utilisateur}
+_textpassword_ [l=fr] {mot de passe}
+
+_textmessageinvalid_ [l=fr] {La page demandee necessite votre enregistrement.
+Veuillez entrez votre nom d'utilisateur et mopt de passe.}
+
+_textmessagefailed_ [l=fr] {Votre nom d'utilisateur ou votre mot de passe est incorrect.}
+
+_textmessagedisabled_ [l=fr] {Desole, votre compte a ete mis hors service. Veuillez contacter
+l'administrateur de ce site.}
+
+_textmessagepermissiondenied_ [l=fr] {Desole, vous n'avez pas la permission d'acceder a cette page.}
+
+_textmessagestalekey_ [l=fr] {Le lien que vous avez choisit est maintenant perime.
+Veuillez entrez votre mot de passe pour acceder a cette page.}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
Index: /branches/New_Config_Format-branch/gsdl/macros/gsdl.dm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/macros/gsdl.dm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/macros/gsdl.dm	(revision 1278)
@@ -0,0 +1,125 @@
+package gsdl
+
+
+#######################################################################
+# java images/scripts
+#######################################################################
+
+# the _javalinks_ macros are the flashy image links at the top right of
+# the page. 
+
+_javalinks_ {_imagehome_}
+_javalinks_ [v=1] {
+_imagehome_<br>
+}
+
+#######################################################################
+# page content
+#######################################################################
+
+_httpgsdlmanual_ {_httppublications_/gsdl_manual.pdf}
+
+_pagetitle_ {Greenstone Digital Library Software}
+
+_imagethispage_ {_imagegreenstone_}
+
+_content_ {
+_iconblankbar_
+<h2>Greenstone Digital Library Software</h2>
+
+<p>
+The Greenstone Digital Library software provides a new way of
+organizing information and making it available over the Internet or on
+CD-ROM. 
+<p>
+A digital library is made up of a set of collections. 
+Each collection of information comprises several 
+(typically several thousand, or even several million) documents, 
+which share a uniform searching and browsing interface. 
+Collections can be organized in many different ways while 
+retaining a strong family resemblance. 
+Numerous examples are hosted at the New Zealand Digital Library Project
+web site (<a href="http://www.nzdl.org">http://www.nzdl.org</a>).
+<p>
+Although primarily designed for access over the Web, 
+Greenstone collections can be made available,
+in precisely the same form, on CD-ROM for standalone PCs.  
+Greenstone CDs work with any version of Microsoft Windows.
+<p>
+Greenstone is open-source software, 
+available under the terms of the GNU General Public License. 
+The latest version can always be
+<a href="http://www.nzdl.org/html/DOWNLOAD.html">downloaded</a>
+from
+<a href="ftp://nzdl.org/pub/gsdl/">ftp://nzdl.org/pub/gsdl/</a>.
+Documentation is available in the form of 
+the Greenstone Digital Library Software manual.
+<p>
+
+<center><table><tr align=center valign=center>
+<td>_home:iconpdf_</td>
+<td><a href=_httpgsdlmanual_>Manual</a></td>
+<td width=10>&nbsp;</td>
+<td>_home:iconpdf_</td>
+<td><a href="_httppublications_/NZDLtext.pdf">_home:textinfosheet_</a></td>
+<td width=10>&nbsp;</td>
+<td>_home:iconpdf_</td>
+<td><a href="_httppublications_/NZDLpictures.pdf">Screenshots</a></td>
+</tr></table></center>
+
+<p>
+_iconblankbar_
+<p>
+There is now a mailing list for Greenstone, intended primarily for
+discussions about the digital library software developed by the New Zealand
+Digital Library project.  If you are, or plan to be, an active user of
+Greenstone, you should consider joining the mailing list and contributing
+to the discussions.
+<p>
+This mailing list is hosted by the Pathfinder Library System in beautiful
+Grand Junction, Colorado (John Campbell, john@colosys.net).  To subscribe,
+send email to <a
+href="mailto:majordomo@colosys.net">majordomo@colosys.net</a> with the text
+<blockquote>
+subscribe greenstone
+</blockquote>
+(no subject, no name, nothing else).  To send a message to the list,
+address it to <a
+href="mailto:greenstone@colosys.net">greenstone@colosys.net</a>.
+
+<p>
+_iconblankbar_
+<p>
+<h2>Credits</h2>
+<p>
+Greenstone Digital Library Software is produced by the New Zealand Digital
+Library project.  The current software was designed and implemented by
+Rodger McNab, Stefan Boddie, Bill Rogers, Hong Chen and Stuart Inglis, and
+has benefited greatly from previous versions constructed by Craig
+Nevill-Manning and Todd Reed and previous interface designs by Che
+Tamahere.
+<p>
+The New Zealand Digital Library project is directed by Ian Witten and
+involves Mark Apperley, David Bainbridge, Sally Jo Cunningham, Steve Jones,
+Te Taka Keegan, Malika Mahoui and Lloyd Smith as principal investigators.
+Other researchers who have contributed to the project include Carl Gutwin,
+Rob Holte, Gordon Paynter and Bill Teahan.
+<p>
+Greenstone Digital Library Software uses the MG search engine produced
+principally by Alistair Moffat at the University of Melbourne and described
+in the book <i>Managing Gigabytes: Compressing and indexing documents and
+images</i> by Ian H. Witten, Alistair Moffat, and Tim C. Bell (Van Nostrand
+Reinhold, 1994).
+<p>
+_iconblankbar_
+<p>
+<table>
+<tr valign=top>
+<td>_home:textpoem_</td>
+<td>_imagegreenstone_</td>
+</tr></table>
+<p>_home:textgreenstone_
+
+_nzdlpagefooter_
+<br>April 2000
+}
Index: /branches/New_Config_Format-branch/gsdl/macros/nzdlhome.dm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/macros/nzdlhome.dm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/macros/nzdlhome.dm	(revision 1278)
@@ -0,0 +1,367 @@
+# nzdlhome.dm
+#
+# This file defines the homepage of the New Zealand Digital Library Project
+# as it appears on Http://www.nzdl.org. It is designed to override the default
+# homepage (defined in home.dm), so it should appear last in the "macrofiles"
+# section of the main.cfg file.
+#
+
+package home
+
+#######################################################################
+# java images/scripts
+#######################################################################
+
+# the _javalinks_ macros are the flashy image links at the top right of
+# the page. this is overridden here as we don't want 'home' 
+# links on this page
+
+_javalinks_ {}
+_javalinks_ [v=1] {}
+
+
+
+#######################################################################
+# icons
+#######################################################################
+
+_iconnzdl_ {<img src="_httpiconnzdl_" width=_widthnzdl_ height=_heightnzdl_ alt="The New Zealand Digital Library">}
+_icongbull_ {<img src="_httpicongbull_">}
+_iconpdf_ {<img src="_httpiconpdf_">}
+
+_iconselectcollection_ {<img src="_httpiconselcolgr_" width=_widthselcolgr_ height=_heightselcolgr_ alt=_altselcolgr_>}
+
+## "reference collections" ## green_bar_left_aligned ## selcolrf ##
+_httpiconselcolrf_ {_httpimg_/selcolrf.gif}
+_widthselcolrf_ {537}
+_heightselcolrf_ {17}
+_altselcolrf_ {"Reference collections"}
+
+## "humanitarian and UN collections" ## green_bar_left_aligned ## selcolun ##
+_httpiconselcolun_ {_httpimg_/selcolun.gif}
+_widthselcolun_ {537}
+_heightselcolun_ {17}
+_altselcolun_ {"Humanitarian and UN collections"}
+
+## "demonstration collections" ## green_bar_left_aligned ## selcolde ##
+_httpiconselcolde_ {_httpimg_/selcolde.gif}
+_widthselcolde_ {537}
+_heightselcolde_ {17}
+_altselcolde_ {"Demonstration collections"}
+
+_iconselectrf_ {<img src="_httpiconselcolrf_" width=_widthselcolrf_ height=_heightselcolrf_ alt=_altselcolrf_>}
+_iconselectun_ {<img src="_httpiconselcolun_" width=_widthselcolun_ height=_heightselcolun_ alt=_altselcolun_>}
+_iconselectde_ {<img src="_httpiconselcolde_" width=_widthselcolde_ height=_heightselcolde_ alt=_altselcolde_>}
+
+_iconmusiclibrary_ {<img src="_httpicontmusic_" border=1 alt="meldex music library">}
+
+
+#######################################################################
+# http macros 
+#
+# These contain the url without any quotes
+#######################################################################
+
+_httpicongbull_ {_httpimg_/gbull.gif}
+
+_httpiconpdf_ {_httpimg_/pdf.gif}
+
+_httpicontmusic_ {_httpimg_/meldexsm.gif}
+
+
+#######################################################################
+# page content                     
+#######################################################################
+
+_pagetitle_ {_textpagetitle_}
+_imagethispage_ {}
+_imagecollection_ {<center>_iconnzdl_</center>}
+
+_content_ {
+_nzdlcollectionlist_
+<center>_iconblankbar_</center>
+
+<p><center><h2>_textprojhead_</h2></center>
+
+<table border=0 cellpadding=5>
+
+<tr valign=top>
+<td>
+<table><tr valign=top><td>_icongbull_</td><td><a href="mailto:_mailaddr_">_textfb_</a></td></tr></table>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.nzdl.org/html/people.html">People</a></td></tr></table>
+</td>
+<td>_textprojinfo_</td>
+</tr>
+
+<tr>
+<td></td>
+<th align=left>_titlesoftwareinfo_</th>
+</tr>
+<tr valign=top>
+<td>
+<table><tr valign=top><td>_icongbull_</td><td><a href="_httppagex_(gsdl)">About<br>Greenstone</a></td></tr></table>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.nzdl.org/html/DOWNLOAD.html">Download<br>Greenstone</a></td></tr></table>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.nzdl.org/html/trouble.html">Installation<br>Guide</a></td><td><img src="http://www.nzdl.org/images/new2.gif"></td></tr></table>
+<table><tr valign=top><td>_iconpdf_</td><td><a href="_gsdl:httpgsdlmanual_">Manual</a></td></tr></table>
+<table><tr valign=top><td>_iconpdf_</td><td><a href="_httppublications_/NZDLtext.pdf">_textinfosheet_</a></td></tr></table>
+
+</td>
+<td>_textsoftwareinfo_</td>
+</tr>
+
+<tr>
+<td></td>
+<th align=left>_titleresearchinfo_</th>
+</tr>
+<tr valign=top>
+<td>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.nzdl.org/html/research.html">Research</a></td></tr></table>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.nzdl.org/html/projects.html">Projects</a></td></tr></table>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.nzdl.org/html/software.html">Software<br>Downloads</a></td></tr></table>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://www.cs.waikato.ac.nz/~nzdl/publications/">Publications</a></td></tr></table>
+</td>
+<td>_textresearchinfo_</td>
+</tr>
+
+<tr valign=top>
+<td>
+<table><tr valign=top><td>_icongbull_</td><td><a href="http://nikau.cs.waikato.ac.nz/~johnmcp/gsdl/cgi-bin/library.cgi">Z39.50<br>demo</a></td><td><img src="http://www.nzdl.org/images/new2.gif"></td></tr></table>
+</td><td>
+We have an experimental facility for searching Z39.50 collections using
+Greenstone.  Ultimately we plan a full bibliographic search facility, with
+the ability to combine tests on different fields, and to be able to search
+multiple collections, including cross-searching Greenstone and Z39.50
+collections.
+</td>
+</tr>
+
+<tr>
+<td></td>
+<th align=left>_titleaffiliateinfo_</th>
+</tr>
+<tr valign=top>
+<td>
+<img src="_httpimg_/ghproj.jpg" alt="Global Help Projects" width=100 height=90>
+</td>
+<td>_textaffiliateinfo_</td>
+</tr></table></p>
+
+_iconblankbar_
+<table>
+<tr valign=top>
+<td>_textpoem_</td>
+<td>_imagegreenstone_</td>
+</tr></table>
+<p>_textgreenstone_
+
+<p>
+_nzdlpagefooter_ 
+<br>April 2000
+}
+
+
+
+#######################################################################
+# English language text macros
+#######################################################################
+_textpagetitle_ {New Zealand Digital Library}
+_textprojhead_ {The New Zealand Digital Library Project}
+
+_textprojinfo_ {
+<p>
+The New Zealand Digital Library project is a research programme at
+The University of Waikato whose aim is to develop the underlying
+technology for digital libraries and make it available publicly so that
+others can use it to create their own collections. 
+<p>
+Our web site provides several document collections, including historical
+documents, humanitarian and development information, computer
+science technical reports and bibliographies, literary works, and
+magazines. All are available over the Web, and can be accessed
+through searching and browsing interfacees provided by the
+Greenstone digital library software. Behind the query interface lies a
+huge collection providing gigabytes of information. We hope you find
+what you want, or at least something intriguing!
+}
+
+_titlesoftwareinfo_ {The Greenstone software}
+
+_textsoftwareinfo_ {
+<p>
+The Greenstone Digital Library software provides a new way of
+organizing information and making it available over the Internet or on
+CD-ROM. It is open-source software, available under the terms of the
+Gnu public license. 
+<p>
+A digital library is made up of a set of collections. Each collection of
+information comprises several (typically several thousand, or even
+several million) documents, which share a uniform searching and
+browsing interface. Collections can be organized in many different
+ways while retaining a strong family resemblance. 
+
+<p><a href="mailto:majordomo@colosys.net">Subscribe to the Greenstone
+mailing list</a> (type "subscribe greenstone" in the <u>body</u> of the email)
+
+<p align=right>
+<a href="_httppagex_(gsdl)">More...</a>
+}
+
+_titleresearchinfo_ {Our research}
+
+_textresearchinfo_ {
+<p>
+The goal of our research program is to explore the potential of
+internet-based digital libraries. Our vision is to develop systems that
+automatically impose structure on anarchic, uncatalogued, distributed
+repositories of information, thereby providing information consumers
+with effective tools to locate what they need and to peruse it
+conveniently and comfortably. 
+<p>
+Project members are actively working on techniques for creating,
+managing, and and mainatining collections; extracting metadata from
+legacy documents; analysing library usage and user needs; Maori,
+Arabic and Chinese language systems; internationalising the library
+interface; optical music recognition and musical collections; novel
+interfaces for formulating queries and visualising results; novel
+interfaces for browsing metadata; text mining for keyphrases,
+acronyms, and other metadata; keyphrase extraction and
+phrase-based browsing; and other research topics. 
+<p align=right>
+<a href="_httppagex_(research)">More...</a>
+}
+
+_titleaffiliateinfo_ {Our affiliates}
+
+_textaffiliateinfo_ {
+<p>
+<a href="http://www.globalprojects.org">Global Help Projects</a>
+is a registered charity responsible for the
+Humanity Libraries Project that provides universal low-cost
+information access through co-operation between UN Agencies,
+universities and NGOs. Global Help Projects collaborate extensively
+with the NZDL project, and use the Greenstone software. 
+<p>
+<a href="http://www.digilibs.com">DigiLib Systems Limited</a>
+is an innovative software company that
+creates international digital libraries. As a major contributor to the
+Greenstone Digital Library Software they are able to build, customize,
+and extend digital libraries to meet exacting needs. Please contact them
+for an obligation free quote. 
+<p>
+<a name="mirrors"></a>
+The following websites are among those currently using Greenstone,
+either to make their own collections available, 
+or to mirror New Zealand Digital Library content.
+Some are still under development.
+<ul>
+<li><a href="http://canada.nzdl.org/~nzdl/cgi-bin/library">Canadian Mirror (CISTI)</a>
+<li><a href="http://gene.rutgers.edu/cgi-bin/library">Rutgers University</a>
+<li><a href="http://csdl1.mdx.ac.uk/">Middlesex University</a>
+<li><a href="http://laraine.unidata.ucar.edu/projects/coohl/htdig/cgi-bin/library">Unidata</a>
+</ul> 
+}
+
+
+#######################################################################
+# The collection display
+# A hand-crafted alternative to the _homeextra_ macro
+#######################################################################
+
+_nzdlgwcgi_ {http://www.nzdl.org/fast-cgi-bin/library}
+#_nzdlgwcgi_ {http://www.nzdl.org/cgi-bin/library}
+_nzdlhttpprefix_ {http://www.nzdl.org/gsdl}
+
+_nzdlcollection_ {http://www.nzdl.org/fast-cgi-bin/library?a=p&p=about&c=_1_}
+#_nzdlcollection_ {http://www.nzdl.org/cgi-bin/library?a=p&p=about&c=_1_}
+_nzdlcollectionimage_ {<img width=150 border=1 src="_nzdlhttpprefix_/collect/_1_/images/_2_" alt=_3_>}
+
+_collectionlink_ {<a href="_nzdlcollection_(_4_)">_nzdlcollectionimage_(_1_,_2_,_3_)</a>}
+
+
+_nzdlcollectionlist_ {
+<center>
+<p>_iconselectrf_
+<p>_collectactive_
+<p>_iconselectun_
+<p>_collectfao_
+<p>_iconselectde_
+<p>_collectrest_
+</center>
+}
+
+_collectactive_ {
+<table width=537>
+<tr valign=top>
+<td align=center>
+<p>_collectionlink_(arabic,  arabic.gif,  "Arabic text collection", arabic&l=ar&nw=u)
+<p>_collectionlink_(chinese, chinsm.jpg,  "Chinese text collection", chinese&l=zh&nw=u)
+<p>_collectionlink_(gberg,   gbergsm.gif, "Project Gutenberg Collection", gberg)
+</td>
+
+
+<td align=center>
+<p><a href="http://www.nzdl.org/fast-cgi-bin/niupepalibrary?a=p&p=about&c=niupepa&l=mi"><img width=150 border=1 src="_nzdlhttpprefix_/collect/niupepa/images/niupepsm.gif" alt="Niupepa: M&auml;ori Newspapers"></a>
+<p><a href="http://nzdl2.cs.waikato.ac.nz/cgi-bin/gwmm?c=meldex&a=page&p=coltitle"><img src="_nzdlhttpprefix_/images/meldexsm.gif" border=1 alt="Meldex music library"></a>
+<p><a href="_nzdlgwcgi_?a=p&p=about&c=musvid"><img width=150 border=1 src="http://www.cosc.canterbury.ac.nz/~davidb/gsdl/collect/musvid/images/musvid_frontpage.gif" alt="Music Videos"></a>
+<p><a href="http://www.nzdl.org/fast-cgi-bin/cstrlibrary?a=p&p=about"><img width=150 border=1 src="_nzdlhttpprefix_/collect/cstr/images/cstrsm.gif" alt="Computer Science Technical Reports"></a>
+<p>_collectionlink_(csbib, csbibsm.gif, "Computer Science Bibliographies", csbib)
+</td>
+
+<td align=center>
+<p>_collectionlink_(whist, whist\_logo\_small.gif, "Women&#039;s History Primary Source Documents", whist)
+<p>_collectionlink_(ohist, ohist\_title\_small.gif, "Hamilton Public Library Youth Oral History Collection", ohist)
+<p>_collectionlink_(hcibib, hcibibsm.gif, "The HCI Bibliography", hcibib)
+</td>
+</tr></table>
+}
+
+
+_collectfao_ {
+<table width=537>
+<tr valign=top>
+<td align=center>
+<p>_collectionlink_(fao1, fao.gif,   "The FAO Web site", fao1)
+<p>_collectionlink_(hdl,  hdlsm.gif, "Humanity Development Library", hdl)
+<p>_collectionlink_(envl, welsm.gif, "World Environment Library", envl)
+</td>
+<td align=center>
+<p>_collectionlink_(mhl,  mhlsm.gif,   "Medical and Health Library", mhl)
+<p>_collectionlink_(fnl,  fnlsm.gif,   "Food and Nutrition Library", fnl)
+<p>_collectionlink_(paho, pahosml.gif, "Virtual Disaster Library", paho)
+</td>
+<td align=center>
+<p>_collectionlink_(ccgi,   ccgism.gif,   "Collection on Critical Global Issues", ccgi)
+<p>_collectionlink_(tulane, tulanesm.gif, "Biblioth&egrave;que pour le d&eacute;veloppement", tulane)
+<p>_collectionlink_(unesco, unescosm.gif, "Sahel point Doc", unesco)
+</td>
+</tr>
+</table>
+}
+
+
+_collectrest_ {
+<table width=537>
+<tr valign=top>
+<td align=center>
+<p>_collectionlink_(ipc, ipcsm.gif, "Indigenous Peoples", ipc)
+</td>
+<td align=center>
+<p>_collectionlink_(tcc, tccsm.gif, "The Computists&#039; Weekly", tcc)
+<p>_collectionlink_(tidbits, tidbitsm.gif, "TidBITS", tidbits)
+</td>
+<td align=center>
+<p>_collectionlink_(dlmail, dlmailsm.gif, "The NZDL Project mailing list", dlmail)
+</td>
+</tr>
+</table>
+}
+
+# bbc no longer public
+#<p>_collectionlink_(bbc1, bbc_home.gif, "BBC archives (1900-1985)", bbc1)
+
+
+
+
+
+
+
Index: /branches/New_Config_Format-branch/gsdl/macros/spanish.dm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/macros/spanish.dm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/macros/spanish.dm	(revision 1278)
@@ -0,0 +1,980 @@
+######################################################################
+#
+# Spanish Language text and icon macros 
+#
+######################################################################
+#
+# This is the main macro file for translation when creating an 
+# interface in another language.
+#
+# Under the 'text macros' comments are text macros of the form:
+# _macroname_ {macro value}
+# Everything between the {} is the text to be translated. This text 
+# may itself contain macros (i.e. characters other than space between
+# underscore characters, e.g. _about:numdocs_ or _textpage_). These
+# macro names occurring within text shouldn't be translated but should
+# be left as they are. Underscores or curly brackets occurring 
+# naturally within the text should be escaped with a leading backslash
+# (i.e. '\_', '\{' or '\}).
+#
+# Under the 'icons' comments are macros concerned with displaying
+# icons which themselves contain text.
+# Above each macro (or group of macros) for an icon is a comment line
+# that looks something like '## "HOME" ## top_nav_button ## chome ##'.
+# The first field of the comment ("HOME" in this case) is the text
+# that appears in the english version of the icon. This is the text
+# that must be translated, nothing needs to be done to the macros 
+# themselves. The other two fields of the comments are used by 
+# automatic icon generating software which reads the newly translated
+# file and generates appropriate icons.
+#
+# Comment lines (other than those described above) need not be 
+# translated (i.e. any lines beginning with '#', like this line).
+#
+# The simplest way to translate this file is to save it as something
+# else (e.g. french.dm) and work through translating all the text
+# macro values and icon comments.
+#
+######################################################################
+
+
+######################################################################
+# Global (base) package
+package Global
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textdefaultcontent_ [l=es] {La p&aacute;gina solicitada no fue encontrada. Por 
+favor utilice el bot&oacute;n 'regresar' de su navegador o el bot&oacute;n 
+de principal para regresara la Biblioteca Digital Greenstone.}
+
+_textdefaulttitle_ [l=es] {Error en GSDL}
+
+_collectionextra_ [l=es] {Esta colecci&oacute;n contiene _about:numdocs_ documentos. 
+La colecci&oacute;n fue construida hace _about:builddate_ d&iacute;as.}
+
+_textimagecollection_ [l=es] {}
+_textimageabout_ [l=es] {P&aacute;gina Acerca de}
+_textimagehome_ [l=es] {P&aacute;gina Principal}
+_textimagehelp_ [l=es] {P&aacute;gina de Ayuda}
+_textimagepref_ [l=es] {P&aacute;gina de Preferencias}
+_textimagegreenstone_ [l=es] {Software de la Biblioteca Digital Greenstone}
+_textimagesearch_ [l=es] {Buscar t&eacute;rminos espec&iacute;ficos}
+_textimageTitle_ [l=es] {Navegar en las listas de t&iacute;tulos en orden alfab&eacute;tico}
+_textimageList_ [l=es] {Navegar en la lista de documentos}
+_textimageCreator_ [l=es] {Navegar en las listas de autores en orden alfab&eacute;tico}
+_textimageSeries_ [l=es] {Navegar por ejemplar}
+_textimageDate_ [l=es] {Navegar por fecha}
+_textimageSubject_ [l=es] {Navegar por categor&iacute;as de temas}
+_textimageOrganization_ [l=es] {Navegar por organizaci&oacute;n}
+_textimageHowto_ [l=es] {Navegar por categor&iacute;as de c&oacute;mo}
+_textimageTopic_ [l=es] {Navegar por t&oacute;picos especiales}
+_textimageBrowse_ [l=es] {Navegar}
+_textimagePeople_ [l=es] {Navegar en listas de gente en orden alfab&eacute;tico}
+
+_texticontabsearchgreen_ [l=es] {Buscar}
+_texticontabdategreen_ [l=es] {Fechas}
+_texticontabseriesgreen_ [l=es] {Series}
+_texticontabauthorgreen_ [l=es] {Autores A-Z}
+_texticontabtitlegreen_ [l=es] {T&iacute;tulos A-Z}
+_texticontablistgreen_ [l=es] {Listados}
+_texticontabsubjectgreen_ [l=es] {Temas}
+_texticontaborggreen_ [l=es] {Organizaci&oacute;n}
+_texticontabhowgreen_ [l=es] {C&oacute;mo}
+_texticontabtopicgreen_ [l=es] {T&oacute;picos}
+_texticontabbrwsegreen_ [l=es] {Navegar}
+_texticontabPeoplegreen_ [l=es] {Gente A-Z}
+
+_texticontext_ [l=es] {Ver el documento}
+_texticonclosedbook_ [l=es] {abrir este documento y ver su &iacute;ndice de contenido}
+_texticonnext_ [l=es] {ir a la siguiente secci&oacute;n}
+_texticonprev_ [l=es] {ir a la secci&oacute;n anterior}
+
+_page_ [l=es] {p&aacute;gina }
+_pages_ [l=es] {p&aacute;ginas}
+_of_ [l=es] { de }
+_vol_ [l=es] {Volumen}
+_num_ [l=es] {N&uacute;mero}
+
+_textmonth00_ [l=es] {}
+_textmonth01_ [l=es] {Enero}
+_textmonth02_ [l=es] {Febrero}
+_textmonth03_ [l=es] {Marzo}
+_textmonth04_ [l=es] {Abril}
+_textmonth05_ [l=es] {Mayo}
+_textmonth06_ [l=es] {Junio}
+_textmonth07_ [l=es] {Julio}
+_textmonth08_ [l=es] {Agosto}
+_textmonth09_ [l=es] {Septiembre}
+_textmonth10_ [l=es] {Octubre}
+_textmonth11_ [l=es] {Noviembre}
+_textmonth12_ [l=es] {Diciembre}
+
+_magazines_ [l=es] {Revistas}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "PRINCIPAL" ## top_nav_button ## chome ##
+_httpiconchomeof_ [l=es] {_httpimg_/es/chomeof.gif}
+_httpiconchomeon_ [l=es] {_httpimg_/es/chomeon.gif}
+_widthchomex_ [l=es] {65}
+_heightchomex_ [l=es] {20}
+
+## "AYUDA" ## top_nav_button ## chelp ##
+_httpiconchelpof_ [l=es] {_httpimg_/es/chelpof.gif}
+_httpiconchelpon_ [l=es] {_httpimg_/es/chelpon.gif}
+_widthchelpx_ [l=es] {46}
+_heightchelpx_ [l=es] {20}
+   
+## "PREFERENCIAS" ## top_nav_button ## cpref ##
+_httpiconcprefof_ [l=es] {_httpimg_/es/cprefof.gif}
+_httpiconcprefon_ [l=es] {_httpimg_/es/cprefon.gif}
+_widthcprefx_ [l=es] {88}
+_heightcprefx_ [l=es] {20}
+
+## "ayuda" ## green_title ## h_help ##
+_httpiconhhelp_ [l=es] {_httpimg_/es/h\_help.gif}
+_widthhhelp_ [l=es] {200}
+_heighthhelp_ [l=es] {57}
+
+## "autores a-z" ## nav_bar_button ## tauth ##
+_httpicontauthgr_ [l=es] {_httpimg_/es/tauthgr.gif}
+_httpicontauthof_ [l=es] {_httpimg_/es/tauthof.gif}
+_httpicontauthon_ [l=es] {_httpimg_/es/tauthon.gif}
+_widthtauthx_ [l=es] {100}
+_heighttauthx_ [l=es] {17}
+
+## "series" ## nav_bar_button ## tser ##
+_httpicontsergr_ [l=es] {_httpimg_/es/tsergr.gif}
+_httpicontserof_ [l=es] {_httpimg_/es/tserof.gif}
+_httpicontseron_ [l=es] {_httpimg_/es/tseron.gif}
+_widthtserx_ [l=es] {87}
+_heighttserx_ [l=es] {17}
+
+## "fechas" ## nav_bar_button ## tdate ##
+_httpicontdategr_ [l=es] {_httpimg_/es/tdategr.gif}
+_httpicontdateof_ [l=es] {_httpimg_/es/tdateof.gif}
+_httpicontdateon_ [l=es] {_httpimg_/es/tdateon.gif}
+_widthtdatex_ [l=es] {87}
+_heighttdatex_ [l=es] {17}
+
+## "temas" ## nav_bar_button ## tsubj ##
+_httpicontsubjgr_ [l=es] {_httpimg_/es/tsubjgr.gif}
+_httpicontsubjon_ [l=es] {_httpimg_/es/tsubjon.gif}
+_httpicontsubjof_ [l=es] {_httpimg_/es/tsubjof.gif}
+_widthtsubjx_ [l=es] {87}
+_heighttsubjx_ [l=es] {17}
+
+## "organización" ## nav_bar_button ## torg ##
+_httpicontorggr_ [l=es] {_httpimg_/es/torggr.gif}
+_httpicontorgon_ [l=es] {_httpimg_/es/torgon.gif}
+_httpicontorgof_ [l=es] {_httpimg_/es/torgof.gif}
+_widthtorgx_ [l=es] {108}
+_heighttorgx_ [l=es] {17}
+
+## "cómo" ## nav_bar_button ## thow ##
+_httpiconthowgr_ [l=es] {_httpimg_/es/thowgr.gif}
+_httpiconthowon_ [l=es] {_httpimg_/es/thowon.gif}
+_httpiconthowof_ [l=es] {_httpimg_/es/thowof.gif}
+_widththowx_ [l=es] {87}
+_heightthowx_ [l=es] {17}
+
+## "tópicos" ## nav_bar_button ## ttopic ##
+_httpiconttopicgr_ [l=es] {_httpimg_/es/ttopicgr.gif}
+_httpiconttopicon_ [l=es] {_httpimg_/es/ttopicon.gif}
+_httpiconttopicof_ [l=es] {_httpimg_/es/ttopicof.gif}
+_widthttopicx_ [l=es] {87}
+_heightttopicx_ [l=es] {17}
+
+## "navegar" ## nav_bar_button ## tbrwse ##
+_httpicontbrwsegr_ [l=es] {_httpimg_/es/tbrwsegr.gif}
+_httpicontbrwseon_ [l=es] {_httpimg_/es/tbrwseon.gif}
+_httpicontbrwseof_ [l=es] {_httpimg_/es/tbrwseof.gif}
+_widthtbrwsex_ [l=es] {87}
+_heighttbrwsex_ [l=es] {17}
+
+## "buscar" ## nav_bar_button ## tsrch ##
+_httpicontsrchgr_ [l=es] {_httpimg_/es/tsrchgr.gif}
+_httpicontsrchof_ [l=es] {_httpimg_/es/tsrchof.gif}
+_httpicontsrchon_ [l=es] {_httpimg_/es/tsrchon.gif}
+_widthtsrchx_ [l=es] {87}
+_heighttsrchx_ [l=es] {17}
+
+## "títulos a-z" ## nav_bar_button ## ttitl ##
+_httpiconttitlgr_ [l=es] {_httpimg_/es/ttitlgr.gif}
+_httpiconttitlof_ [l=es] {_httpimg_/es/ttitlof.gif}
+_httpiconttitlon_ [l=es] {_httpimg_/es/ttitlon.gif}
+_widthttitlx_ [l=es] {90}
+_heightttitlx_ [l=es] {17}
+
+## "gente" ## nav_bar_button ## tpeop ##
+_httpicontpeopgr_ [l=es] {_httpimg_/es/tpeopgr.gif}
+_httpicontpeopof_ [l=es] {_httpimg_/es/tpeopof.gif}
+_httpicontpeopon_ [l=es] {_httpimg_/es/tpeopon.gif}
+_widthtpeopx_ [l=es] {87}
+_heighttpeopx_ [l=es] {17}
+
+
+
+######################################################################
+# 'about' page
+package about
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textabcol_ [l=es] {Acerca de esta colecci&oacute;n}
+
+_textsubcols1_ [l=es] {<p>La colecci&oacute;n completa comprende _1_ subcolecciones: 
+<blockquote>} 
+
+_textsubcols2_ [l=es] {</blockquote>
+Puede seleccionar (y cambiar) las subcolecciones que est&aacute;
+utilizando actualmente en la p&aacute;gina de Preferencias.}
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "acerca de" ## green_title ## h_about ##
+_httpiconhabout_ [l=es] {_httpimg_/es/h\_about.gif}
+_widthhabout_ [l=es] {200}
+_heighthabout_ [l=es] {57}
+
+
+
+######################################################################
+# document package
+package document
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textTitlepage_ [l=es] {_texticonhtitle_}
+_textCreatorpage_ [l=es] {_texticonhauth_}
+_textSubjectpage_ [l=es] {_texticonhsubj_}
+_textSeriespage_ [l=es] {_texticonhser_}
+_textDatepage_ [l=es] {_texticonhdate_}
+_textHowtopage_ [l=es] {_texticonhhow_}
+_textOrganizationpage_ [l=es] {_texticonhorg_}
+_textBrowsepage_ [l=es] {_texticonhbrwse_}
+_textPeoplepage_ [l=es] {_texticonhpeople_}
+
+_texticonhtitle_ [l=es] {T&iacute;tulos A-Z}
+_texticonhauth_ [l=es] {Autores A-Z}
+_texticonhsubj_ [l=es] {Temas}
+_texticonhser_ [l=es] {Series}
+_texticonhdate_ [l=es] {Fechas}
+_texticonhhow_ [l=es] {C&oacute;mo}
+_texticonhorg_ [l=es] {Organizaciones}
+_texticonhbrwse_ [l=es] {Navegar}
+_texticonhpeople_ [l=es] {Gente A-Z}
+
+_texticonopenbookshelf_ [l=es] {cerrar esta secci&oacute;n de la biblioteca}
+_texticonclosedbookshelf_ [l=es] {abrir esta secci&oacute;n de la biblioteca y ver el &iacute;ndice de contenido}
+_texticonopenbook_ [l=es] {cerrar este libro}
+_texticonclosedfolder_ [l=es] {Abrir esta carpeta y ver su contenido}
+_texticonclosedfolder2_ [l=es] {abrir subsecci&oacute;n: }
+_texticonopenfolder_ [l=es] {cerrar esta carpeta}
+_texticonopenfolder2_ [l=es] {cerrar subsecci&oacute;n: }
+_texticonsmalltext_ [l=es] {Ver esta secci&oacute;n del texto}
+_texticonsmalltext2_ [l=es] {ver texto: }
+_texticonpointer_ [l=es] {secci&oacute;n actual}
+_texticondetach_ [l=es] {Abrir esta p&aacute;gina en una nueva ventana}
+_texticonhighlight_ [l=es] {Resaltar los t&eacute;rminos de la b&uacute;squeda}
+_texticonnohighlight_ [l=es] {No resaltar los t&eacute;rminos de la b&uacute;squeda}
+_texticoncontracttoc_ [l=es] {Contraer el &iacute;ndice de contenido}
+_texticonexpandtoc_ [l=es] {Expandir el &iacute;ndice de contenido}
+_texticonexpandtext_ [l=es] {Mostrar el texto completo}
+_texticoncontracttext_ [l=es] {Mostrar el texto s&oacute;lo de la secci&oacute;n seleccionada}
+_texticonwarning_ [l=es] {<b>Advertencia: </b>}
+_texticoncont_ [l=es] {&#191;desea continuar?}
+
+_textltwarning_ [l=es] {
+<p><center>
+<table cellspacing=0 cellpadding=0 width=_pagewidth_>
+<tr valign=top><td>_iconwarning_Expandir el texto generar&aacute; una gran cantidad 
+de datos a desplegar en su navegador _imagecont_
+</td></tr></table></center>
+}  
+
+_textgoto_ [l=es] {ir a la p&aacute;gina}
+_textintro_ [l=es] { <i>(texto inicial)</i>}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "títulos a-z" ## green_title ## h_title ##
+_httpiconhtitle_ [l=es] {_httpimg_/es/h\_title.gif}
+_widthhtitle_ [l=es] {200}
+_heighthtitle_ [l=es] {57}
+
+## "autores a-z" ## green_title ## h_auth ##
+_httpiconhauth_ [l=es] {_httpimg_/es/h\_auth.gif}
+_widthhauth_ [l=es] {200}
+
+## "temas" ## green_title ## h_subj ##
+_httpiconhsubj_ [l=es] {_httpimg_/es/h\_subj.gif}
+_widthhsubj_ [l=es] {200}
+_heighthsubj_ [l=es] {57}
+
+## "series" ## green_title ## h_ser ##
+_httpiconhser_ [l=es] {_httpimg_/es/h\_ser.gif}
+_widthhser_ [l=es] {200}
+_heighthser_ [l=es] {57}
+
+## "fechas" ## green_title ## h_date ##
+_httpiconhdate_ [l=es] {_httpimg_/es/h\_date.gif}
+_widthhdate_ [l=es] {200}
+_heighthdate_ [l=es] {57}
+
+## "cómo" ## green_title ## h_how ##
+_httpiconhhow_ [l=es] {_httpimg_/es/h\_how.gif}
+_widthhhow_ [l=es] {200}
+_heighthhow_ [l=es] {57}
+
+## "tópicos" ## green_title ## h_topic ##
+_httpiconhtopic_ [l=es] {_httpimg_/es/h\_topic.gif}
+_widthhtopic_ [l=es] {200}
+_heighthtopic_ [l=es] {57}
+
+## "organización" ## green_title ## h_org ##
+_httpiconhorg_ [l=es] {_httpimg_/es/h\_org.gif}
+_widthhorg_ [l=es] {250}
+_heighthorg_ [l=es] {57}
+
+## "navegar" ## green_title ## h_brwse ##
+_httpiconhbrwse_ [l=es] {_httpimg_/es/h\_brwse.gif}
+_widthhbrwse_ [l=es] {200}
+_heighthbrwse_ [l=es] {57}
+
+## "gente" ## green_title ## h_people ##
+_httpiconhpeople_ [l=es] {_httpimg_/es/h\_people.gif}
+_widthhpeople_ [l=es] {200}
+_heighthpeople_ [l=es] {57}
+
+## "DESEA CONTINUAR?" ## top_nav_button ## cont ##
+_httpiconcontoff_ [l=es] {_httpimg_/es/contoff.gif}
+_httpiconconton_ [l=es] {_httpimg_/es/conton.gif}
+_widthcontx_ [l=es] {122}
+_heightcontx_ [l=es] {17}
+
+## "TEXTO COMPLETO" ## document_button ## eallt ## 
+_httpiconealltof_ [l=es] {_httpimg_/es/ealltof.gif}
+_httpiconeallton_ [l=es] {_httpimg_/es/eallton.gif}
+_widthealltx_ [l=es] {91}
+_heightealltx_ [l=es] {30}
+
+## "CONTRAER ÍNDICE" ## document_button ## econc ##
+_httpiconeconcof_ [l=es] {_httpimg_/es/econcof.gif}
+_httpiconeconcon_ [l=es] {_httpimg_/es/econcon.gif}
+_widtheconcx_ [l=es] {92}
+_heighteconcx_ [l=es] {30}
+
+## "SEPARAR" ## document_button ## edtch ##
+_httpiconedtchof_ [l=es] {_httpimg_/es/edtchof.gif}
+_httpiconedtchon_ [l=es] {_httpimg_/es/edtchon.gif}
+_widthedtchx_ [l=es] {65}
+_heightedtchx_ [l=es] {30}
+
+## "EXPANDIR ÍNDICE" ## document_button ## eexpc ##
+_httpiconeexpcof_ [l=es] {_httpimg_/es/eexpcof.gif}
+_httpiconeexpcon_ [l=es] {_httpimg_/es/eexpcon.gif}
+_widtheexpcx_ [l=es] {86}
+_heighteexpcx_ [l=es] {30}
+
+## "CONTRAER TEXTO" ## document_button ## etsec ##
+_httpiconetsecof_ [l=es] {_httpimg_/es/etsecof.gif}
+_httpiconetsecon_ [l=es] {_httpimg_/es/etsecon.gif}
+_widthetsecx_ [l=es] {90}
+_heightetsecx_ [l=es] {30}
+
+## "RESALTAR" ## document_button ## ehl ##
+_httpiconehlof_ [l=es] {_httpimg_/es/ehlof.gif}
+_httpiconehlon_ [l=es] {_httpimg_/es/ehlon.gif}
+_widthehlx_ [l=es] {65}
+_heightehlx_ [l=es] {30}
+
+## "NO RESALTAR" ## document_button ## enhl ##
+_httpiconenhlof_ [l=es] {_httpimg_/es/enhlof.gif}
+_httpiconenhlon_ [l=es] {_httpimg_/es/enhlon.gif}
+_widthenhlx_ [l=es] {65}
+_heightenhlx_ [l=es] {30}
+
+
+
+######################################################################
+# 'search' page
+package query
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+# this if statement produces the text 'results n1 - nn for query: querystring' or 
+# 'No matches for query: querystring', depending on whether or not there were
+# any matches
+_textquerytitle_ [l=es] {_If_(_thislast_,resultados _thisfirst_ - _thislast_ para la petici&oacute;n:_cgiargq_,No se encontraron resultados para la petici&oacute;n: _cgiargq_)}
+
+_textnoquerytitle_ [l=es] {P&aacute;gina de b&uacute;squeda}
+
+_texticonthispage_ [l=es] {buscar}
+_textsome_ [l=es] {_If_(_cgiargb_,clasificado,algunas de)}
+_textall_ [l=es] {_If_(_cgiargb_,boleano,todas)}
+_texticonqueryresultsbar_ [l=es] {}
+_textfreqmsg1_ [l=es] {Palabras contadas: }
+_textpostprocess_ [l=es] {_If_(_quotedquery_,<br><i>postprocesado para encontrar _quotedquery_</i>
+)}					     
+
+_textmorethan_ [l=es] {M&aacute;s de }
+_textapprox_ [l=es] {Acerca de }
+_textnodocs_ [l=es] {No hay documentos que correspondan a la petici&oacute;n.}
+_text1doc_ [l=es] {un documento corresponde a la petici&oacute;n.}
+_textlotsdocs_ [l=es] {documentos corresponden a la petici&oacute;n.}
+_textmatches_ [l=es] {Correspondencias }
+_textbeginsearch_ [l=es] {Iniciar la b&uacute;squeda}
+
+# the textselect macro may need to be overridden for some collections
+# _hselection_, _jselection_ and _nselection_ are set from within the server
+# some or all of them may remain unset
+_textselect_ [l=es] {_If_(_cgiargb_,_textadvancedsearch_,_textsimplesearch_)}
+
+_textsimplesearch_ [l=es] {Buscar _If_(_hselection_, _hselection_)_If_(_jselection_,_textjselect_)_If_(_nselection_, en idioma _nselection_) 
+que contengan _querytypeselection_ las palabras}
+
+_textadvancedsearch_ [l=es] {Buscar _If_(_hselection_, _hselection_, _defaultindextext_)_If_(_jselection_,_textjselect_)_If_(_nselection_, en idioma _nselection_) 
+utilizando la petici&oacute;n _querytypeselection_}
+
+_textjselect_ [l=es] {_If_(_hselection_, de) _jselection_}
+
+_querytypeselection_ [l=es] {
+<select name="t">
+<option value="1"_If_(_cgiargt_, selected)>_textsome_
+<option value="0"_If_(_cgiargt_,, selected)>_textall_
+</select>
+}
+
+_textstemon_ [l=es] { (ignorar las terminaciones de las palabras)}
+_textclearhistory_ [l=es] {Borrar Historia}
+_textexpand_ [l=es] {Expandir}
+_textcontract_ [l=es] {Contraer}
+_textsearchhistory_ [l=es] {Buscar en la Historia}
+_textquery_ [l=es] {Petici&oacute;n}
+_textresults_ [l=es] {Resultados}
+_textview_ [l=es] {Ver}
+_textnohistory_ [l=es] {La b&uacute;squeda en la historia no est&aacute; disponible}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "buscar" ## green_title ## h_search ##
+_httpiconhsearch_ [l=es] {_httpimg_/es/h\_search.gif}
+_widthhsearch_ [l=es] {200}
+_heighthsearch_ [l=es] {57}
+
+## "resultados" ## green_bar_left_aligned ## qryresb ##
+_httpiconqryresb_ [l=es] {_httpimg_/es/qryresb.gif}
+_widthqryresb_ [l=es] {_pagewidth_}
+_heightqryresb_ [l=es] {17}
+
+## "mostrar" ## hand_made ##
+_httpicondisplay_ [l=es] {_httpimg_/display.gif}
+_widthdisplay_ [l=es] {60}
+_heightdisplay_ [l=es] {20}
+
+
+
+######################################################################
+# 'preferences' page
+package preferences
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textsearchprefs_ [l=es] {Preferencias de b&uacute;squeda}
+_textcollectionprefs_ [l=es] {Preferencias de colecciones}
+_textpresentationprefs_ [l=es] {Preferencias de presentaci&oacute;n}
+_textpreferences_ [l=es] {Preferencias}
+_textignorecase_ [l=es] { ignorar diferencias entre may&uacute;sculas y min&uacute;sculas}
+_textmatchcase_ [l=es] { deben corresponder may&uacute;sculas y min&uacute;sculas}
+_textstem_ [l=es] { ignorar las terminaciones de las palabras}
+_textnostem_ [l=es] { debe corresponder la palabra completa}
+_textprefop_ [l=es] {Regresa hasta _maxdocoption_ resultados con _hitsperpageoption_ aciertos por p&aacute;gina.}
+_textextlink_ [l=es] {Acceder a p&aacute;ginas de Web externas: }
+_textintlink_ [l=es] {Documentos fuente recuperados de:}
+_textlanguage_ [l=es] {Idioma de la interfaz: }
+_textencoding_ [l=es] {Codificaci&oacute;n: }
+_textformat_ [l=es] {Formato de la interfaz: }
+_textall_ [l=es] {todas}
+_textsimplemode_ [l=es] {b&uacute;squeda simple}
+_textadvancedmode_ [l=es] {b&uacute;squeda avanzada (permite b&uacute;squedas boleanas utilizando !, &, | y par&eacute;ntesis)}
+_textlinkinterm_ [l=es] {a trav&eacute;s de una p&aacute;gina intermedia}
+_textlinkdirect_ [l=es] {ir directamente ah&iacute;}
+_textdigitlib_ [l=es] {la biblioteca digital}
+_textweb_ [l=es] {el web}
+_textlangeng_ [l=es] {Ingl&eacute;s}
+_textlanggerman_ [l=es] {Alem&aacute;n}
+_textlangfrench_ [l=es] {Franc&eacute;s}
+_textlangspanish_ [l=es] {Espa&ntilde;ol}
+_textlangmaori_ [l=es] {M_amn_ori}
+_textlangchinese_ [l=es] {Chino}
+_textgraphical_ [l=es] {Gr&aacute;fica}
+_texttextual_ [l=es] {S&oacute;lo texto}
+_textcollectionoption_ [l=es] {<p>
+Subcolecciones a incluir:
+<br>}
+_textfcoption_ [l=es] {Incluir la barra de navegaci&oacute;n en la parte superior de las p&aacute;ginas del documento}
+_texthloption_ [l=es] {Resaltar los t&eacute;rminos de la b&uacute;squeda dentro del documento}
+_texthistorydisplay_ [l=es] {mostrar la historia de la b&uacute;squeda}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+## "preferencias" ## green_title ## h_pref ##
+_httpiconhpref_ [l=es] {_httpimg_/es/h\_pref.gif}
+_widthhpref_ [l=es] {200}
+_heighthpref_ [l=es] {57}
+
+
+
+######################################################################
+# 'delete search history' page
+package delhistory
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textdsh_ [l=es] {Borrar la historia de la b&uacute;squeda}
+
+_textselectdelete_ [l=es] {<a href="_httpclearhistory_&hdh=1">Borre todos los 
+registros</a> o seleccione los registros a <select name=hmode>
+<option value=save>conservar<option value=delete selected>borrar</select><br>
+Los registros pueden ser seleccionados escribiendo sus n&uacute;meros en el 
+cuadro, <br> o presionando en los cuadros de cada registro.<br> Los valores 
+aceptados son 1,2,3-6,7- etc }
+
+_textclearselected_ [l=es] {Borrar seleccionados}
+_textselect_ [l=es] {seleccionar}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
+
+
+
+######################################################################
+# 'help' page -- this is lower priority for translating than the
+# rest of this file
+package help
+######################################################################
+
+
+#------------------------------------------------------------
+# text macros
+#------------------------------------------------------------
+
+_textHelp_ [l=es] {Ayuda}
+_textSearchshort_ [l=es] {buscar palabras clave}
+_textSeriesshort_ [l=es] {acceder a las publicaciones por series}
+_textDateshort_ [l=es] {acceder a las publicaciones por fecha}
+_textSubjectshort_ [l=es] {acceder a las publicaciones por tema}
+_textTitleshort_ [l=es] {acceder a las publicaciones por t&iacute;tulo}
+_textBrowseshort_ [l=es] {navegar en las publicaciones}
+_textCreatorshort_ [l=es] {acceder a las publicaciones por autor}
+_textOrganizationshort_ [l=es] {acceder a las publicaciones por organizaci&oacute;n}
+_textHowtoshort_ [l=es] {acceder a las publicaciones por lista de c&oacute;mo}
+_textTopicshort_ [l=es] {acceder a las publicaciones por t&oacute;pico}
+_textPeopleshort_ [l=es] {acceder a las publicaciones por gente}
+_textdefaultshorttext_ [l=es] {clasificaci&oacute;n no definida}
+
+_textSearchlong_ [l=es] { <p>Puede <i>buscar palabras clave</i> que aparecen en 
+el texto desde la p&aacute;gina de "b&uacute;squeda". &Eacute;sta es la primera p&aacute;gina que 
+aparece cuando usted inicia y puede ser accesada desde otras p&aacute;ginas al 
+presionar el bot&oacute;n de <i>buscar</i>.  }
+
+_textTitlelong_ [l=es] { <p>Puede <i>acceder a las publicaciones por t&iacute;tulo</i> 
+presionando el bot&oacute;n <i>titulos a-z</i>. El resultado ser&aacute; una 
+lista de libros en orden alfab&eacute;tico.  }
+
+_textOrganizationlong_ [l=es] { <p>Puede <i>acceder a las publicaciones por 
+organizaci&oacute;n</i> presionando el bot&oacute;n <i>organizaci&oacute;n</i>. El resultado 
+ser&aacute; una lista de organizaciones.  }
+
+_textHowtolong_ [l=es] { <p>Puede <i>acceder a las publicaciones por una lista 
+de c&oacute;mo</i> presionando el bot&oacute;n <i>c&oacute;mo</i>. El resultado 
+ser&aacute; una lista de c&oacute;mos.  }
+
+_textCreatorlong_ [l=es] { <p>Puede <i>acceder a publicaciones por autor</i> 
+presionando el bot&oacute;n <i>autores a-z</i>. El resultado ser&aacute; una 
+lista de libros ordenados por el apellido del autor.  }
+
+_textTopiclong_ [l=es] { <p>Puede <i>acceder a las publicaciones por t&oacute;pico</i> 
+presionando el bot&oacute;n de <i>t&oacute;pico</i>. El resultado ser&aacute; 
+una lista de t&oacute;picos para navegarlos.  }
+
+_textSubjectlong_ [l=es] { <p>Puede <i>acceder a las publicaciones por tema</i> 
+presionando el bot&oacute;n de <i>temas</i>. El resultado ser&aacute; una lista de temas, 
+representados por libreros.  }
+
+_textSerieslong_ [l=es] { <p>Puede <i>acceder a las publicaciones por series</i> 
+presionando el bot&oacute;n de <i>series</i>. El resultado ser&aacute; una lista 
+de las series que se encuentran en la colecci&oacute;n.  }
+
+_textDatelong_ [l=es] { <p>Puede <i>acceder a las publicaciones por fecha</i> 
+presionando el bot&oacute;n de <i>fechas</i>. El resultado ser&aacute; una lista
+de todas las publicaciones, ordenadas cronol&oacute;gicamente.  }
+
+_textBrowselong_ [l=es] { <p> Puede <i>navegar en las publicaciones</i> presionando 
+el bot&oacute;n de <i>navegar</i>.  }
+
+_textPeoplelong_ [l=es] { <p>Puede <i>acceder a las publicaciones por gente</i> 
+presionando el bot&oacute;n <i>gente a-z</i>. El resultado ser&aacute; una lista
+ordenada por apellido.  }
+
+_textdefaultlongtext_ [l=es] { <p>Pulse el bot&oacute;n <i>desconocido</i> para navegar 
+en las publicaciones (el listado ser&aacute; ordenado por un campo desconocido).  }
+
+_texthelptopics_ [l=es] {
+
+<h2 align=left>T&oacute;picos</h2>
+<ul>
+  <li><a href="\#finding-information">_textsimplehelpheading_</a>
+  _topicreadingdocs_
+  <li><a href="\#searching">&#191;C&oacute;mo buscar palabras clave?</a>
+<ul>
+  <li><a href="\#query-terms">T&eacute;rminos de la b&uacute;squeda</a>
+  <li><a href="\#query-type">Tipo de petici&oacute;n</a>
+  <li><a href="\#scope-of-queries">Rango de las b&uacute;squedas</a>
+</ul>
+  <li><a href="\#preferences">_textchangeprefs_</a>
+<ul>
+  <li><a href="\#col-prefs">Preferencias de colecci&oacute;n</a>
+  <li><a href="\#pres-prefs">Preferencias de presentaci&oacute;n</a>
+  <li><a href="\#search-prefs">Preferencias de b&uacute;squeda</a>
+</ul>
+</ul>
+}
+
+# there are 4 versions of this section of the help text.
+# which version is used is currently set within the server
+# (it should probably use the macro language e.g. [type=book])
+# 1 = html (like fao collections) -- section is empty
+# 2 = book (like hdl collection) -- macros beginning with book
+# 3 = bibliographic (like csbib) -- macros beginning with bib
+# 4 = standard (like gberg) -- the default
+
+_topicreadingdocs_ [l=es] {<li><a href="\#reading-docs">_textreadingdocs_</a>}
+
+_textreadingdocs_ [l=es] {&#191;C&oacute;mo leer los documentos?}
+_booktextreadingdocs_ [l=es] {&#191;C&oacute;mo leer los libros?}
+_bibtextreadingdocs_ [l=es] {Obtener m&aacute;s informaci&oacute;n sobre un elemento bibliogr&aacute;fico}
+
+_texthelpreadingdocs_ [l=es] {
+<p>_iconblankbar_
+<a name=reading-docs>
+<h2>_textreadingdocs_</h2>
+
+<p>Puede notar cuando ha llegado a un documento en particular porque su 
+t&iacute;tulo y autor aparecen en la parte superior izquierda de la 
+p&aacute;gina. Al lado de &eacute;stos est&aacute; el n&uacute;mero de la 
+p&aacute;gina actual, un cuadro que le permite seleccionar la nueva 
+p&aacute;gina y las flechas de adelante y atr&aacute;s.
+
+<p>Debajo est&aacute; el texto de la secci&oacute;n actual. Cuando lo haya 
+leido, las flechas que se encuentran en la parte inferior pueden llevarlo a la 
+secci&oacute;n siguiente o regresarlo a la secci&oacute;n anterior.
+
+<p>Abajo del t&iacute;tulo y autor se encuentran tres botones. Presione
+<i>texto completo</i> para desplegar el texto completo de documento actual. 
+Si el documento es extenso, este proceso tomar&aacute; alg&uacute;n tiempo y 
+utilizar&aacute; mucha memoria!. Presione <i>separar</i> para crear un nueva 
+ventana de su navegador para este documento (esto es &uacute;til si desea 
+comparar documentos o leer dos a la vez). Finalmente, cuando realiza una 
+b&uacute;squeda, las palabras a buscar aparecen resaltadas; presione <i>sin 
+resaltar</i> para eliminar esta apariencia.
+
+<p>
+<table cellspacing="0" cellpadding="2" border="0">
+<tr><td colspan=2><img src="_httpiconmore_" border="0"></td><td>Presione la flecha para ir a la secci&oacute;n siguiente ...</td></tr>
+<tr><td colspan=2><img src="_httpiconless_" border="0"></td><td>... o regresar a la secci&oacute;n anterior</td></tr>
+<tr><td><img src="_document:httpiconealltof_" border="0"></td><td><img 
+src="_document:httpiconetsecof_" border="0"></td><td>Desplegar el texto completo, o no</td></tr>
+<tr><td colspan=2><img src="_document:httpiconedtchof_" border="0"></td><td>Abrir esta p&aacute;gina en una nueva ventana</td></tr>
+<tr><td><img src="_document:httpiconehlof_" border="0"></td><td><img
+src="_document:httpiconenhlof_" border="0"></td><td>Resaltar o no los t&eacute;rminos buscados</td></tr>
+</table>
+}
+
+_booktexthelpreadingdocs_ [l=es] {
+<p>_iconblankbar_
+<a name=reading-docs>
+<h2>_textreadingdocs_</h2>
+
+<p>Puede notar cuando ha llegado a un libro en particular porque la 
+fotograf&iacute;a de su portada aparece en la parte izquierda de la 
+p&aacute;gina. Al lado de la fotograf&iacute;a est&aacute; el &iacute;ndice 
+de contenido con una flecha que le indica d&oacute;nde est&aacute; usted. 
+Este &iacute;ndice es expandible: presione las carpetas para abrirlas o 
+cerrarlas. Presione en el libro abrierto, que se encuentra en la parte 
+superior, para cerrarlo.
+
+<p>Debajo est&aacute; el texto de la secci&oacute;n actual. Cuando lo haya 
+leido, las flechas que se encuentran en la parte inferior pueden llevarlo a la
+secci&oacute;n siguiente o regresarlo a la secci&oacute;n anterior.
+
+<p>Abajo de la fotograf&iacute;a se encuentran cuatro botones. Presione sobre 
+<i>texto completo</i> para desplegar el texto completo de la secci&oacute;n 
+actual o del libro. Si el libro es extenso, este proceso tomar&aacute; 
+alg&uacute;n tiempo y utilizar&aacute; mucha memoria!. Presione <i>expandir 
+&iacute;ndice</i> para expandir el &iacute;ndice completo y as&iacute; pueda 
+ver todos los t&iacute;tulos de cap&iacute;tulos y subsecciones. Presione 
+<i>separar</i> para crear un nueva ventana de su navegador para este documento 
+(esto es &uacute;til si desea comparar libros o leer dos a la vez). Finalmente, 
+cuando realiza una b&uacute;squeda, las palabras a buscar aparecen resaltadas; 
+presione <i>sin resaltar</i> para eliminar esta apariencia.
+
+<p>
+<table cellspacing="0" cellpadding="2" border="0">
+<tr><td colspan=2><img src="_httpiconbshelf_" border="0"></td><td>Abrir este librero</td></tr>
+<tr><td><img src="_httpiconopenbook_" border="0"></td><td><img 
+src="_httpiconbook_" border="0"></td><td>Abrir/cerrar este libro</td></tr>
+<tr><td colspan=2><img src="_httpiconitext_" border="0"></td><td>Ver esta secci&oacute;n del texto</td></tr>
+<tr><td><img src="_document:httpiconealltof_" border="0"></td><td><img 
+src="_document:httpiconetsecof_" border="0"></td><td>Desplegar el texto completo, o no</td></tr>
+<tr><td><img src="_document:httpiconeexpcof_" border="0"></td><td><img
+src="_document:httpiconeconcof_" border="0"></td><td>Expandir o no el &iacute;ndice de contenido</td></tr>
+<tr><td colspan=2><img src="_document:httpiconedtchof_" border="0"></td><td>Abrir esta p&aacute;gina en una nueva ventana</td></tr>
+<tr><td><img src="_document:httpiconehlof_" border="0"></td><td><img
+src="_document:httpiconenhlof_" border="0"></td><td>Resaltar o no los t&eacute;rminos de la b&uacute;squeda</td></tr>
+<tr><td colspan=2><img src="_httpiconmore_" border="0"></td><td>Presionar la flecha para ir a la secci&oacute;n siguiente ...</td></tr>
+<tr><td colspan=2><img src="_httpiconless_" border="0"></td><td>... o regresar a la secci&oacute;n anterior</td></tr>
+</table>
+}
+
+_bibtexthelpreadingdocs_ [l=es] {
+<p>_iconblankbar_
+<a name=reading-docs>
+<h2>_textreadingdocs_</h2>
+
+<p>Algunos elementos bibliogr&aacute;ficos contienen m&aacute;s 
+informaci&oacute;n, por ejemplo un resumen. Puede notar desde la p&aacute;gina 
+de resultados si este es el caso porque que se muestran con el &iacute;cono
+ _icontext_ en lugar del &iacute;cono _iconblanktext_.
+
+<p>Presionar el &iacute;cono _icontext_ le dar&aacute; m&aacute;s 
+informaci&oacute;n acerca del elemento bibliogr&aacute;fico.
+
+<p> Abajo del elemento bibliogr&aacute;fico se encuentran dos botones. Presione
+<i>separar</i> para crear un nueva ventana de su navegador para este 
+libro (esto es &uacute;til si desea comparar elementos bibliogr&aacute;ficos). 
+Finalmente, cuando realiza una b&uacute;squeda, las palabras a buscar aparecen 
+resaltadas; presione <i>sin resaltar</i> para eliminar esta apariencia.
+
+<p>
+<table cellspacing="0" cellpadding="2" border="0">
+<tr><td colspan=2><img src="_document:httpiconedtchof_" border="0"></td><td>Abrir esta p&aacute;gina en una nueva ventana</td></tr>
+<tr><td><img src="_document:httpiconehlof_" border="0"></td><td><img
+src="_document:httpiconenhlof_" border="0"></td><td>Resaltar o no los t&eacute;rminos buscados</td></tr>
+</table>
+}
+
+_texthelpsearching_ [l=es] {
+<h2>&#191;C&oacute;mo buscar palabras clave?</h2>
+<p>
+  Desde la p&aacute;gina de b&uacute;squeda, hacer una petici&oacute;n siguiendo estos pasos:<p>
+  <ol><li>Especificar qu&eacute; documentos quiere buscar
+      <li>Decir si quiere buscar todas las palabras o s&oacute;lo algunas
+      <li>Escribir las palabras que quiere buscar
+      <li>Presionar el bot&oacute;n de <i>Iniciar la b&uacute;squeda</i>
+  </ol>
+  
+<p>Cuando hace una petici&oacute;n, se mostrar&aacute;n los t&iacute;tulos de 
+veinte documentos resultantes. Existe un bot&oacute;n al final que lo 
+llevar&aacute; a los siguientes veinte documentos. De ah&iacute; 
+encontrar&aacute; botones para llevarlo a los terceros veinte o regresar a los 
+primeros veinte, etc&eacute;tera. Presione el t&iacute;tulo de cualquier 
+documento o el peque&ntilde;o bot&oacute;n al lado de &eacute;l, para verlo. 
+
+<p>El n&uacute;mero m&aacute;ximo documentos resultantes es de 100. Puede 
+  cambiar este n&uacute;mero presionando el bot&oacute;n de <i>preferencias</i>
+  que se encuentra en la parte superior de la p&aacute;gina.<p>
+
+<p>_iconblankbar_
+<a name=query-terms>
+<h3>T&eacute;rminos de la b&uacute;squeda</h3>
+
+<p>Lo que escribe en el cuadro de petici&oacute;n es interpretado como una 
+lista de palabras llamadas "t&eacute;rminos de la b&uacute;squeda". Cada 
+t&eacute;rmino contiene letras y d&iacute;gitos. Los t&eacute;rminos se separan 
+por el espacio en blanco. Si aparecen otros caracteres, como los de 
+puntuaci&oacute;n, &eacute;stos sirven para separar los t&eacute;rminos 
+como si fueran espacios y son ignorados. No puede buscar palabras que incluyan 
+puntuaci&oacute;n.
+
+<p>Por ejemplo, la petici&oacute;n<p>
+    <ul><kbd>Agro-sivicultura en las Islas del Pac&iacute;fico: Sistemas de Sustento (1993)</kbd></ul>
+      <p>ser&aacute; tratado de igual manera que<p>
+      <ul><kbd>Agro sivicultura en las Islas del Pac&iacute;fico Sistemas de Sustento 1993 </kbd></ul><p>
+      
+<p>_iconblankbar_
+<a name=query-type>
+<h3>Tipo de petici&oacute;n</h3>
+
+<p>Existen dos tipos de petici&oacute;n.
+
+<ul>
+  <li>Peticiones de <b>todas</b> las palabras. &Eacute;sta busca documentos que 
+      contengan todas las palabras que especifique. Los documentos que 
+      satisfagan la petici&oacute;n ser&aacute;n desplegados en orden 
+      alfab&eacute;tico. <p>     
+      
+  <li>Peticiones de <b>alguna(s)</b> palabra(s).  Solamente liste los
+      t&eacute;rminos que probablemente aparecer&aacute;n en los documentos que 
+      est&eacute; buscando. Los documentos se ordenar&aacute;n de acuerdo a que 
+      tanto coincidieron con su petici&oacute;n. Cuando se determina el grado de
+      correspondencia, 
+
+      <p><ul>
+        <li> entre m&aacute;s t&eacute;rminos buscados contenga el documento, 
+             satisfacer&aacute; mejor su petici&oacute;n;
+        <li> los t&eacute;rminos no comunes son m&aacute;s importantes que los 
+             comunes;
+        <li> los documentos m&aacute;s peque&ntilde;os tienen m&aacute;s 
+             probabilidades que los grandes de corresponder a su solicitud.
+      </ul>      
+</ul>
+
+<p>Utilice tantos t&eacute;rminos de b&uacute;squeda como desee, una 
+oraci&oacute;n completa, o quizas todo un p&aacute;rrafo. Si especifica un 
+s&oacute;lo t&eacute;rmino, los documentos ser&aacute;n 
+ordenados por frecuencia de ocurrencia.<p>
+_texthelpscope_
+}
+
+_textchangeprefs_ [l=es] {Cambiando sus preferencias}
+
+_texthelppreferences_ [l=es] {<h2>_textchangeprefs_</h2>
+
+<p>Cuando presione el bot&oacute;n de <i>preferencias</i>, de la parte superior de la
+p&aacute;gina, ser&aacute; capaz de cambiar algunas caracter&iacute;sticas de la 
+interfaz para satisfacer sus propios requisitos.
+
+<p>_iconblankbar_
+<a name=col-prefs>
+<h3 align=left>Perefencias de colecci&oacute;n</h3>
+<p>
+Algunas colecciones se componen de varias subcolecciones, las cuales pueden
+buscarse de forma independiente o juntas, como una unidad. De esta 
+manera, puede seleccionar qu&eacute; subcolecciones desea incluir en sus 
+b&uacute;squedas en la p&aacute;gina de preferencias.
+
+<p>_iconblankbar_
+<a name=pres-prefs>
+<h3 align=left>Preferencias de presentaci&oacute;n</h3>
+<p>
+Dependiendo de la colecci&oacute;n, pueden existir muchas opciones para definir 
+la manera de la presentaci&oacute;n.
+<p>
+Las colecciones de p&aacute;ginas de Web le permiten eliminar la barra de 
+navegaci&oacute;n de Greenstone de la parte superior de cada p&aacute;gina, 
+de modo que una vez terminada la b&uacute;squeda se encontrar&aacute; en la 
+p&aacute;gina correspondiente sin los encabezados de Greenstone. Para realizar 
+otra b&uacute;squeda tendr&aacute; que utilizar el bot&oacute;n "regresar" de 
+su navegador. Estas colecciones tambi&eacute;n le permiten eliminar el mensaje 
+de alerta de Greenstone cuando seleccione una liga que lo lleve fuera de la 
+colecci&oacute;n de la biblioteca digital y de Web en si. Y en algunas 
+colecciones del Web puede controlar si las ligas de la p&aacute;gina de 
+"Resultados de la b&uacute;squeda" lo llevan directo al URL en cuesti&oacute;n 
+o m&aacute;s bien a la copia de la p&aacute;gina de la biblioteca digital.
+
+<p>
+Las colecciones que son capaces de ser representadas en diferentes idiomas 
+le permiten especificar el idioma de la interfaz. Si el idioma es Chino, 
+puede especificar tambi&eacute;n cu&aacute;les son los est&aacute;ndares 
+Chinos de codificaci&oacute;n que utiliza su navegador.
+
+<p>
+Finalmente, todas las colecciones le permiten cambiar a una interfaz de texto
+diferente de la gr&aacute;fica. Esto es muy &uacute;til para los usuarios con 
+problemas visuales que utilizan fuentes grandes o sintetizadores de voz como 
+salida.
+
+<p>_iconblankbar_
+<a name=search-prefs>
+<h3 align=left>Preferencias de b&uacute;squeda</h3>
+Dos pares de botones controlan la diferencia entre may&uacute;sculas y 
+min&uacute;sculas y las ra&iacute;ces de las b&uacute;squedas que hace. 
+El primer conjunto de botones controla si deben coincidir may&uacute;sculas 
+o min&uacute;sculas. El segundo conjunto controla si se ignoran las 
+terminaciones de las palabras o no (ra&iacute;ces).
+
+<p>Por ejemplo, si los botones de <i>ignorar diferencias entre may&uacute;sculas
+y min&uacute;sculas</i> y el de <i>ignorar terminaciones de palabras</i> 
+est&aacute;n seleccionados, la b&uacute;squeda<p>
+    <ul><kbd>Construcciones Africanas</kbd></ul>
+      <p>ser&aacute; considerada al igual que <p>
+      <ul><kbd>constructores africanos</kbd></ul><p>
+      porque la letra may&uacute;scula en "Africanas" sera transformada a 
+      min&uacute;scula, y los sufijos "ciones" y "nas" se eliminaran de 
+      "Construcciones" y "Africanas" respectivamente ( de la misma manera, 
+      "tores" y "nos" se eliminar&aacute;n de "constructores" y "africanos").
+
+<p>Tambi&eacute;n puede cambiar a un modo "avanzado" de consulta que le permite 
+combinar t&eacute;rminos utilizando Y (&), O (|), y NO (!). Esto le 
+permitir&aacute; especificar consultas m&aacute;s precisas.
+
+<p>Finalmente, puede controlar el n&uacute;mero de aciertos regresados, y el
+n&uacute;mero de estos presentado en cada pantalla completa.
+}
+
+_texttanumbrowseoptions_ [l=es] {Existen _numbrowseoptions_ manera(s) de encontrar informaci&oacute;n en esta colecci&oacute;n:}
+
+_textsimplehelpheading_ [l=es] {&#191;C&oacute;mo encontrar informaci&oacute;n?}
+
+_texthelpscope_ [l=es] {
+<p>_iconblankbar_
+<a name=scope-of-queries>
+<h3 align=left>Rango de las b&uacute;squedas</h3> 
+
+<p>
+En la mayor&iacute;a de las colecciones puede escoger diferentes &iacute;ndices 
+para buscar. Por ejemplo, puede haber &iacute;ndices por autor o t&iacute;tulo. 
+Tambi&eacute;n puede haber &iacute;ndices por cap&iacute;tulo o p&aacute;rrafo. 
+Generalmente, se recupera el documento correspondiente sin importar &eacute;l 
+&iacute;ndice por el cual se busca. 
+<p>Si los documentos son libros, estos aparecer&aacute;n en el lugar 
+predefinido.
+}
+
+
+#------------------------------------------------------------
+# icons
+#------------------------------------------------------------
Index: /branches/New_Config_Format-branch/gsdl/packages/mg/lib/GCC.mak
===================================================================
--- /branches/New_Config_Format-branch/gsdl/packages/mg/lib/GCC.mak	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/packages/mg/lib/GCC.mak	(revision 1278)
@@ -0,0 +1,84 @@
+###########################################################################
+#
+# gcc win32 makefile -- mg\lib
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 2000  The New Zealand Digital Library Project
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+
+AR = ar
+RANLIB = ranlib
+CC = gcc
+DELETE = del
+
+CPPFLAGS = -g
+DEFS = -DQUIET -DHAVE_CONFIG_H -D__WIN32__ -D_LITTLE_ENDIAN
+INCLUDES = -I".." -I"."
+
+o = .o
+ 
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS)
+ 
+.SUFFIXES:
+.SUFFIXES: .c $o
+.c$o:
+	$(COMPILE) $<
+
+
+HEADERS = \
+    bitio_m_random.h filestats.h local_strings.h lovinstem.h \
+    bitio_m_stdio.h getopt.h memlib.h bitio_gen.h bitio_mem.h \
+    mgheap.h messages.h bitio_m.h bitio_mems.h huffman.h \
+    timing.h bitio_m_mem.h bitio_random.h huffman_mem.h \
+    perf_hash.h bitio_m_mems.h bitio_stdio.h huffman_stdio.h \
+    sptree.h rx.h pathmax.h getpagesize.h random.h \
+    win32in.h simplefrenchstem.h unitool.h
+
+SOURCES = \
+    bitio_random.c mgheap.c memlib.c bitio_stdio.c huffman.c \
+    messages.c bitio_gen.c filestats.c huffman_mem.c \
+    perf_hash.c bitio_mem.c getopt.c huffman_stdio.c \
+    sptree.c bitio_mems.c getopt1.c local_strings.c \
+    lovinstem.c timing.c rx.c alloca.c error.c xmalloc.c \
+    strstr.c ftruncate.c strcasecmp.c random.c win32in.c \
+    simplefrenchstem.c unitool.h
+
+OBJECTS = \
+    rx$o bitio_random$o mgheap$o memlib$o bitio_stdio$o \
+    huffman$o messages$o bitio_gen$o filestats$o huffman_mem$o \
+    perf_hash$o bitio_mem$o getopt$o huffman_stdio$o sptree$o \
+    bitio_mems$o getopt1$o local_strings$o lovinstem$o \
+    timing$o error$o xmalloc$o random$o win32in$o \
+    simplefrenchstem$o unitool$o
+ 
+all : libmg.a
+
+libmg.a : $(OBJECTS)
+	$(DELETE) libmg.a
+	$(AR) cru libmg.a $(OBJECTS)
+	$(RANLIB) libmg.a
+
+install: 
+ 
+clean: 
+	$(DELETE) *$o
+	$(DELETE) libmg.a
Index: /branches/New_Config_Format-branch/gsdl/packages/mg/src/text/GCC.mak
===================================================================
--- /branches/New_Config_Format-branch/gsdl/packages/mg/src/text/GCC.mak	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/packages/mg/src/text/GCC.mak	(revision 1278)
@@ -0,0 +1,205 @@
+###########################################################################
+#
+# gcc win32 makefile -- mg\src\text
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 2000  The New Zealand Digital Library Project
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+
+AR = ar
+RANLIB = ranlib
+CC = gcc
+DELETE = del
+INSTALL = copy
+
+o = .o
+e = .exe
+/ = \\
+
+CPPFLAGS = -g
+DEFS = -DNZDL -DQUIET -DSHORT_SUFFIX -DPARADOCNUM -DHAVE_CONFIG_H \
+       -D_LITTLE_ENDIAN
+LIBS = ..$/..$/lib$/libmg.a
+ 
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
+LINK = $(CC) $(LDFLAGS) -o $@
+ 
+.SUFFIXES:
+.SUFFIXES: .c $o
+.c$o:
+	$(COMPILE) $<
+ 
+INCLUDES = -I"..$/.." -I"..$/..$/lib"
+
+
+SOURCES = \
+  backend.c               locallib.c              mg_weights_build.c   \
+  bool_optimiser.c        mg.special.c            mgdictlist.c         \
+  bool_parser.c           mg_compression_dict.c   mgquery.c            \
+  bool_query.c            mg_errors.c             mgstat.c             \
+  bool_tester.c           mg_fast_comp_dict.c     mg_decompress_text.c \
+  bool_tree.c             mg_files.c              query.docnums.c      \
+  commands.c              mg_hilite_words.c       query.ranked.c       \
+  comp_dict.c             mg_invf_dict.c          read_line.c          \
+  environment.c           mg_invf_dump.c          stem_search.c        \
+  mg_invf_merge.c         stemmer.c               mg_stem_idx.c        \
+  mg_invf_rebuild.c       term_lists.c            mgstemidxlist.c      \
+  invf_get.c              mg_passes.c             text.pass1.c         \
+  ivf.pass1.c             mg_perf_hash_build.c    text.pass2.c         \
+  ivf.pass2.c             mg_text_estimate.c      text_get.c           \
+  lists.c                 mg_text_merge.c         weights.c            \
+  query_term_list.c       words.c
+
+HEADERS = \
+  backend.h          conditions.h       locallib.h         term_lists.h \
+  bool_optimiser.h   environment.h      mg.h               text.h       \
+  bool_parser.h      globals.h          mg_errors.h        text_get.h   \
+  bool_query.h       hash.h             mg_files.h         warranty.h   \
+  bool_tree.h        help.mg.h          mg_merge.h         weights.h    \
+  build.h            invf.h             read_line.h        words.h      \
+  commands.h         invf_get.h         stem_search.h                   \
+  comp_dict.h        lists.h            stemmer.h                       \
+  query_term_list.h
+
+EXEC = \
+  mgquery$e mg_weights_build$e mgstat$e mg_invf_dump$e \
+  mg_invf_dict$e mg_invf_rebuild$e mgdictlist$e \
+  mg_passes$e mg_perf_hash_build$e mg_compression_dict$e \
+  mg_text_estimate$e mg_fast_comp_dict$e mg_hilite_words$e \
+  mg_invf_merge$e mg_text_merge$e bool_tester$e \
+  mg_stem_idx$e  mgstemidxlist$e mg_decompress_text$e
+
+all:    $(EXEC) libtextin.a
+
+HILITE_OBJS = mg_hilite_words$o stemmer$o locallib$o words$o
+mg_hilite_words$e: $(HILITE_OBJS)
+	$(LINK) $(HILITE_OBJS) $(LIBS)
+
+BOOL_OBJS = bool_tree$o bool_parser$o bool_optimiser$o bool_tester$o \
+	    term_lists$o stemmer$o stem_search$o mg_errors$o query_term_list$o \
+	    words$o
+bool_tester$e: $(BOOL_OBJS)
+	$(LINK) $(BOOL_OBJS) $(LIBS)
+
+QUERY_OBJS = \
+	mgquery$o locallib$o lists$o \
+	query.ranked$o query.docnums$o stem_search$o \
+	environment$o commands$o weights$o text_get$o stemmer$o \
+	read_line$o mg_errors$o backend$o invf_get$o \
+	term_lists$o bool_tree$o bool_parser$o bool_optimiser$o bool_query$o \
+	query_term_list$o words$o
+mgquery$e: $(QUERY_OBJS)
+	$(LINK) $(QUERY_OBJS) $(LIBS)
+
+commands$o : help.mg.h warranty.h conditions.h
+
+PASSES_OBJS = \
+	mg_passes$o text.pass1$o comp_dict$o stemmer$o \
+	text.pass2$o locallib$o \
+	ivf.pass1$o ivf.pass2$o mg.special$o mg_files$o \
+	words$o
+mg_passes$e: $(PASSES_OBJS)
+	$(LINK) $(PASSES_OBJS) $(LIBS)
+
+WEIGHTS_BUILD_OBJS = mg_weights_build$o mg_files$o
+mg_weights_build$e: $(WEIGHTS_BUILD_OBJS)
+	$(LINK) $(WEIGHTS_BUILD_OBJS) $(LIBS)
+
+COMP_DICT_OBJS = mg_compression_dict$o mg_files$o locallib$o
+mg_compression_dict$e: $(COMP_DICT_OBJS)
+	$(LINK) $(COMP_DICT_OBJS) $(LIBS)
+
+FAST_COMP_OBJS = mg_fast_comp_dict$o mg_files$o locallib$o
+mg_fast_comp_dict$e: $(FAST_COMP_OBJS)
+	$(LINK) $(FAST_COMP_OBJS) $(LIBS)
+
+TEXT_EST_OBJS = mg_text_estimate$o locallib$o comp_dict$o mg_files$o
+mg_text_estimate$e: $(TEXT_EST_OBJS)
+	$(LINK) $(TEXT_EST_OBJS) $(LIBS)
+
+STAT_OBJS = mgstat$o mg_files$o locallib$o
+mgstat$e: $(STAT_OBJS)
+	$(LINK) $(STAT_OBJS) $(LIBS)
+
+INVF_DUMP_OBJS = mg_invf_dump$o locallib$o mg_files$o
+mg_invf_dump$e: $(INVF_DUMP_OBJS)
+	$(LINK) $(INVF_DUMP_OBJS) $(LIBS)
+
+INVF_DICT_OBJS = mg_invf_dict$o mg_files$o locallib$o
+mg_invf_dict$e: $(INVF_DICT_OBJS)
+	$(LINK) $(INVF_DICT_OBJS) $(LIBS)
+
+INVF_REB_OBJS = mg_invf_rebuild$o locallib$o
+mg_invf_rebuild$e: $(INVF_REB_OBJS)
+	$(LINK) $(INVF_REB_OBJS) $(LIBS)
+
+DICTLIST_OBJS = mgdictlist$o locallib$o
+mgdictlist$e: $(DICTLIST_OBJS)
+	$(LINK) $(DICTLIST_OBJS) $(LIBS)
+
+PERF_HASH_OBJS = mg_perf_hash_build$o mg_files$o
+mg_perf_hash_build$e: $(PERF_HASH_OBJS)
+	$(LINK) $(PERF_HASH_OBJS) $(LIBS)
+
+STEM_IDX_OBJS = mg_stem_idx$o mg_files$o stemmer$o locallib$o \
+                mg_errors$o term_lists$o
+mg_stem_idx$e: $(STEM_IDX_OBJS)
+	$(LINK) $(STEM_IDX_OBJS) $(LIBS)
+
+STEM_IDX_LIST_OBJS = mgstemidxlist$o mg_files$o
+mgstemidxlist$e: $(STEM_IDX_LIST_OBJS)
+	$(LINK) $(STEM_IDX_LIST_OBJS) $(LIBS)
+
+DECOMPRESS_TEXT_OBJS = mg_decompress_text$o query_term_list$o mg_files$o mg_errors$o \
+                       text_get$o locallib$o backend$o stem_search$o \
+                       term_lists$o stemmer$o weights$o invf_get$o lists$o
+mg_decompress_text$e: $(DECOMPRESS_TEXT_OBJS)
+	$(LINK) $(DECOMPRESS_TEXT_OBJS) $(LIBS)
+
+TEXT_MERGE_OBJS = mg_text_merge$o mg_files$o locallib$o
+mg_text_merge$e: $(TEXT_MERGE_OBJS)
+	$(LINK) $(TEXT_MERGE_OBJS) $(LIBS)
+
+INVF_MERGE_OBJS = mg_invf_merge$o mg_files$o locallib$o
+mg_invf_merge$e: $(INVF_MERGE_OBJS)
+	$(LINK) $(INVF_MERGE_OBJS) $(LIBS)
+
+install: 
+	$(INSTALL) *$e ..$/..$/..$/..$/bin$/windows
+
+LIB_OBJS = \
+	query_term_list$o \
+	locallib$o lists$o \
+	query.ranked$o query.docnums$o stem_search$o \
+	environment$o commands$o weights$o text_get$o stemmer$o \
+	read_line$o mg_errors$o backend$o invf_get$o \
+	term_lists$o bool_tree$o bool_parser$o bool_optimiser$o \
+	bool_query$o words$o
+
+libtextin.a: $(LIB_OBJS)
+	$(DELETE) libtextin.a
+	$(AR) cru libtextin.a $(LIB_OBJS)
+	$(RANLIB) libtextin.a
+
+clean:
+	$(DELETE) *$o 
+	$(DELETE) *$e
Index: /branches/New_Config_Format-branch/gsdl/perllib/acronym.pm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/perllib/acronym.pm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/perllib/acronym.pm	(revision 1278)
@@ -0,0 +1,291 @@
+###########################################################################
+#
+# acronym.pm --
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+# class to hold acronyms
+
+use strict;
+#use diagnostics;
+
+package acronym;
+#use Class::Struct;
+
+
+sub new {
+    my $self = [
+	"", # 0 acronym
+	[], # 1 definition
+	[], # 2 stop_words
+	0,  # 3 letters_for_far
+	
+    ];
+    bless $self;
+}
+
+#struct (
+#	# core items
+#	acronym => '$',     # the acronym (a string)
+#	definition => '@',  # the acronyms defintion (an array of strings)
+#        stop_words => '@',  # an array of 1 (stop word) and 0 (non stop word)
+#
+#        # items related to the context in which the acronym was mined
+#        word_count => '$',        # the index of the acronym within the text
+#	definition_offset => '$', # the distance between the acronym and the definition.
+#        
+#        #temporary items used during the mining of the acronym
+#        letters_for_far => '$', # how many letters have we found so far ?
+#
+#	#calculated items
+#	#...
+#
+#	);
+
+#sub definition {
+#    my $self = shift (@_);
+#    my @def = @$self->[2];
+#    print "definition::\@de+f = " . @def . "\n";
+#    print "definition::\@_ = " . @_ . "\n";
+#    if (@_) {
+#	push  @def, @_;
+#	@$self->[2] = @def;
+#    }
+#    return @def;
+#}
+
+
+
+sub clone  {
+    my $self = shift (@_);
+
+    my $copy = new acronym;
+
+    $copy->[0] = $self->[0];
+    push @{$copy->[1]}, @{$self->[1]};
+    push @{$copy->[2]}, @{$self->[2]};
+    $copy->[3] = $self->[3];
+    $copy->[4] = $self->[4];
+    $copy->[5] = $self->[5];
+    $copy->[6] = $self->[6];
+    
+    return $copy;
+}
+
+#sub initialise {
+#    my $self = shift (@_);
+#
+#    # initialise the struct from the parameters ...
+#    my($acro, $wc, $def) = @_;
+#    $self->acronym($acro);
+#    $self->word_count($wc);
+#    $self->definition_offset($def);
+#
+#    $self->letters_for_far(0);
+#}
+
+#print out the kwic for the acronym
+sub to_string_kwic {
+    my $self = shift (@_);
+
+    # the list of all possible combinations
+    my @list = ();
+
+    my $result = "";
+
+    my $j = 0;
+    my @array = @{$self->[1]};
+    while ($j <= $#array)
+    {
+
+	$result = "";
+	
+	# do the definition
+	my $i = 0;
+	while ($i <= $#array)
+	{
+	    my $current = ($i + $j) % ($#array+1);
+	    $result = $result . $array[$current] . " ";
+	    $i++;
+	}
+	$result = $result . "(" . $self->[0] . ")";
+
+	push @list, $result;
+	$j++;
+    }
+    return @list;
+}
+
+#this is the one used when building the collection ...
+sub to_string {
+    my $self = shift (@_);
+
+    my $result = $self->[0] . " ";
+
+    # do the definition
+    my @array = @{$self->[1]};
+    my $i = 0;
+    while ($i <= $#array)
+    {
+	my $resultnext = $result . $array[$i] . " ";
+	$result = $resultnext;
+	$i++;
+    }
+    return $result;
+}
+
+# called when the acronym is complete and after altering any stats to compute stats etc.
+sub stablise {
+
+
+}
+
+sub acronyms {
+    my $processed_text =  shift @_;
+    $$processed_text =~ s/[^A-Za-z]/ /g;
+    $$processed_text =~ s/\s+/ /g;
+
+    return &acronyms_from_clean_text($processed_text)
+}
+
+sub acronyms_from_clean_text {
+    my ($processed_text) = @_;
+    my @acro_list = ();
+
+    my @text = split / /, $$processed_text;
+
+#    my $i = 0;
+#    while ($i <= $#text)
+#    {
+#	print $text->[$i] . "\n";
+#	$i++;
+#    }
+
+    my $first = 0;
+    my $last = $#text +1;
+    my $acro_counter = $first;
+    
+    while ($acro_counter < $last)
+    {
+	my $word = $text[$acro_counter];
+
+	# the tests on the following line are VERY important to the performance of this algorithm
+	# be VERY careful when relaxing them...
+	if (length $word >= 3 && (uc($word) eq $word))
+	{
+	    my $def_counter = 0;
+	    while ($def_counter <= $last)
+	    {
+		my $letter_counter = 0;
+		my $match = 1; 
+		while ($letter_counter < length($word))
+		{
+		    if ($def_counter+$letter_counter >= $last)
+		    {
+			$match = 0;
+			last;
+		    }
+		    my $def_word = $text[$def_counter+$letter_counter];
+
+		    #throw it out if it's recursing...
+		    if (uc($word) eq uc($def_word))
+		    {
+			$match = 0;
+			last
+		    }
+		    if (substr($word, $letter_counter, 1) ne substr($def_word, 0, 1))
+		    {
+			$match = 0;
+			last;
+		    }
+		    $letter_counter++;
+		}
+		# this line should perhaps be more sophisticated ... it encodes what we consider 
+                # to be a valid acronym 
+		if ($match == 1 && $letter_counter > 0 && (abs($def_counter - $acro_counter)< 50))
+		{
+		    my $acro = new acronym();
+		    $acro->[0] = $word;
+		    push @{$acro->[1]}, @text[$def_counter .. $def_counter + $letter_counter - 1 ];
+		    $acro->[3] = $letter_counter;
+#		    my @tmp = ( $acro );
+		    push @acro_list, ( $acro );
+#		    print $acro->to_string(). "\n";
+		    $match = 0;
+		}
+		$def_counter++;
+	    }
+	}
+	$acro_counter++;
+    }
+
+    return \@acro_list;
+}
+
+
+
+sub test {
+
+#    my $blarg = new acronym();
+#    my $simple;
+#    $simple = 10;
+#    $blarg->initialise($simple, $simple, $simple);
+#    my $blarg2 = $blarg->clone();
+#    print $blarg->to_string();
+#    print $blarg2;
+#    print "\n";
+#    
+    my $tla = new acronym();
+    $tla->[0] = "TLA";
+
+    my @array = ("Three", "Letter", "Acronym");
+#    my $i = 0;
+#    while ($i <= $#array)
+#    {
+#	print @array[$i] . "\n";
+#	$i++;
+#    }
+
+    print "\n";
+    push @{$tla->[1]}, ("Three" );
+    push @{$tla->[1]}, ("Letter" );
+    push @{$tla->[1]}, ("Letter" );
+    push @{$tla->[1]}, ("Acronym" );
+    print $tla->to_string(). "\n";
+    print "\n";
+    print "\n";
+    my $tla2 = $tla->clone();
+    push @{$tla2->[1]}, ("One");
+    push @{$tla2->[1]}, ("Two");
+    $tla2->[0] = "ALT";
+    print $tla->to_string(). "\n";
+    print $tla2->to_string(). "\n";
+
+    print "\n";
+    print "\n";
+
+}
+
+#uncomment this line to test this package
+#&test();
+
+1;
Index: /branches/New_Config_Format-branch/gsdl/perllib/classify/AZCompactList.pm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/perllib/classify/AZCompactList.pm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/perllib/classify/AZCompactList.pm	(revision 1278)
@@ -0,0 +1,356 @@
+###########################################################################
+#
+# AZCompactList.pm --
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+# classifier plugin for sorting alphabetically
+# options are:
+# metadata=Metaname -- all documents with Metaname metadata
+#                      will be included in list, list will be sorted
+#                      by this element.
+# title=Title       -- (optional) the title field for this classification.
+#                      if not included title field will be Metaname. 
+# mingroup=Num      -- (optional) the smallest value that will cause
+#                      a group in the hierarchy to form.
+
+package AZCompactList;
+
+use AZList;
+use sorttools;
+
+sub BEGIN {
+    @ISA = ('AZList');
+}
+
+sub new {
+    my ($class, @options) = @_;
+
+    my ($metaname, $title);
+    my $mingroup = 2;
+
+    foreach $option (@options) {
+	if ($option =~ /^metadata=(.*)$/i) {
+	    $metaname = $1;
+	} elsif ($option =~ /^title=(.*)$/i) {
+	    $title = $1;
+	} elsif ($option =~ /^mingroup(size)?=(.*)$/i) {
+	    $mingroup = $2;
+	}
+    }
+
+    die "AZCompactList used with no metadata name to classify by\n"
+	unless defined $metaname;
+    $title = $metaname unless defined $title;
+
+    return bless {
+	'list'=>{}, 
+	'listmetavalue'=>{}, 
+	'reclassify'=>{},
+	'reclassifylist'=>{},
+	'metaname' => $metaname,
+	'title' => $title,
+	'mingroup' => $mingroup
+	}, $class;
+}
+
+sub init 
+{
+    my $self = shift (@_);
+    
+    $self->{'list'} = {};
+    $self->{'listmetavalue'} = {};
+    $self->{'reclassify'} = {};
+    $self->{'reclassifylist'} = {};
+}
+
+$tmp = 0;
+
+sub classify 
+{
+    my $self = shift (@_);
+    my ($doc_obj) = @_;
+
+    my $doc_OID = $doc_obj->get_OID();
+
+    my $thissection = $doc_obj->get_top_section();
+    my $metaname = $self->{'metaname'};
+
+    my $metavalue = $doc_obj->get_metadata_element($thissection,$metaname);
+    my $date = $doc_obj->get_metadata_element($thissection,"Date");
+
+    # if this document doesn't contain the metadata element we're
+    # sorting by we won't include it in this classification
+    if (defined $metavalue && $metavalue =~ /\w/) 
+    {
+	my $formatted_metavalue = $metavalue;
+
+	if ($self->{'metaname'} eq 'Creator') 
+	{
+	    &sorttools::format_string_name_english (\$formatted_metavalue);
+	} 
+	else 
+	{
+	    &sorttools::format_string_english (\$formatted_metavalue);
+	}
+	if (defined $self->{'list'}->{$doc_OID}) 
+	{
+	    print STDERR "WARNING: AZCompactList::classify called multiple times for $doc_OID\n";
+	} 
+
+	$self->{'list'}->{$doc_OID} = $formatted_metavalue;
+	$self->{'listmetavalue'}->{$doc_OID} = $metavalue;
+	$self->{'reclassify'}->{$doc_OID} = [$doc_obj,$date]
+    }
+}
+
+sub reinit 
+{
+    my ($self,$classlist_ref) = @_;
+    
+    my %mtfreq = ();
+    my @single_classlist = ();
+    my @multiple_classlist = ();
+
+    # find out how often each metavalue occurs
+    map { $mtfreq{$self->{'listmetavalue'}->{$_}}++; } @$classlist_ref;
+
+    # use this information to split the list: single metavalue/repeated value
+    map
+    { 
+	my $metavalue = $self->{'listmetavalue'}->{$_};
+	print "meta value = $metavalue; count = $mtfreq{$metavalue}\n";
+
+	if ($mtfreq{$metavalue}>=$self->{'mingroup'})
+	{
+	    push(@multiple_classlist,$_); 
+	} 
+	else
+	{
+	    push(@single_classlist,$_); 
+	    $self->{'reclassifylist'}->{$_} = $metavalue;
+	}
+    } @$classlist_ref;
+    
+    
+    # Setup sub-classifiers for multiple list
+
+    $self->{'classifiers'} = {};
+
+    my $listname 
+	= &util::filename_cat($ENV{'GSDLHOME'},"perllib/classify/List.pm");
+    if (-e $listname) { require $listname; }
+    else 
+    { 
+	die "TCCList ERROR - couldn't find classifier \"$listname\"\n"; 
+    }
+
+    my $metavalue;
+    foreach $metavalue (keys %mtfreq)
+    {
+	if ($mtfreq{$metavalue}>=$self->{'mingroup'})
+	{
+	    my $listclassobj;
+	    my $metaname  = $self->{'metaname'};
+	    
+	    eval ("\$listclassobj = new List(\"metadata=$metaname\", \"title=\$metavalue\", \"sort=Date\")");
+	    die "$@" if $@;
+	    
+	    $listclassobj->init();
+
+	    if (defined $metavalue && $metavalue =~ /\w/) 
+	    {
+		my $formatted_node = $metavalue;
+		if ($self->{'metaname'} eq 'Creator') 
+		{
+		    &sorttools::format_string_name_english(\$formatted_node);
+		} 
+		else 
+		{
+		    &sorttools::format_string_english(\$formatted_node);
+		}
+		
+		$self->{'classifiers'}->{$metavalue} 
+		= { 'classifyobj'   => $listclassobj,
+		    'formattednode' => $formatted_node };
+	    }
+	}
+    }
+
+
+    return (\@single_classlist,\@multiple_classlist);
+}
+
+
+sub reclassify 
+{
+    my ($self,$multiple_cl_ref) = @_;
+
+    my $metaname  = $self->{'metaname'};
+
+    my $doc_OID;
+    foreach $doc_OID (@$multiple_cl_ref) 
+    {
+        my $listclassobj;
+        my $metavalue = $self->{'listmetavalue'}->{$doc_OID};
+	
+	# find metavalue in list of sub-classifiers
+	my $found = 0;
+	my $node_name;
+	foreach $node_name (keys %{$self->{'classifiers'}}) 
+	{
+	    if ($metavalue =~ /^$node_name$/i) 
+	    {
+		my ($doc_obj,$date) = @{$self->{'reclassify'}->{$doc_OID}};
+
+		$self->{'classifiers'}->{$node_name}->{'classifyobj'}
+		      ->classify($doc_obj, $date);
+
+		$found = 1;
+		last;
+	    }
+	}
+
+	if (!$found)
+	{
+	    print STDERR "Warning: AZCompactList::reclassify ";
+	    print STDERR "could not find sub-node for $metavalue\n";
+	}
+    }
+}
+
+
+
+sub get_reclassify_info 
+{
+    my $self = shift (@_);
+    
+    my $node_name;
+    foreach $node_name (keys %{$self->{'classifiers'}}) 
+    {
+        my $classifyinfo 
+	    = $self->{'classifiers'}->{$node_name}->{'classifyobj'}
+	        ->get_classify_info(1);
+        $self->{'classifiers'}->{$node_name}->{'classifyinfo'} 
+	    = $classifyinfo;
+        $self->{'reclassifylist'}->{"CLASSIFY.$node_name"} 
+	    = $self->{'classifiers'}->{$node_name}->{'formattednode'};
+    }
+}
+
+
+sub get_classify_info {
+    my $self = shift (@_);
+
+    my @classlist = sort {$self->{'list'}->{$a} cmp $self->{'list'}->{$b};} keys %{$self->{'list'}};
+
+    my ($single_cl_ref,$multiple_cl_ref) = $self->reinit(\@classlist);
+    $self->reclassify($multiple_cl_ref);
+    $self->get_reclassify_info();
+
+    my @reclassified_classlist 
+	= sort {$self->{'reclassifylist'}->{$a} cmp $self->{'reclassifylist'}->{$b};} keys %{$self->{'reclassifylist'}};
+
+    return $self->splitlist (\@reclassified_classlist);
+}
+
+# splitlist takes an ordered list of classifications (@$classlistref) and splits it
+# up into alphabetical sub-sections.
+sub splitlist {
+    my $self = shift (@_);
+    my ($classlistref) = @_;
+    my $classhash = {};
+
+    # top level
+    my $childtype = "HList";
+    if (scalar (@$classlistref) <= 39) {$childtype = "VList";}
+    my $classifyinfo = $self->get_entry ($self->{'title'}, $childtype, "Invisible");
+
+    # don't need to do any splitting if there are less than 39 (max + min-1) classifications
+    if ((scalar @$classlistref) <= 39) {
+	foreach $subOID (@$classlistref) {
+            if ($subOID =~ /^CLASSIFY\.(.*)$/ 
+		&& defined $self->{'classifiers'}->{$1}) 
+	    {
+                push (@{$classifyinfo->{'contains'}}, 
+		      $self->{'classifiers'}->{$1}->{'classifyinfo'});
+            } 
+	    else 
+	    {
+		push (@{$classifyinfo->{'contains'}}, {'OID'=>$subOID});
+	    }
+	}
+	return $classifyinfo;
+    }
+	
+    # first split up the list into separate A-Z and 0-9 classifications
+    foreach $classification (@$classlistref) {
+	my $title = $self->{'reclassifylist'}->{$classification};
+	$title =~ s/&(.){2,4};//g; # remove any HTML special chars
+	$title =~ s/^(\'|\`|\"|\:|\()//g; # remove any opening punctutation
+	$title =~ s/^(.).*$/$1/;
+	$title =~ tr/[a-z]/[A-Z]/;
+
+	if ($title =~ /^[0-9]$/) {$title = '0-9';}
+	elsif ($title !~ /^[A-Z]$/) {
+	    print STDERR "AZCompactList: WARNING $classification has badly formatted title ($title)\n";
+	}
+	$classhash->{$title} = [] unless defined $classhash->{$title};
+	push (@{$classhash->{$title}}, $classification);
+    }
+    $classhash = $self->compactlist ($classhash);
+
+    my @tmparr = ();
+    foreach $subsection (sort keys (%$classhash)) {
+	push (@tmparr, $subsection);
+    }
+    
+    # if there's a 0-9 section it will have been sorted to the beginning
+    # but we want it at the end
+    if ($tmparr[0] eq '0-9') {
+	shift @tmparr;
+	push (@tmparr, '0-9');
+    }
+
+    foreach $subclass (@tmparr) 
+    {
+	my $tempclassify = $self->get_entry ($subclass, "VList");
+	foreach $subsubOID (@{$classhash->{$subclass}}) 
+	{
+            if ($subsubOID =~ /^CLASSIFY\.(.*)$/ 
+		&& defined $self->{'classifiers'}->{$1}) 
+	    {
+                push (@{$tempclassify->{'contains'}}, 
+		      $self->{'classifiers'}->{$1}->{'classifyinfo'});
+	    }
+	    else
+	    {
+		push (@{$tempclassify->{'contains'}}, {'OID'=>$subsubOID});
+	    }
+	}
+	push (@{$classifyinfo->{'contains'}}, $tempclassify);
+    }
+
+    return $classifyinfo;
+}
+
+1;
Index: /branches/New_Config_Format-branch/gsdl/perllib/gflock.pm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/perllib/gflock.pm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/perllib/gflock.pm	(revision 1278)
@@ -0,0 +1,54 @@
+###########################################################################
+#
+# gflock.pm - an attempt to use flock only on those platforms
+# on which it's supported (i.e. everything but Windows 95/98)
+#
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+package gflock;
+
+use Fcntl ':flock';
+
+# returns true if successful (or if OS is a form of windows other than NT)
+sub lock {
+    my ($handle) = @_;
+
+    if ($ENV{'GSDLOS'} eq "windows" && !Win32::IsWinNT()) {
+	return 1;
+    } else {
+	return flock($handle, LOCK_EX);
+    }
+}
+
+# returns true if successful (or if OS is a form of windows other than NT)
+sub unlock {
+    my ($handle) = @_;
+
+    if ($ENV{'GSDLOS'} eq "windows" && !Win32::IsWinNT()) {
+	return 1;
+    } else {
+	return flock($handle, LOCK_UN);
+    }
+}
+
+1;
Index: /branches/New_Config_Format-branch/gsdl/perllib/plugins/HBSPlug.pm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/perllib/plugins/HBSPlug.pm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/perllib/plugins/HBSPlug.pm	(revision 1278)
@@ -0,0 +1,214 @@
+###########################################################################
+#
+# HBSPlug.pm -- plugin for processing simple html (or text) books
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+# creates multi-level document from document containing 
+# <<TOC>> level tags. Metadata for each section is taken from any
+# other tags on the same line as the <<TOC>>. e.g. <<Title>>xxxx<</Title>>
+# sets Title metadata.
+
+# Everything else between TOC tags is treated as simple html (i.e. no 
+# processing of html links or any other HTMLPlug type stuff is done).
+
+# expects input files to have a .hb file extension by default (this can be 
+# changed by adding a -process_exp option
+
+# a file with the same name as the hb file but a .jpg extension is
+# taken as the cover image (jpg files are blocked by this plugin)
+
+# HBSPlug is a simplification (and extension of) the HBPlug used
+# by the Humanity Library collections. HBSPlug is faster as it expects
+# the input files to be cleaner (The input to the HDL collections
+# contains lots of excess html tags around <<TOC>> tags, uses <<I>>
+# tags to specify images, and simply takes all text between <<TOC>>
+# tags and start of text to be Title metadata). If you're marking up
+# documents to be displayed in the same way as the HDL collections,
+# use this plugin instead of HBPlug.
+
+package HBSPlug;
+
+use BasPlug;
+use util;
+
+sub BEGIN {
+    @ISA = ('BasPlug');
+}
+
+use strict;
+
+sub new {
+    my ($class) = @_;
+    my $self = new BasPlug ("HBSPlug", @_);
+
+    return bless $self, $class;
+}
+
+sub get_default_block_exp {
+    my $self = shift (@_);
+
+    return q^\.jpg$^;
+}
+
+sub get_default_process_exp {
+    my $self = shift (@_);
+
+    return q^(?i)\.hb$^;
+}
+
+# do plugin specific processing of doc_obj
+sub process {
+    my $self = shift (@_);
+    my ($textref, $pluginfo, $base_dir, $file, $metadata, $doc_obj) = @_;
+    
+    print STDERR "HBSPlug: processing $file\n" 
+	if $self->{'verbosity'} > 1;
+    
+    my $cursection = $doc_obj->get_top_section();
+
+    my $filename = &util::filename_cat($base_dir, $file);
+    my $absdir = $filename;
+    $absdir =~ s/[^\/\\]*$//;
+
+    # add the cover image
+    my $coverimage = $filename;
+    $coverimage =~ s/\.[^\.]*$/\.jpg/i;
+    $doc_obj->associate_file($coverimage, "cover.jpg", "image/jpeg");
+
+    my $title = "";
+
+    # remove any leading rubbish
+    $$textref =~ s/^.*?(<<TOC)/$1/ios;
+    
+    my $curtoclevel = 1;
+    my $firstsection = 1;
+    my $toccount = 0;
+    while ($$textref =~ /\w/) {
+	$$textref =~ s/^<<TOC(\d+)>>([^\n]*)\n(.*?)(<<TOC|\Z)/$4/ios;
+	my $toclevel = $1;
+	my $metadata = $2;
+	my $sectiontext = $3;
+
+	if ($toclevel == 2) {
+	    $toccount ++;
+	}
+	
+	# close any sections below the current level and
+	# create a new section (special case for the firstsection)
+	while (($curtoclevel > $toclevel) ||
+	       (!$firstsection && $curtoclevel == $toclevel)) {
+	    $cursection = $doc_obj->get_parent_section ($cursection);
+	    $curtoclevel--;
+	}
+	if ($curtoclevel+1 < $toclevel) {
+	    print STDERR "WARNING - jump in toc levels in $filename " . 
+		"from $curtoclevel to $toclevel\n";
+	}
+	while ($curtoclevel < $toclevel) {
+	    $curtoclevel++;
+	    $cursection = 
+		$doc_obj->insert_section($doc_obj->get_end_child($cursection));
+	}
+
+	# sort out metadata
+	while ($metadata =~ s/^.*?<<([^>]*)>>(.*?)<<[^>]*>>//) {
+	    my $metakey = $1;
+	    my $metavalue = $2;
+
+	    if ($metavalue ne "" && $metakey ne "") {
+		# make sure key fits in with gsdl naming scheme 
+		$metakey =~ tr/[A-Z]/[a-z]/;
+		$metakey = ucfirst ($metakey);
+		$doc_obj->add_utf8_metadata ($cursection, $metakey, $metavalue);
+	    }
+	}
+
+	# remove header rubbish
+	$sectiontext =~ s/^.*?<body[^>]*>//ios;
+
+	# and any other unwanted tags
+	$sectiontext =~ s/<(\/p|\/html|\/body)>//isg;
+
+	# fix up the image links
+	$sectiontext =~ s/(<img[^>]*?src\s*=\s*\"?)([^\">]+)(\"?[^>]*>)/
+	    &replace_image_links($absdir, $doc_obj, $1, $2, $3)/isge;
+
+	# add the text
+	$doc_obj->add_utf8_text($cursection, $sectiontext);
+
+	$firstsection = 0;
+
+	$$textref =~ s/^\s+//s;
+    }
+
+    return 1;
+}
+
+sub replace_image_links {
+
+    my ($dir, $doc_obj, $front, $link, $back) = @_;
+
+    my ($filename, $error);
+    my $foundimage = 0;
+    
+    $link =~ s/\/\///;
+    my ($imagetype) = $link =~ /([^\.]*)$/;
+    $imagetype =~ tr/[A-Z]/[a-z]/;
+    if ($imagetype eq "jpg") {$imagetype = "jpeg";}
+    if ($imagetype !~ /^(jpeg|gif|png)$/) {
+	print STDERR "HBSPlug: Warning - unknown image type ($imagetype)\n";
+    }
+    my ($imagefile) = $link =~ /([^\/]*)$/;
+    my ($imagepath) = $link =~ /^[^\/]*(.*)$/;
+
+    if (defined $imagepath && $imagepath =~ /\w/) {
+	# relative link
+	$filename = &util::filename_cat ($dir, $imagepath);
+	if (-e $filename) {
+	    $doc_obj->associate_file ($filename, $imagefile, "image/$imagetype");
+	    $foundimage = 1;
+	} else {
+	    $error = "HBSPlug: Warning - couldn't find image file $imagefile in either $filename or";
+	}
+    }
+
+    if (!$foundimage) {
+	$filename = &util::filename_cat ($dir, $imagefile);
+	if (-e $filename) {
+	    $doc_obj->associate_file ($filename, $imagefile, "image/$imagetype");    
+	    $foundimage = 1;
+	} elsif (defined $error) {
+	    print STDERR "$error $filename\n";
+	} else {
+	    print STDERR "HBSPlug: Warning - couldn't find image file $imagefile in $filename\n";
+	}
+    }
+
+    if ($foundimage) {
+	return "${front}_httpdocimg_/${imagefile}${back}";
+    } else {
+	return "";
+    }
+}
+
+1;
Index: /branches/New_Config_Format-branch/gsdl/perllib/plugins/ZIPPlug.pm
===================================================================
--- /branches/New_Config_Format-branch/gsdl/perllib/plugins/ZIPPlug.pm	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/perllib/plugins/ZIPPlug.pm	(revision 1278)
@@ -0,0 +1,144 @@
+###########################################################################
+#
+# ZIPPlug.pm --
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the 
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999 New Zealand Digital Library Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+# plugin which handles compressed and/or archived input formats
+#
+# currently handled formats and file extensions are:
+# 
+# gzip (.gz, .z, .tgz, .taz)
+# bzip (.bz)
+# zip (.zip)
+# tar (.tar)
+#
+# this plugin relies on the following utilities being present 
+# (if trying to process the corresponding formats)
+#
+# gunzip (for gzip)
+# bunzip (for bzip)
+# unzip (for zip)
+# tar (for tar) 
+
+package ZIPPlug;
+
+use BasPlug;
+use plugin;
+use util;
+use Cwd;
+
+
+BEGIN {
+    @ISA = ('BasPlug');
+}
+
+use strict;
+
+sub new {
+    my ($class) = @_;
+    my $self = new BasPlug ("ZIPPlug", @_);
+
+    return bless $self, $class;
+}
+
+# this is a recursive plugin
+sub is_recursive {
+    my $self = shift (@_);
+
+    return 1;
+}
+
+# return number of files processed, undef if can't process
+# Note that $base_dir might be "" and that $file might 
+# include directories
+sub read {
+    my $self = shift (@_);
+    my ($pluginfo, $base_dir, $file, $metadata, $processor, $maxdocs) = @_;
+
+    if ($file =~ /\.(gz|tgz|z|taz|bz|zip|tar)$/i) {
+
+	my $filename = &util::filename_cat ($base_dir, $file);
+	if (!-e $filename) {
+	    print STDERR "ZIPPLug: WARNING: $filename does not exist\n";
+	    return undef;
+	}
+	
+	my ($file_only) = $file =~ /([^\\\/]*)$/;
+	my $tmpdir = &util::get_tmp_filename ();
+	&util::mk_all_dir ($tmpdir);
+
+	print STDERR "ZIPPlug: extracting $file_only to $tmpdir\n";
+
+	# save current working directory
+	my $cwd = cwd();
+	chdir ($tmpdir) || die;
+	&util::cp ($filename, $tmpdir);
+	
+	if ($file =~ /\.bz$/i) {
+	    $self->bunzip ($file_only);
+	} elsif ($file =~ /\.zip$/i) {
+	    $self->unzip ($file_only);
+	} elsif ($file =~ /\.tar$/i) {
+	    $self->untar ($file_only);
+	} else {
+	    $self->gunzip ($file_only);
+	}
+
+	chdir ($cwd) || die;
+
+	my $numdocs = &plugin::read ($pluginfo, "", $tmpdir, $metadata, $processor, $maxdocs);
+	&util::rm_r ($tmpdir);
+	return $numdocs;
+
+    } else {
+	return undef;
+    }
+}
+
+sub bunzip {
+    my $self = shift (@_);
+    my ($file) = @_;
+    system ("bunzip $file");
+}
+
+sub unzip {
+    my $self = shift (@_);
+    my ($file) = @_;
+    system ("unzip $file");
+    &util::rm ($file) if -e $file;
+}
+
+sub untar {
+    my $self = shift (@_);
+    my ($file) = @_;
+    system ("tar xf $file");
+    &util::rm ($file) if -e $file;
+}
+
+sub gunzip {
+    my $self = shift (@_);
+    my ($file) = @_;
+    system ("gunzip $file");
+}
+
+1;
Index: /branches/New_Config_Format-branch/gsdl/src/colservr/GCC.mak
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/colservr/GCC.mak	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/colservr/GCC.mak	(revision 1278)
@@ -0,0 +1,73 @@
+###########################################################################
+#
+# gcc win32 makefile -- src/colservr
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 2000  The New Zealand Digital Library Project
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+
+AR = ar
+RANLIB = ranlib
+CC = g++
+DELETE = del
+
+o = .o
+/ = \\
+
+CPPFLAGS = -g -Wall
+DEFS = -D__WIN32__ -DGSDL_USE_IOS_H -DHAVE_CONFIG_H
+
+INCLUDES = -I"..$/..$/lib" -I"..$/recpt" -I"..$/..$/packages$/mg" \
+	   -I"..$/..$/packages$/mg$/lib" -I"..$/..$/packages$/mg$/src$/text" \
+           -I"..$/..$/packages$/wingdbm"
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS)
+LINK = $(CC) $(LDFLAGS) -o $@
+ 
+.SUFFIXES:
+.SUFFIXES: .c $o
+.c$o:
+	$(COMPILE) $<
+
+.SUFFIXES: .cpp $o
+.cpp$o:
+	$(COMPILE) $< 
+
+HEADERS = mgq.h mgsearch.h querycache.h queryinfo.h collectserver.h \
+          colservrconfig.h maptools.h filter.h source.h browsefilter.h \
+          queryfilter.h mggdbmsource.h phrasesearch.h phrasequeryfilter.h
+
+SOURCES = mgq.c mgsearch.cpp querycache.cpp queryinfo.cpp collectserver.cpp \
+          colservrconfig.cpp maptools.cpp filter.cpp source.cpp \
+          browsefilter.cpp queryfilter.cpp mggdbmsource.cpp phrasesearch.cpp \
+          phrasequeryfilter.cpp
+
+OBJECTS = mgq$o mgsearch$o querycache$o queryinfo$o collectserver$o \
+          colservrconfig$o maptools$o filter$o source$o browsefilter$o \
+          queryfilter$o mggdbmsource$o phrasesearch$o phrasequeryfilter$o
+
+all : $(OBJECTS)
+
+clean:
+	$(DELETE) *$o
+
+install:
Index: /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryLex.cpp
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryLex.cpp	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryLex.cpp	(revision 1278)
@@ -0,0 +1,200 @@
+/**************************************************************************
+ *
+ * GSDLQueryLex.cpp -- Lexical analyser for a simple query language
+ * Copyright (C) 2000  Rodger McNab
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ *
+ **************************************************************************/
+
+#include "GSDLQueryLex.h"
+#include "unitool.h"
+#include "words.h"
+
+inline void AddNChar (UCArray::const_iterator &here,
+		      UCArray &text,
+		      int len) {
+  while (len > 0) {
+    text.push_back (*here++);
+    len--;
+  }
+}
+
+static bool ParseInteger (UCArray::const_iterator &here,
+			  UCArray::const_iterator end,
+			  LexEl &el) {
+  el.Clear();
+
+  // this version of end is used in unitool
+  UCArray::const_iterator endMinus1 = end-1;
+
+  int charLen;
+  unsigned short c; // one character lookahead
+  charLen = parse_utf8_char (here, endMinus1, &c);
+
+  // check for positive or negative
+  bool neg = false;
+  if (c == '+') {
+    AddNChar (here, el.text, charLen);
+    charLen = parse_utf8_char (here, endMinus1, &c);
+  } else if (c == '-') {
+    neg = true;
+    AddNChar (here, el.text, charLen);
+    charLen = parse_utf8_char (here, endMinus1, &c);
+  }
+
+  // read in number part
+  el.num = 0;
+  el.lexType = IntegerE;
+  while (c >= '0' && c <= '9') {
+    el.num = el.num*10 + c - '0';
+    AddNChar (here, el.text, charLen);
+    charLen = parse_utf8_char (here, endMinus1, &c);
+  }
+
+  if (neg) el.num *= -1;
+
+  return (!el.text.empty());
+}
+
+static bool ParseTerm (UCArray::const_iterator &here,
+		       UCArray::const_iterator end,
+		       UCArray &text) {
+  UCArray::const_iterator endMinus1 = end-1;
+  here = ParseIndexWord (here, endMinus1, text);
+  return !text.empty();
+}
+
+
+bool ParseLexEl (UCArray::const_iterator &here,
+		 UCArray::const_iterator end,
+		 LexEl &el) {
+  el.Clear();
+
+  // strange things can happen if here == end == 0
+  if (here == end) return false;
+  
+  // this version of end is used in unitool
+  UCArray::const_iterator endMinus1 = end-1;
+  
+  // ignore all white space
+  int charLen;
+  unsigned short c; // one character lookahead
+  charLen = parse_utf8_char (here, endMinus1, &c);
+  while (here != end && is_unicode_space (c)) {
+    here += charLen;
+    charLen = parse_utf8_char (here, endMinus1, &c);
+  }
+  if (here == end) return false;
+
+  if (c == '(') {
+    el.lexType = OpenBracketE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == ')') {
+    el.lexType = CloseBracketE;
+    AddNChar (here, el.text, charLen);
+    return true;
+
+  } else if (c =='[') {
+    el.lexType = OpenSquareBracketE;
+    AddNChar (here, el.text, charLen);
+    return true;
+  
+  } else if (c ==']') {
+    el.lexType = CloseSquareBracketE;
+    AddNChar (here, el.text, charLen);
+    return true;
+  
+  } else if (c == '\"') {
+    el.lexType = QuoteE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '/') {
+    el.lexType = TermWeightE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '#') {
+    el.lexType = StemMethodE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '^') {
+    el.lexType = RangeE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '@') {
+    el.lexType = AtE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == ':') {
+    el.lexType = TagE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c=='&') {
+    el.lexType = AndOpE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '|') {
+    el.lexType = OrOpE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '!') {
+    el.lexType = NotOpE;
+    AddNChar (here, el.text, charLen);
+    return true;
+    
+  } else if (c == '+' || c == '-' ||
+	     (c >= '0' && c <= '9')) {
+    return ParseInteger (here, end, el);
+  }
+
+  // assume it is a term of some sort
+  if (!ParseTerm (here, end, el.text)) return false;
+
+  UCArray AND; SetCStr (AND, "AND");
+  if (el.text == AND) {
+    el.lexType = AndOpE;
+    return true;
+  }
+  UCArray OR; SetCStr (OR, "OR");
+  if (el.text == OR) {
+    el.lexType = OrOpE;
+    return true;
+  }
+  UCArray NOT; SetCStr (NOT, "NOT");
+  if (el.text == NOT) {
+    el.lexType = NotOpE;
+    return true;
+  }
+  UCArray NEAR; SetCStr (NEAR, "NEAR");
+  if (PrefixLen(el.text, NEAR)==4) {
+    el.lexType = NearOpE;
+    return true;
+  }
+  el.lexType = TermE;
+  return true;
+}
+
Index: /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryLex.h
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryLex.h	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryLex.h	(revision 1278)
@@ -0,0 +1,65 @@
+/**************************************************************************
+ *
+ * GSDLQueryLex.h -- Lexical analyser for a simple query language, for GSDL
+ * Copyright (C) 2000  Rodger McNab
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ *
+ **************************************************************************/
+
+#ifndef GSDLQUERYLEX_H
+#define GSDLQUERYLEX_H
+
+#include "UCArray.h"
+
+
+// note: white space is ignored
+enum LexType {NoTypeE, OpenBracketE, CloseBracketE, TermE, AndOpE, OrOpE,
+	      NotOpE, NearOpE, QuoteE, IntegerE, TermWeightE, StemMethodE,
+	      RangeE, AtE, TagE, OpenSquareBracketE, CloseSquareBracketE};
+
+struct LexEl {
+  LexType lexType;
+  UCArray text;
+  int num; // for IntegerE
+
+  void Clear () {
+    lexType = NoTypeE;
+    UCArrayClear (text);
+    num = 0;
+  }
+  LexEl () { Clear (); }
+};
+
+
+// returns true if another lexical element could be parsed.
+bool ParseLexEl (UCArray::const_iterator &here,
+		 UCArray::const_iterator end,
+		 LexEl &el);
+
+
+#endif
+
+
+
+
+
+
+
+
+
+
Index: /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryParser.cpp
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryParser.cpp	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryParser.cpp	(revision 1278)
@@ -0,0 +1,363 @@
+/**************************************************************************
+ *
+ * QueryParser.cpp -- Query parser for a simple query language
+ * Copyright (C) 2000  Rodger McNab
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ *
+ **************************************************************************/
+
+#include "GSDLQueryParser.h"
+#include "GSDLQueryLex.h"
+
+
+static QueryNode *ParseExpression (UCArray::const_iterator &here,
+				   UCArray::const_iterator end);
+
+static QueryNode *AndAdd (QueryNode *t1, QueryNode *t2) {
+  if (t1 == NULL) return t2;
+  if (t2 == NULL) return t1;
+
+  AndQueryNode *andNode = new AndQueryNode;
+  andNode->leftNode = t1;
+  andNode->rightNode = t2;
+  return andNode;
+}
+
+static QueryNode *OrAdd (QueryNode *t1, QueryNode *t2) {
+  if (t1 == NULL) return t2;
+  if (t2 == NULL) return t1;
+
+  OrQueryNode *orNode = new OrQueryNode;
+  orNode->leftNode = t1;
+  orNode->rightNode = t2;
+  return orNode;
+}
+
+static QueryNode *NotAdd (QueryNode *t1, QueryNode *t2) {
+  if (t1 == NULL) return t2;
+  if (t2 == NULL) return t1;
+
+  NotQueryNode *notNode = new NotQueryNode;
+  notNode->queryNode = t1;
+  notNode->notNode = t2;
+  return notNode;
+}
+
+// expects the opening bracket to have already been parsed
+// and discarded
+static QueryNode *ParseBracketExpression (UCArray::const_iterator &here,
+					  UCArray::const_iterator end) {
+  // get everything in the expression
+  QueryNode *curTree = ParseExpression (here, end);
+  
+  // gobble up tokens until a closing bracket is found
+  // or the end of the string
+  LexEl el;
+  while (ParseLexEl (here, end, el)) {
+    if (el.lexType == CloseBracketE) break;
+  }
+
+  return curTree;
+}
+
+static int ParseInt (UCArray::const_iterator &here,
+		     UCArray::const_iterator end) {
+  LexEl el;
+  UCArray::const_iterator oldHere = here;
+  if (ParseLexEl (here, end, el) && el.lexType == IntegerE)
+    return el.num;
+  
+  here = oldHere; // not an integer
+  return 0;
+}
+
+// default is within 20 words
+static void SetRangeValues (TermNode &termNode,
+			    UCArray &near) {
+  UCArray NEAR; SetCStr(NEAR, "NEAR");
+  if (near == NEAR) { // no modifier
+    termNode.startRange = -20;
+    termNode.endRange = 20;
+  }
+  else { // extract number
+    UCArray::const_iterator here = near.begin()+4;
+    UCArray::const_iterator end = near.end();
+    int size=0;
+    while (here != end) {
+      size = size*10 + (*here-'0');
+      here++;
+    }
+    cerr <<"size= "<<size<<endl;
+    termNode.startRange = -1 * size;
+    termNode.endRange = size;
+  }
+
+
+}
+static unsigned long GetStemMethod(LexEl &el) {
+  // here expect el to contain some of c,s,i,u
+  // stem method 0 = i,u  00
+  // stem method 1 = c,u  01
+  // stem method 2 = i, s  10
+  // stem method 3 = c,s  11
+
+  unsigned long stem = 4;
+  UCArray::const_iterator here = el.text.begin();
+  UCArray::const_iterator end = el.text.end();
+
+  unsigned char c1 = *here; 
+  if (c1 == 'c'| c1 == 'i' | c1 == 'u' | c1 == 's') 
+    stem = 0;
+  else return 4; // incorrect format
+  
+  here++;
+  unsigned char c2 = 'a';
+  if (here !=end) c2 = *here;
+   
+  if (c1 == 'c'|| c2=='c') stem |= 1;
+  if (c1 == 's'|| c2 == 's') stem |= 2;
+  cerr << "stem is "<<stem<<endl;
+  return stem;
+}
+  
+
+static void ParseTermModifiers (UCArray::const_iterator &here,
+				UCArray::const_iterator end,
+				TermNode &termNode) {
+  LexEl el;
+  UCArray::const_iterator oldHere = here;
+  while (ParseLexEl (here, end, el)) {
+    if (el.lexType == TermWeightE) {
+      termNode.termWeight = ParseInt (here, end);
+      
+    } else if (el.lexType == StemMethodE) {
+      //  termNode.stemMethod = ParseInt (here, end);
+      cerr << "in stem method bit"<<endl;
+      oldHere = here;
+      LexEl stem;
+      if (ParseLexEl (here, end, stem) && stem.lexType == TermE) {
+	termNode.stemMethod = GetStemMethod(stem);
+	if (termNode.stemMethod == 4) { // error so backtrack
+	  here = oldHere;
+	} 
+      }else here = oldHere; //ignore - wrong syntax
+
+    } else if (el.lexType == RangeE) {
+      termNode.startRange = ParseInt (here, end);
+      termNode.endRange = ParseInt (here, end);
+      
+    } else if (el.lexType == AtE) {
+      termNode.startRange = termNode.endRange = ParseInt (here, end);
+      
+    } else {
+      // no term modifiers
+      here = oldHere;
+      break;
+    }
+    
+    oldHere = here;
+  }  
+}
+
+static void ParseProxModifiers (UCArray::const_iterator &here,
+				UCArray::const_iterator end,
+				ProxMatchQueryNode *proxNode) {
+  // so far only have one - the tag stuff
+  LexEl el;
+  UCArray::const_iterator oldHere = here;
+  while (ParseLexEl (here, end, el)) {
+    if (el.lexType == TagE) {
+      oldHere = here; // don't backtrack past here
+      if (ParseLexEl (here, end, el) && el.lexType == TermE) {
+	proxNode->tagNodePtr = new TagNode;
+	proxNode->tagNodePtr->tagName = el.text;
+	
+      }
+      else { // error in tag
+	here = oldHere;
+      }
+    } // TagE
+    // add in other cases here
+    else {
+      // no modifiers
+      here = oldHere;
+      break;
+    }
+    oldHere = here;
+  }//while
+
+
+}
+
+// expects starting brackets to have been parsed
+static void ParseSquareBrackets(UCArray::const_iterator &here,
+			 UCArray::const_iterator end,
+			 ProxMatchQueryNode *proxNode) {
+
+  LexEl el;
+  while (ParseLexEl (here, end, el)) {
+    if (el.lexType == TermE || el.lexType == IntegerE) {
+      TermNode termNode;
+      termNode.term = el.text;
+      ParseTermModifiers (here, end, termNode);
+      proxNode->terms.push_back(termNode);
+    }
+    else if (el.lexType == CloseSquareBracketE) {
+      break;
+    }
+    else {
+      //error
+      break;
+    }
+  } // while
+
+}
+// expects the starting quote to have been parsed
+// and discarded
+// is now for exact phrases
+static void ParsePhrase (UCArray::const_iterator &here,
+			 UCArray::const_iterator end,
+			 ProxMatchQueryNode &proxNode) {
+  LexEl el;
+  bool first = true;
+  while (ParseLexEl (here, end, el)) {
+    if (el.lexType == TermE || el.lexType == IntegerE) {
+      TermNode termNode;
+      termNode.term = el.text;
+      //ParseTermModifiers (here, end, termNode);
+      if (first) {
+	first = false;
+      }
+      else {
+	termNode.startRange = -2;
+	termNode.endRange = -1;
+      }
+      proxNode.terms.push_back (termNode);
+      
+    } else if (el.lexType == QuoteE) {
+      break;
+      
+    } else {
+      // error
+      break;
+    }
+  }
+}
+
+static QueryNode *ParseTerm (UCArray::const_iterator &here,
+			     UCArray::const_iterator end) {
+  LexEl el;
+
+  UCArray::const_iterator oldHere = here;
+  if (!ParseLexEl (here, end, el)) return NULL;
+
+  if (el.lexType == OpenBracketE)
+    return ParseBracketExpression (here, end);
+
+  ProxMatchQueryNode *proxNode = new ProxMatchQueryNode;
+
+  // check for a tag
+  /* if (el.lexType == TagE) {
+    oldHere = here; // don't backtrack past here
+    if (!ParseLexEl (here, end, el)) return NULL;
+    if (el.lexType == TermE) {
+      proxNode->tagNodePtr = new TagNode;
+      proxNode->tagNodePtr->tagName = el.text;
+      if (!ParseLexEl (here, end, el)) return NULL;
+    }
+  }
+  */
+  if (el.lexType == TermE || el.lexType == IntegerE) {
+    TermNode termNode;
+    termNode.term = el.text;
+    ParseTermModifiers (here, end, termNode);
+    oldHere = here;  // dont backtrack past here
+    if (ParseLexEl(here, end, el) && el.lexType == NearOpE) {
+      delete proxNode;
+      proxNode = (ProxMatchQueryNode *)ParseTerm(here, end);
+      SetRangeValues(termNode, el.text);
+      proxNode->terms.push_back (termNode);
+      return proxNode;
+    }
+    else {
+      here = oldHere; // backtrack
+      proxNode->terms.push_back (termNode);
+      ParseProxModifiers(here, end, proxNode);
+      return proxNode;
+    }
+  } else if (el.lexType == QuoteE) {
+    ParsePhrase (here, end, *proxNode);
+    return proxNode;
+  }
+  else if (el.lexType == OpenSquareBracketE) {
+    ParseSquareBrackets (here, end, proxNode);
+    ParseProxModifiers (here, end, proxNode);
+    return proxNode;
+  }
+
+  // not a term
+  here = oldHere;
+  delete proxNode;
+  return NULL;
+}
+
+
+static QueryNode *ParseExpression (UCArray::const_iterator &here,
+				   UCArray::const_iterator end) {
+  LexEl el;
+  QueryNode *curTree = NULL;
+
+  UCArray::const_iterator oldHere = here;
+  while (ParseLexEl (here, end, el)) {
+    if (el.lexType == OpenSquareBracketE ||
+	el.lexType == OpenBracketE ||
+	el.lexType == TermE ||
+	el.lexType == QuoteE ||
+	el.lexType == IntegerE ) {
+	//	el.lexType == TagE) { tag at end of term now
+      // some type of term, back track and parse it
+      here = oldHere;
+      curTree = OrAdd (curTree, ParseTerm (here, end));
+      
+    } else if (el.lexType == AndOpE) {
+      curTree = AndAdd (curTree, ParseTerm (here, end));
+      
+    } else if (el.lexType == OrOpE) {
+      curTree = OrAdd (curTree, ParseTerm (here, end));
+      
+    } else if (el.lexType == NotOpE) {
+      curTree = NotAdd (curTree, ParseTerm (here, end));
+      
+    } else if (el.lexType == CloseBracketE) {
+      // parsebracketexpression is waiting for the last bracket, so put it back
+      here = oldHere;
+      break;
+    
+    } else break;
+    
+    oldHere = here;
+  }
+
+  return curTree;
+}
+
+QueryNode *ParseQuery (const UCArray &queryStr) {
+  UCArray::const_iterator here = queryStr.begin();
+  UCArray::const_iterator end = queryStr.end();
+  return ParseExpression (here, end);
+}
Index: /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryParser.h
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryParser.h	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/mgpp/text/GSDLQueryParser.h	(revision 1278)
@@ -0,0 +1,33 @@
+/**************************************************************************
+ *
+ * QueryParser.h -- Query parser for a simple query language
+ * Copyright (C) 2000  Rodger McNab
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ *
+ **************************************************************************/
+
+#ifndef GSDLQUERYPARSER_H
+#define GSDLQUERYPARSER_H
+
+#include "UCArray.h"
+#include "MGQuery.h"
+
+// returns NULL if the query could not be parsed
+QueryNode *ParseQuery (const UCArray &queryStr);
+
+#endif
Index: /branches/New_Config_Format-branch/gsdl/src/recpt/GCC.mak
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/recpt/GCC.mak	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/recpt/GCC.mak	(revision 1278)
@@ -0,0 +1,141 @@
+###########################################################################
+#
+# gcc win32 makefile -- src/recpt
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 2000  The New Zealand Digital Library Project
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+AR = ar
+RANLIB = ranlib
+CC = g++
+DELETE = del
+INSTALL = copy
+
+o = .o
+/ = \\
+
+CPPFLAGS = -g -Wall
+DEFS = -D__WIN32__ -DGSDL_USE_IOS_H
+LIBS = ..$/..$/packages$/wingdbm$/gdbm.a ..$/..$/packages$/wincrypt$/crypt.a
+
+INCLUDES = -I"..$/..$/lib" -I"..$/colservr" -I"..$/..$/packages$/mg$/lib" \
+           -I"..$/..$/packages$/mg$/src$/text" -I"..$/..$/packages$/wincrypt" \
+           -I"..$/..$/packages$/wingdbm" -I"."
+ 
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS)
+LINK = $(CC) $(LDFLAGS) -o $@
+ 
+.SUFFIXES:
+.SUFFIXES: .c $o
+.c$o:
+	$(COMPILE) $<
+
+.SUFFIXES: .cpp $o
+.cpp$o:
+	$(COMPILE) $< 
+
+COMMONHEADERS = receptionist.h cgiwrapper.h cgiargs.h action.h browserclass.h \
+                converter.h recptconfig.h cgiutils.h OIDtools.h browsetools.h htmlgen.h \
+		statusaction.h pageaction.h comtypes.h recptproto.h \
+		pingaction.h queryaction.h documentaction.h \
+		extlinkaction.h buildaction.h htmlutils.h \
+		querytools.h formattools.h tipaction.h authenaction.h infodbclass.h \
+                userdb.h usersaction.h vlistbrowserclass.h hlistbrowserclass.h \
+		datelistbrowserclass.h invbrowserclass.h pagedbrowserclass.h \
+		htmlbrowserclass.h delhistoryaction.h historydb.h
+
+RECEPTHEADERS = 
+
+LIBRARYHEADERS = nullproto.h
+
+HEADERS = $(COMMONHEADERS) $(RECPTHEADERS) $(LIBRARYHEADERS)
+
+
+COMMONSOURCES = receptionist.cpp cgiwrapper.cpp cgiargs.cpp action.cpp browserclass.cpp \
+                converter.cpp recptconfig.cpp cgiutils.cpp OIDtools.cpp browsetools.cpp \
+		htmlgen.cpp statusaction.cpp pageaction.cpp comtypes.cpp \
+		recptproto.cpp pingaction.cpp queryaction.cpp documentaction.cpp \
+		extlinkaction.cpp buildaction.cpp htmlutils.cpp querytools.cpp formattools.cpp \
+		tipaction.cpp authenaction.cpp infodbclass.cpp userdb.cpp usersaction.cpp \
+		vlistbrowserclass.cpp hlistbrowserclass.cpp datelistbrowserclass.cpp \
+		invbrowserclass.cpp pagedbrowserclass.cpp htmlbrowserclass.cpp \
+		delhistoryaction.cpp historydb.cpp
+
+RECPTSOURCES = recptmain.cpp
+
+LIBRARYSOURCES = nullproto.cpp librarymain.cpp
+
+SOURCES = $(COMMONSOURCES) $(RECPTSOURCES) $(LIBRARYSOURCES)
+
+
+COMMONOBJECTS = receptionist$o cgiwrapper$o cgiargs$o action$o browserclass$o \
+                converter$o recptconfig$o cgiutils$o OIDtools$o browsetools$o \
+		htmlgen$o statusaction$o pageaction$o comtypes$o \
+		recptproto$o pingaction$o queryaction$o documentaction$o \
+		extlinkaction$o buildaction$o htmlutils$o querytools$o \
+		formattools$o tipaction$o authenaction$o \
+                infodbclass$o userdb$o usersaction$o vlistbrowserclass$o \
+		hlistbrowserclass$o datelistbrowserclass$o invbrowserclass$o \
+		pagedbrowserclass$o htmlbrowserclass$o delhistoryaction$o \
+		historydb$o
+
+RECPTOBJECTS = recptmain$o
+
+LIBRARYOBJECTS = nullproto$o librarymain$o
+
+OBJECTS = $(COMMONOBJECTS) $(RECPTOBJECTS) $(LIBRARYOBJECTS)
+
+
+COLSERVROBJECTS = ..$/colservr$/mgq$o \
+                  ..$/colservr$/mgsearch$o \
+                  ..$/colservr$/querycache$o \
+                  ..$/colservr$/queryinfo$o \
+                  ..$/colservr$/collectserver$o \
+                  ..$/colservr$/colservrconfig$o \
+                  ..$/colservr$/maptools$o \
+                  ..$/colservr$/filter$o \
+                  ..$/colservr$/source$o \
+                  ..$/colservr$/browsefilter$o \
+                  ..$/colservr$/queryfilter$o \
+                  ..$/colservr$/mggdbmsource$o \
+                  ..$/colservr$/phrasesearch$o \
+                  ..$/colservr$/phrasequeryfilter$o
+
+
+EXEC = library.exe
+
+all: $(EXEC)
+
+clean:
+	if EXIST *$o $(DELETE) *$o
+	if EXIST $(EXEC) $(DELETE) $(EXEC)
+
+install:
+	$(INSTALL) $(EXEC) ..$/..$/cgi-bin$/
+
+LIBRARY_OBJS = $(COMMONOBJECTS) $(LIBRARYOBJECTS) $(COLSERVROBJECTS) \
+    ..$/..$/lib$/gsdllib.a  \
+    ..$/..$/packages$/mg$/src$/text$/libtextin.a \
+    ..$/..$/packages$/mg$/lib$/libmg.a
+
+library.exe: $(LIBRARY_OBJS)
+	$(LINK) $(LIBRARY_OBJS) $(LIBS) 
Index: /branches/New_Config_Format-branch/gsdl/src/recpt/z3950proto.cpp
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/recpt/z3950proto.cpp	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/recpt/z3950proto.cpp	(revision 1278)
@@ -0,0 +1,232 @@
+
+#ifndef Z3950PROTO_H
+#define Z3050PROTO_H
+
+#include "z3950proto.h"
+#include "comtypes.h"
+#include <stdio.h>
+
+/*** 
+    We will use the "collection" argument as the name of the database
+    to query on the z3950 server.
+***/
+
+
+z3950_server::z3950_server() {
+  count=0;
+  info=NULL;
+  meta["iconcollection"]="/~johnmcp/gsdl/images/zserver.png";
+}
+
+
+
+
+// z3950 Protocol functions
+z3950proto::z3950proto() {
+  zserver_count=0;
+}
+
+void z3950proto::add_server (const z3950_server& zserver) {
+
+  // append the new server
+  zserver_count++;
+  zservers.push_back(zserver);
+}
+
+void z3950proto::configure (const text_t &/*key*/, 
+			    const text_tarray &/*cfgline*/) {
+
+  // this is called for each line in the gsdlsite.cfg file
+  /*  cerr << "z3950proto::configure called:"
+      << "key is " << key.getcstr()
+      << "\n1st line is " << cfgline[0].getcstr() << endl;
+  */
+}
+
+
+bool z3950proto::init (ostream &/*logout*/) {
+  // set up tcp connection to server here?
+  // we might also read in the config file here (instead of librarymain.cpp)
+
+  // 
+
+  // logout goes to initout.txt
+  //  logout <<"zdebug:init:Number of z3950 servers: "<< zserver_count << "\n";
+  //logout << "\t1st server name: " << zservers[0].getName().getcstr() << "\n";
+  return true;
+
+}
+
+/*text_t z3950proto::get_protocol_name () {
+  return "z3950proto";
+}
+*/
+
+void z3950proto::get_collection_list (text_tarray &collist, 
+				      comerror_t &/*err*/,
+				      ostream &/*logout*/) {
+  // logout here DOESN'T go to initout.txt
+  // logout << "zdebug: get_collection_list called:\n";
+
+  /** *** for now, we are assuming that each SERVER is a GSDL collection,
+      as opposed to each DATABASE on the servers.
+  */
+  z3950_server_array::iterator here = zservers.begin();
+  z3950_server_array::iterator end = zservers.end();
+  while (here != end) {
+    collist.push_back(here->getName());
+    //const ShortColInfo_t *info=here->getInfo();
+    //collist.push_back(info->name);
+    here++;
+  }
+}
+
+void z3950proto::has_collection (const text_t &collection, bool &hascollection,
+				 comerror_t &/*err*/, ostream &/*logout*/) {
+  z3950_server_array::iterator here = zservers.begin();
+  z3950_server_array::iterator end = zservers.end();
+  while (here != end) {
+    if(here->getName()==collection) {
+      hascollection=true;
+      return;
+    }
+    here++;
+  }
+  hascollection=false;
+}
+
+void z3950proto::ping (const text_t &/*collection*/, bool &wassuccess, 
+		       comerror_t &/*err*/, ostream &/*logout*/) {
+  // should we just ping the server, or actually create a connection
+  // to the z39.50 server process on the machine ?
+  wassuccess = true;
+}
+
+void z3950proto::get_collectinfo (const text_t &collection,
+				  ColInfoResponse_t &collectinfo,
+				  comerror_t &err, ostream &logout) {
+
+  // set err to protocolError if something goes wrong...
+
+  z3950_server_array::iterator here = zservers.begin();
+  z3950_server_array::iterator end = zservers.end();
+  while (here != end) {
+    if(here->getName()==collection) {
+      break;
+    }
+    here++;
+  }
+
+  // is this right? ie does end refer to the last element, or AFTER the
+  // last element?
+  if (here==end) {
+    err=protocolError;
+    logout << "z39.50: couldn't find collection" 
+	   << collection.getcstr()
+	   << endl;
+    return;
+  }
+
+  /*  collectinfo.shortInfo.name="sdfg";
+      collectinfo.shortInfo.host="localhost";
+      collectinfo.shortInfo.port=0; */
+  const ShortColInfo_t *colinfo=here->getInfo();
+  collectinfo.shortInfo.name=colinfo->name;
+  collectinfo.shortInfo.host=colinfo->host;
+  collectinfo.shortInfo.port=colinfo->port;
+
+  collectinfo.isPublic=true;
+  // don't use beta field
+  /*collectinfo.isBeta=false;*/
+  collectinfo.buildDate=1;
+  // leave ccsCols empty (no cross-coll. searching - for now)
+  /*collectinfo.ccsCols=(text_tarray);*/ //not like this!!!
+  collectinfo.languages.push_back("en");
+  collectinfo.languages.push_back("fr");
+  collectinfo.numDocs=0;
+  collectinfo.numWords=0;
+  collectinfo.numBytes=0;
+  // copy the text maps over.
+  //  collectinfo.collectionmeta; // text_tmap
+  //  delete collectinfo.collectionmeta;
+  collectinfo.collectionmeta=*(here->getMeta());
+  /* collectinfo.format; //text_tmap
+    collectinfo.building; //text_tmap
+  */
+
+collectinfo.receptionist="z3950"; /* for now... this is a url,
+				    relative to .../cgi-bin   */
+}
+
+void z3950proto::get_filterinfo (const text_t &/*collection*/,
+				 InfoFiltersResponse_t &/*response*/,
+				 comerror_t &/*err*/, ostream &/*logout*/) {
+
+}
+
+void z3950proto::filter (const text_t &collection,
+			 FilterRequest_t &request,
+			 FilterResponse_t &response,
+			 comerror_t &err, ostream &logout) {
+  // assume this function is only called when creating the title page,
+  // and looking for the metadata regarding icons.
+  response.numDocs=0;
+  response.isApprox=Approximate; // Exact | Approximate | MoreThan
+  // leave response.termInfo empty
+  // leave response.docInfo empty
+  /* got the following for first query:
+     request.filterResultOptions=FRmetadata;
+     request.getParents=getParents
+     request.fields=metadata
+     request.docSet (includes OID);
+  */
+  // fill in the metadata for each of the OIDs (if it is requested)
+  if (request.filterResultOptions & FRmetadata) {
+    // request.fields // type text_tset
+    // docInfo is type ResultDocInfo_tarray
+    ColInfoResponse_t *info = new ColInfoResponse_t;
+    get_collectinfo (collection, *info, err, logout);
+    // should check err returned here....
+
+    ResultDocInfo_t *docInfo=new ResultDocInfo_t;
+    
+    text_tmap::iterator it=info->collectionmeta.find("collectionname");
+    // cerr now goes to errout.txt in etc directory
+    // "(*it).first" is key, "(*it).second" is value(s).
+    if (it!=info->collectionmeta.end()) 
+      docInfo->metadata["collectionname"].values.push_back((*it).second);
+    else // needs to exist, but be empty
+      docInfo->metadata["collectionname"].values.push_back("");
+
+    it=info->collectionmeta.find("iconcollection");
+    if (it!=info->collectionmeta.end()) 
+      docInfo->metadata["iconcollection"].values.push_back((*it).second);
+    else // needs to exist, but be empty
+      docInfo->metadata["iconcollection"].values.push_back("");
+
+    it=info->collectionmeta.find("iconcollectionsmall");
+    if (it!=info->collectionmeta.end()) 
+      docInfo->metadata["iconcollectionsmall"].values.push_back((*it).second);
+    else // needs to exist, but be empty
+      docInfo->metadata["iconcollectionsmall"].values.push_back("");
+    
+
+    response.docInfo.push_back(*docInfo);
+  }
+
+  err=noError;
+}
+
+void z3950proto::get_document (const text_t &/*collection*/,
+			       const DocumentRequest_t &/*request*/,
+			       DocumentResponse_t &/*response*/,
+			       comerror_t &err, ostream &logout) {
+
+  if (0) {
+    err=protocolError;
+    logout << "Some error\n";
+  }
+}
+
+
+#endif
Index: /branches/New_Config_Format-branch/gsdl/src/recpt/z3950proto.h
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/recpt/z3950proto.h	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/recpt/z3950proto.h	(revision 1278)
@@ -0,0 +1,120 @@
+
+#ifndef Z3950PROTO_H
+#define Z3050PROTO_H
+
+#include "recptproto.h"
+
+// each server can have one or more databases
+/*
+  class z3950_DB {
+  protected:
+  text_t name; // Descriptive name
+  text_t database; // name for server
+  
+  public:
+  z3950_DB();     // constructor
+  ~z3950_DB();    // deconstructor
+  const text_t getName() {return name;}                // this gets name
+  void setName(text_t newName) {name=newName;} // this sets name
+  // need to get next (for linked list)
+  };
+  
+
+  typedef  vector<z3950_DB>  z3950_DB_array;
+*/
+
+/*class z3950_DB_Array {
+  protected:
+  int count;
+  // some arraytype...
+  public:
+  z3950_DB first();
+  z3950_DB last();
+  void     add(z3950_DB *db);
+  void     remove(z3950_DB *db);
+  };
+*/
+
+
+class z3950_server {
+ protected:
+  text_t title;    // Descriptive name
+  text_t hostname; // network name (IP or host+domain name)
+  text_tmap meta;  // metadata for this collection (ie server/database pair)
+  // this is currently only iconcollection (and iconcollectionsmall)
+  int count;
+  //  z3950_DB_array* db;
+  ShortColInfo_t *info; // has  (database) name, host and port
+
+ public:
+  z3950_server();
+  // z3950_DB_array getDBs();
+  const text_t getName() {return title;}
+  void setName(const text_t &newname) {title=newname;}
+  //  void setHostname(const text_t &newname) {hostname=newname;}
+  void setInfo(ShortColInfo_t *newinfo) {info=newinfo;}
+  const ShortColInfo_t *getInfo() {return info;}
+  const text_tmap *getMeta() {return &meta;}
+};
+
+typedef  vector<z3950_server>  z3950_server_array;
+
+
+
+
+class z3950proto : public recptproto {
+protected:
+  int zserver_count;
+  z3950_server_array zservers;
+public:
+  z3950proto();
+  virtual ~z3950proto() {}
+
+  /*
+  void add_collectserver (collectserver *thecserver) 
+        {cservers.addcollectserver(thecserver);}
+  */
+
+  void add_server(const z3950_server& zserver);
+
+  void configure (const text_t &key, const text_tarray &cfgline);
+
+  bool init (ostream &logout);
+
+  text_t get_protocol_name () {return "z3950proto";}
+
+  void get_collection_list (text_tarray &collist, comerror_t &err, 
+			    ostream &logout);
+
+  void has_collection (const text_t &collection, bool &hascollection, 
+		       comerror_t &err, ostream &logout);
+  
+  void ping (const text_t &collection, bool &wassuccess, 
+	     comerror_t &err, ostream &logout);
+  
+  void get_collectinfo (const text_t &collection, 
+			ColInfoResponse_t &collectinfo,
+			comerror_t &err, ostream &logout);
+  
+  void get_filterinfo (const text_t &collection,
+		       InfoFiltersResponse_t &response,
+		       comerror_t &err, ostream &logout);
+  
+  /*  void get_info (const text_t &collection, const text_tset &metadata,
+      FilterResponse_t &response, ostream &logout);
+  */
+  
+  void filter (const text_t &collection,
+	       FilterRequest_t &request,
+	       FilterResponse_t &response,
+	       comerror_t &err, ostream &logout);
+  
+  void get_document (const text_t &collection,
+		     const DocumentRequest_t &request,
+		     DocumentResponse_t &response,
+		     comerror_t &err, ostream &logout);
+
+};
+
+
+#endif
Index: /branches/New_Config_Format-branch/gsdl/src/w32server/win32.mak
===================================================================
--- /branches/New_Config_Format-branch/gsdl/src/w32server/win32.mak	(revision 1278)
+++ /branches/New_Config_Format-branch/gsdl/src/w32server/win32.mak	(revision 1278)
@@ -0,0 +1,214 @@
+###########################################################################
+#
+# win32 makefile -- src/w32server
+# A component of the Greenstone digital library software
+# from the New Zealand Digital Library Project at the
+# University of Waikato, New Zealand.
+#
+# Copyright (C) 1999  The New Zealand Digital Library Project
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+###########################################################################
+
+GSDLHOME = d:\home\dl\gsdl
+STLPATH = d:\home\dl\stl\stlport
+
+AR = lib
+CC = cl
+RSC = rc
+CPPFLAGS =
+LDFLAGS =
+DEFS = -DNZDL -DQUIET -D__WIN32__ -DGSDL_NAMESPACE_BROKEN -DGSDL_USE_IOS_H \
+       -DSHORT_SUFFIX -DPARADOCNUM -DHAVE_CONFIG_H -D__STL_NO_NEW_IOSTREAMS \
+       -DGSDLSERVER -DGSDLUSAGELOG
+INCLUDES = -I$(GSDLHOME)\src\w32server -I$(GSDLHOME)\src\recpt -I$(GSDLHOME)\lib \
+	   -I$(GSDLHOME)\src\colservr -I$(GSDLHOME)\packages\mg \
+	   -I$(GSDLHOME)\packages\mg\lib -I$(GSDLHOME)\packages\mg\src\text \
+	   -I$(GSDLHOME)\packages\wingdbm -I$(STLPATH) -I$(GSDLHOME)\packages\wincrypt
+
+LIBS = $(GSDLHOME)\packages\wingdbm\gdbm.lib $(GSDLHOME)\packages\wincrypt\crypt.lib \
+       $(GSDLHOME)\lib\gsdllib.lib $(GSDLHOME)\packages\mg\src\text\libtextin.lib \
+       $(GSDLHOME)\packages\mg\lib\libmg.lib \
+       kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib \
+       shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
+
+
+COMPILE = $(CC) -c $(CPPFLAGS) $(DEFS) $(INCLUDES)
+LINK = $(CC) $(LDFLAGS) -o $@
+
+.SUFFIXES:
+.SUFFIXES: .c .obj
+.c.obj:
+	$(COMPILE) $<
+
+.SUFFIXES: .cpp .obj
+.cpp.obj:
+	$(COMPILE) $< 
+
+HEADERS = cgiwrapper.h conftools.h d_winsock.h fnord.h httpreq.h httpsend.h \
+          httpsrv.h locate.h netio.h parse.h settings.h startbrowser.h \
+	  wincgiutils.h
+
+SOURCES = cgiwrapper.cpp conftools.cpp d_winsock.cpp fnord.cpp httpreq.cpp httpsend.cpp \
+          httpsrv.cpp locate.cpp netio.cpp parse.cpp settings.cpp startbrowser.cpp \
+	  wincgiutils.cpp
+
+OBJECTS = cgiwrapper.obj conftools.obj d_winsock.obj fnord.obj httpreq.obj httpsend.obj \
+          httpsrv.obj locate.obj netio.obj parse.obj settings.obj startbrowser.obj \
+	  wincgiutils.obj server.res
+
+#RECPTOBJECTS = $(GSDLHOME)\src\recpt\receptionist.obj \
+#	       $(GSDLHOME)\src\recpt\cgiargs.obj \
+#               $(GSDLHOME)\src\recpt\action.obj \
+#               $(GSDLHOME)\src\recpt\browserclass.obj \
+#               $(GSDLHOME)\src\recpt\converter.obj \
+#	        $(GSDLHOME)\src\recpt\recptconfig.obj \
+#               $(GSDLHOME)\src\recpt\cgiutils.obj \
+#               $(GSDLHOME)\src\recpt\OIDtools.obj \
+#               $(GSDLHOME)\src\recpt\browsetools.obj \
+#               $(GSDLHOME)\src\recpt\htmlgen.obj \
+#               $(GSDLHOME)\src\recpt\statusaction.obj \
+#               $(GSDLHOME)\src\recpt\pageaction.obj \
+#               $(GSDLHOME)\src\recpt\comtypes.obj \
+#               $(GSDLHOME)\src\recpt\recptproto.obj \
+#               $(GSDLHOME)\src\recpt\pingaction.obj \
+#               $(GSDLHOME)\src\recpt\queryaction.obj \
+#               $(GSDLHOME)\src\recpt\documentaction.obj \
+#               $(GSDLHOME)\src\recpt\extlinkaction.obj \
+#               $(GSDLHOME)\src\recpt\buildaction.obj \
+#               $(GSDLHOME)\src\recpt\htmlutils.obj \
+#               $(GSDLHOME)\src\recpt\querytools.obj \
+#               $(GSDLHOME)\src\recpt\formattools.obj \
+#               $(GSDLHOME)\src\recpt\tipaction.obj \
+#               $(GSDLHOME)\src\recpt\authenaction.obj \
+#               $(GSDLHOME)\src\recpt\infodbclass.obj \
+#               $(GSDLHOME)\src\recpt\userdb.obj \
+#               $(GSDLHOME)\src\recpt\usersaction.obj \
+#               $(GSDLHOME)\src\recpt\vlistbrowserclass.obj \
+#               $(GSDLHOME)\src\recpt\hlistbrowserclass.obj \
+#               $(GSDLHOME)\src\recpt\datelistbrowserclass.obj \
+#               $(GSDLHOME)\src\recpt\invbrowserclass.obj \
+#               $(GSDLHOME)\src\recpt\pagedbrowserclass.obj \
+#               $(GSDLHOME)\src\recpt\htmlbrowserclass.obj \
+#               $(GSDLHOME)\src\recpt\delhistoryaction.obj \
+#               $(GSDLHOME)\src\recpt\historydb.obj
+
+#LIBRARYOBJECTS = $(GSDLHOME)\src\recpt\nullproto.obj
+
+#COLSERVROBJECTS = $(GSDLHOME)\src\colservr\mgq.obj \
+#                  $(GSDLHOME)\src\colservr\mgsearch.obj \
+#                  $(GSDLHOME)\src\colservr\querycache.obj \
+#                  $(GSDLHOME)\src\colservr\queryinfo.obj \
+#                  $(GSDLHOME)\src\colservr\collectserver.obj \
+#                  $(GSDLHOME)\src\colservr\colservrconfig.obj \
+#                  $(GSDLHOME)\src\colservr\maptools.obj \
+#                  $(GSDLHOME)\src\colservr\filter.obj \
+#                  $(GSDLHOME)\src\colservr\source.obj \
+#                  $(GSDLHOME)\src\colservr\browsefilter.obj \
+#                  $(GSDLHOME)\src\colservr\queryfilter.obj \
+#                  $(GSDLHOME)\src\colservr\mggdbmsource.obj \
+#                  $(GSDLHOME)\src\colservr\phrasesearch.obj \
+#                  $(GSDLHOME)\src\colservr\phrasequeryfilter.obj
+
+RECPTOBJECTS = ..\recpt\receptionist.obj \
+	       ..\recpt\cgiargs.obj \
+               ..\recpt\action.obj \
+               ..\recpt\browserclass.obj \
+               ..\recpt\converter.obj \
+	       ..\recpt\recptconfig.obj \
+               ..\recpt\cgiutils.obj \
+               ..\recpt\OIDtools.obj \
+               ..\recpt\browsetools.obj \
+               ..\recpt\htmlgen.obj \
+               ..\recpt\statusaction.obj \
+               ..\recpt\pageaction.obj \
+               ..\recpt\comtypes.obj \
+               ..\recpt\recptproto.obj \
+               ..\recpt\pingaction.obj \
+               ..\recpt\queryaction.obj \
+               ..\recpt\documentaction.obj \
+               ..\recpt\extlinkaction.obj \
+               ..\recpt\buildaction.obj \
+               ..\recpt\htmlutils.obj \
+               ..\recpt\querytools.obj \
+               ..\recpt\formattools.obj \
+               ..\recpt\tipaction.obj \
+               ..\recpt\authenaction.obj \
+               ..\recpt\infodbclass.obj \
+               ..\recpt\userdb.obj \
+               ..\recpt\usersaction.obj \
+               ..\recpt\vlistbrowserclass.obj \
+               ..\recpt\hlistbrowserclass.obj \
+               ..\recpt\datelistbrowserclass.obj \
+               ..\recpt\invbrowserclass.obj \
+               ..\recpt\pagedbrowserclass.obj \
+               ..\recpt\htmlbrowserclass.obj \
+               ..\recpt\delhistoryaction.obj \
+               ..\recpt\historydb.obj
+
+LIBRARYOBJECTS = ..\recpt\nullproto.obj
+
+COLSERVROBJECTS = ..\colservr\mgq.obj \
+                  ..\colservr\mgsearch.obj \
+                  ..\colservr\querycache.obj \
+                  ..\colservr\queryinfo.obj \
+                  ..\colservr\collectserver.obj \
+                  ..\colservr\colservrconfig.obj \
+                  ..\colservr\maptools.obj \
+                  ..\colservr\filter.obj \
+                  ..\colservr\source.obj \
+                  ..\colservr\browsefilter.obj \
+                  ..\colservr\queryfilter.obj \
+                  ..\colservr\mggdbmsource.obj \
+                  ..\colservr\phrasesearch.obj \
+                  ..\colservr\phrasequeryfilter.obj
+
+EXEC = server.exe
+
+all: $(EXEC)
+
+clean:
+	del *.obj
+	del $(EXEC)
+
+install:
+	copy $(EXEC) $(GSDLHOME)\$(EXEC)
+
+LIBRARY_OBJS = $(OBJECTS) $(RECPTOBJECTS) $(LIBRARYOBJECTS) $(COLSERVROBJECTS)
+server.exe: $(LIBRARY_OBJS)
+	    $(LINK) $(LIBRARY_OBJS) $(LIBS) 
+
+
+SOURCE = $(GSDLHOME)\src\w32server\newgsdl.bmp
+SOURCE = $(GSDLHOME)\src\w32server\resource.h
+SOURCE = $(GSDLHOME)\src\w32server\server.ico
+SOURCE = $(GSDLHOME)\src\w32server\gsdlcol.bmp
+SOURCE = $(GSDLHOME)\src\w32server\server.rc
+DEP_RSC_SERVE=\
+	"$(GSDLHOME)\src\w32server\gsdlcol.bmp"\
+	"$(GSDLHOME)\src\w32server\newgsdl.bmp"\
+	"$(GSDLHOME)\src\w32server\server.ico"\
+
+server.res : $(SOURCE) $(DEP_RSC_SERVE) "$(GSDLHOME)\src\w32server"
+   $(RSC) /l 0x409 /fo"$(GSDLHOME)\src\w32server\server.res" /i "$(GSDLHOME)\src\w32server" \
+ /d "NDEBUG" $(SOURCE)
+
+
+"$(GSDLHOME)\src\w32server\server.res" : $(SOURCE) $(DEP_RSC_SERVE) "$(GSDLHOME)\src\w32server"
+   $(RSC) /l 0x409 /fo"$(GSDLHOME)\src\w32server\server.res" /i "$(GSDLHOME)\src\w32server" \
+ /d "NDEBUG" $(SOURCE)
+
