Changes for the ZAP Module. $Date: 2008-10-06 18:51:07 $

--- 1.4.10 2008/10/06

Fixed SEGV which could occur for partial results and servertotal=s.

--- 1.4.9 2007/05/08

Updated for libyaz3 (3.0.2).

--- 1.4.8 2007/05/07

Updated for libyaz3.

--- 1.4.7 2006/12/22

Updates for Apache 2.2, based on patch from Jrg Prante.

Changed to 'Revised BSD License'.

--- 1.4.6 2006/09/04

Upgrade for YAZ 2.1.28, which no longer offers tcpip_strtoaddr.

Flush log file every time a log entry is written.

--- 1.4.5 2003/12/03

Configure didn't enable Tcl on compilation when it should.

--- 1.4.4 2003/11/15

Fixed a bug with "content-type" setting.

--- 1.4.3 2003/11/12

Fixed Apache 2 check to work with Apache 2 on Red Hat 9.

Documentation in Docbook. Documentation in HTML and PDF part of ZAP
distribution.

--- 1.4.2 2003/09/29

Apache 2 support.

ZAP reads show_number and show_offset which is the number of
records to display (record rules) and offset. ZAP also sets
sortoffset1,sortoffset2,..  to set up number,start,show_number,
show_offset respectively.

If ZAP var servertotal=s is like servertotal=1 but records are
sorted too. Rules "sort-record .." and "sort-format .. " work like
record and format but they are invoked before actual sorting is performed
for each record. One of these rules should set Tcl variable "sort"
to value of sort criteria to be used. After sorting, "records begin"
"record",  "format", "records end" are invoked with the sorted
result.

Changed order of libs YAZLIB and TCLLIB. Patch by Peter Popovics.

--- 1.4.1 2003/02/25

Patch from Shigeru Ishida: Checked the zero length of queryString. 

Patch from Shigeru Ishida: Fixed decoding MARC records.

Patch from Shigeru Ishida: Changed the buffer size of reading ZAP
template files. 

Patch Shigeru Ishida: Added facility to remember pre-selected targets in
use of 'ptarget*' and 'palltargets' variables. And changed to
understand 'target*' variable (ex. target1, target2,...).

  If 'ptarget*' variables are set, these variables will be set
  again. Otherwise if 'ptarget*' variables are not set, these
  variables will be newly set from 'target*' variables.

  And finally 'palltargets' variable will be constructed from
  'ptarget*' variables.

  Usage:

  (1) first search + present Brief record (multiple targets)
      ~~~~~        | (set ptarget* and palltargets from target*)
                   |
                   v
  (2) second search + present Full record (1 target (one of multiple targets))
                   | (construct ptarget* and palltargets from target*)
                   |
                   v
  (3) again search + present Brief record (same multiple targets (1))
      ~~~~~          (remember ptarget* and palltargets. and set target*
                      from ptarget * and palltargets)

Patch from Shigeru Ishida: Added 'rpn-direct' value in querytype variable.
This contidion uses no 'term*', 'field*', 'entry*' and 'op*' variables.
Only 'rpnquery' variable is used. It is available to construct the
expression of RPN query flexibilly (especially 'and', 'or' and
'not' operators) in CGI script.

--- 1.4 2003/02/20

Find Tcl on Debian systems automatically.

New Tcl variable HTTP_HOST holding Apache header "Host".

New ZAP variable for scan: displayterm. Value of that is
diplayable term if present; otherwise value of term.

--- 1.3 2002/11/12

Added setting 'charset' and 'lang' to set character set language 
respectively. 

--- 1.2 2002/05/17 Third official release

Bug fix: endless loop for big code sections in def/override.

Bug fix: For servertotal when resultCount==0.

Bug fix: For servertotal, ZAP variables weren't set.

ZAP provides more informative implemenation{Name,Version}.

Bug fix: problems with callZap in format rules (XML, MARC conversions).

--- 1.1 2001/10/26 Second official release

Fixed bug that could cause ZAP! to crash when doing present requests
sub pages using callZap.

Added facility to make per-target CCL config files. File cclfields.zap
is read as before (to verify syntax etc). If file cclfields.<target>.zap
exists it will be used instead to perform CCL to RPN for the target.
Character slash (/) in target name should be replaced by underscore.
For example, file cclfields.bagel_gils.zap read for target bagel/gils.

Added setting servertotal which when set to 1, defers record
event rules (records begin, record .., record end) to allow
all server-hits to be executed together before any records
are displayed.

Fixed problem with env(REMOTE_USER) setting - ZAP! now unsets
the variable when no remote-user is given.

ZAP! logs the elapsed time when receiving a response (init, search,
etc) from the target.

Added expire variable which sets Expire to current date + number of
seconds (Apache only).

New setting: schema that sets Z39.50 schema for retrieval (piggyback
disabled when present).

Variable content-type may be used to specify hmm.. Content-type. Set
it in %%def / %%override.

Function callZap returns the value of Tcl variable "result" in child.

ZAP! handles Danmarc/Danmarc2 records better.

String tags are 8-bit based in %format sections so that, say, Latin-1
characters may be used.

Fixed character conversion Tcl command setz.

Fixed HTML output for newer Tcl versions 8.1-8.3 where the internal
structure is UTF-8. The html, callZap and urlenc commands now
converts to the default external system encoding - normally iso8859-1.

Added call to Tcl_Init so that Tcl packages are available.

Bug fix: ODR mess when calling CallZap in Scan Response rules.

Added feature: alltargets holds encoded target=t1&target=t2, etc.
to ease the creation of hyper-links within per-target list
sections, such as %%record.

Added feature: variables cookie(name) is cookie value for "name".
Cookies can be read in any section, but must be modified in
%%override section.

Added feature: variable map(field,target) maps field for specific
target.

--- 1.0 2000/09/14 First official release

Updated CGI version of ZAP to use cookies.

ZAP uses one cookie for the session rather than one cookie per target.

Added authOpen(target) to specify open-style authentication for
specific target.

Added userId(target), groupId(target) and password(target) settings
to specify User-ID, group-ID and password for specific target.

Fixes for multi-target operations with cookies.

Added support for Tcl code in %%def and %%override sections.

Added Tcl command setz that works like Tcl's set but also sets
ZAP local variable.

Added Tcl command virtual which provides HTTP sub requests (Apache only).

Added setting piggyback. When 1 piggyback (search response with records)
is used; when 0 no search requests for records. Default is 1.

ZAP log prints microseconds as well.

Apache configuration setting ZapLog can be set to none indicating that
no log should be produced.

ZAP no longer caches targets with identical ID's but different host names
(rawname).

Fixed bug regarding callZap / Tcl.

Using GNU autoconf and RPM spec file.

Added es-user-id setting.

Added support for the ILL-Request using Z39.50 Order. The following
variables are read so far:

 ill,protocol-version-num
 ill,transaction-id,initial-requester-id,person-or-institution-symbol,person
 ill,transaction-id,initial-requester-id,person-or-institution-symbol,institution
 ill,transaction-id,initial-requester-id,name-of-person-or-institution,name-of-person
 ill,transaction-id,initial-requester-id,name-of-person-or-institution,name-of-institution
 ill,transaction-id,transaction-group-qualifier
 ill,transaction-id,transaction-qualifier
 ill,transaction-id,sub-transaction-qualifier
 ill,requester-id,person-or-institution-symbol,person
 ill,requester-id,person-or-institution-symbol,institution
 ill,requester-id,name-of-person-or-institution,name-of-person
 ill,requester-id,name-of-person-or-institution,name-of-institution
 ill,responder-id,person-or-institution-symbol,person
 ill,responder-id,person-or-institution-symbol,institution
 ill,responder-id,name-of-person-or-institution,name-of-person
 ill,responder-id,name-of-person-or-institution,name-of-institution
 ill,transaction-type
 ill,ill-service-type
 ill,requester-optional-messages,can-send-RECEIVED
 ill,requester-optional-messages,can-send-RETURNED
 ill,requester-optional-messages,requester-SHIPPED
 ill,requester-optional-messages,requester-CHECKED-IN
 ill,place-on-hold
 ill,item-id,item-type
 ill,item-id,call-number
 ill,item-id,author
 ill,item-id,title
 ill,item-id,sub-title
 ill,item-id,sponsoring-body
 ill,item-id,place-of-publication
 ill,item-id,publisher
 ill,item-id,series-title-number
 ill,item-id,volume-issue
 ill,item-id,edition
 ill,item-id,publication-date
 ill,item-id,publication-date-of-component
 ill,item-id,author-of-article
 ill,item-id,title-or-article
 ill,item-id,pagination
 ill,item-id,ISBN
 ill,item-id,ISSN
 ill,item-id,additional-no-letters
 ill,item-id,verification-reference-source
 ill,copyright-complicance
 ill,retry-flag
 ill,forward-flag
 ill,requester-note
 ill,forward-note

Multiple database may be specified for a target - separate database names
with plus, as in target=z3950.com/base1+base2

Added support for embedded CCL queries. A variable named
cclterm1,2.. is treated as a CCL query. The available access
points (ti, au, isbn, etc) and their mapping to RPN is defined
in the file cclfields.zap.

Added support for internal XML to GRS-1 conversion and MARC to GRS-1
conversion. Patterns as used in format-sections may now be used for MARC
records and XML records as well.

Relative path allowed for recursive ZAP calls using the $<..>-notation
and CallZap (if Tcl is enabled).

For RPN queries ZAP treats multiple terms with same name as a list
that is OR'ed. ZAP used to only consider the first. 

For RPN queries ZAP treats variable op (no digit after op) as flags
for operators op1, op2, .. opN. Currently left and right are
observed. If value is left the left-most operator is treated when
terms are empty. If value is right the right-most operator is
treated. The default and old treatment of operators was "left".

Implemented non-blocking i/o. Targets that doesn't respond
within a timeout are considered unavailable. Variable timeout
specifies number of seconds (default is 10).

Added support for variable "rawterm.." in queries that works as "term.."
except that the term is considered "raw" and include attributes, etc.

New action "init" which sends initializeRequest only. To be used
for "login" pages.

Implemented authentication support. Variable authOpen specifies
*open* style idAuthentication. Variable authGroupId, authUserId and
authPassword specifies *idPass* authentication.

Implemented proxy support. Variable proxy (if existing and non-empty)
specifies default proxy server. Also proxy(target) specifies proxy for
specific host.

Changed name of ZAP Handler to zap-script (used to be z39.50-search).

Added APDULog to specify name of APDU log file. If not specified
no log is generated.

Added support for language specific operators for the definition of
$query. opdisplay(and)/opdisplay(or)/opdisplay(not) may be
set the names of those operators in a non-english language.

Fix: Queries only including one or more spaces now treated as
non-existent terms.

Added DSO support for ZAP. Tested DSO with Apache 1.3.6. Note, DSO
didn't work for ZAP with Apache version 1.3.4.

Added support for many more record syntaxes - including XML, /HTML, etc.

Fixed handling of multipleNonSurrogateDiagnostics for search/present-
response.

--- 0.9 1998/10/20 Third internal release

Added ES Item Order. Invoked when "action" is "es" and
"es-package-type" is "itemorder".  Currently only
es-itemorder-contact-{name,phone,email} and es-itemorder-item (result
set pos.) is used for the Item Order request.

Added initial Extended Services support - enabled when variable
"action" is "es". Variables "es-function", "es-package-name" and
es-package-type specifies ES request parameters. The following
sections are defined for the status for the ES response: "es-response
done", "es-response accepted", "es-response failure", and "es-response
unknown". Each diagnostic message returned in ES response triggers
section "es-diagnostic". Whole list of diagnostics surrounded by
sections "es-diagnostics-begin" and "es-diagnostics-end".

Added sub page call support. A sub page call makes it possible for a
template to invoked another search template recursively. Use
$<template.zap?var1=val1&var2=val2&...> to invoke it.

Added scan support. Action type "scan". The initial starting term for
scan is given by variables "term1" and "field1", i.e the first "line"
of the query. Other variables that affect scan are "scannumber"
(default 10), "scanposition" (preferred position in response, default
5). If term1 is empty section "scan-empty" is invoked before a scan
request is sent.  If query is ok, section "scan-ok" is invoked. When
response is received "firstterm" and "lastterm" hold the first- and
last term in scan response. These terms may be used to create links
that refer to previous terms - and next terms. Each term in response
triggers section "scan-term-normal" if it's a normal term (i.e. not a
diagnostic term); or if it's a diagnostic term it triggers section
"scan-term-error" in which case the usual varibles "errorcode",
"errorstring", and "addinfo" are set. The list of scan terms returned
are surrouded by sections "scan-begin" and "scan-end".

Added support for different major actions using the "action" variable.
Default value is "search". New action types are defined when
implemented.

Added Type-1 query support (CCL). Variable "querytype" specifies query
type; possible values are "rpn" (default if not specified) or
"ccl". Only term1, term2, etc. are treated as part of query when
querytype is "ccl".

Added support for navigation among search result pages.

Fixed bug regarding %%include.

Renamed variables holding terms in query to term1, term2, ...  termN.

Checked that ZAP works with Apache 1.3.3.

--- 0.8 1998/08/19 Second internal release

Reworked code and added support for Apache 1.3.1.

Changed ZAP so that the script itself *is* the template, not the
setting template=.. The new, preferred way, to trigger ZAP is:
   http:myscript.zap/target=...
instead of
   http:/search/template=myscript&target=....

Added access to ISO2709 records using the Tcl command (getMarc).

--- 0.1 1998/03/19 First internal release

First version that works with Apache 1.2.5.
