tsmApi Change Log


Tue Jul 30 14:50:09 2002  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c: add Mike McCann's changes for writing the GeoVRML
 	EXTERNPROTO URLs. Also fixed a bug that caused make_geovrml to
 	fail if no -touch option was given.

Thu Jul 18 09:50:15 2002  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmWriteRows.c: missing variable parameter in error printf()

2002-03-26    <Martin Reddy@HEATHER>

	* tsmGeoVRML.c: convert all \% escape sequences to %% for all
	printf style strings. MSVC warns that this is not recognized.

2002-03-17    <Martin Reddy@HEATHER>

	* tsmWriteRows.c (tsmWriteRows_convertTileFormat): update the
	check for a word overflow when downsampling from 32-bit to 16-bit

	* tsmReadRowsRAW.c (tsmReadRowsRAW_new): check that the file is an
	integral multiple of the specified pixel size. If not, issue a
	warning message as this can corrupt the tile set.

2002-03-15    <Martin Reddy@HEATHER>

	* tsmWriteRows.c (tsmWriteRows_new): initialize a variable to hold
	the number of resampling overflows when converting from 32-bit ->
	16-bit etc.
	(tsmWriteRows_destroy): output a warning message if any resampling
	errors occured during this pyramid creation process.
	(tsmWriteRows_convertTileFormat): use PR_ntohl and friends to make
	sure that we resample data correctly on little endian machines
	such as Intels. Also record any occurences when we overflow during
	a downsample of data values such as 32-bit to 16-bit.

	* tsmWriteRowsPPM.c: removed - not used anywhere

	* tsmWriteRowsPPM.h: removed - not used anywhere

2002-03-13  Lee Iverson  <leei@ece.ubc.ca>

	* tsmExtProts.h (tsmRequestNotifyCB): New definition.  Type of
	  function to receive the tsmRequestNotifyReceive callback.
	* tsmHost_web.c (tsmReaderThread_host): Grab requestLists
	  before reading tile and use that for notification.
	* tsmRequest.c (struct tsmRequestList_): Use tsmRequestNotifyCB
	(tsmRequestNotifyReceive): Use tsmRequestNotifyCB
	(tsmRequestReceive): Deliver tile whether found in list or not.
	  Still remove it if found though.
	* tsmRequest.h (tsmRequestReceive): Add new received argument.
	* tsmRequestSrv.c (tsmReqReceivers): New.  Returns a copy of the
	  current request list for a request.
	(tsmReqServerQueueTile): Use reqLists argument to process tile.
	  Notify all request lists, not just those that still include it.
	* tsmRequestSrv.h (tsmReqReceivers): New decl.
	(tsmReqServerQueueTile): Add reqLists argument.
	* tsmTile_local.c (tsmReaderThread_local): Grab requestLists
	  before reading tile and use that.  Thus, it is the requestList
	  at the time we start to read that is used to communicate updates.

2002-03-11  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmReadRowsDEM.c: applied fix for DEM file reader, merged from
	fix made to DEM2GeoEG utility

2002-02-15  Lee Iverson  <leei@ece.ubc.ca>

	* Makefile.in: Regen with automake 1.5
	* aclocal.m4: Ditto
	* config.h.in: Ditto
	* config.guess, config.sub: Delete.

	* configure.in: Find and use libpng library
	* configure: Regen with autoconf 2.52
	
	* tsmHost_web.c (tsmAddRequest_host): Add heap push tracing.
	(tsmReaderThread_host): Only enable ghttp_debug for debug level 3.
	  Add heap push/pop tracing.

2002-01-27  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c: added recent updates from Mike McCann

2001-12-20    <Martin Reddy@HEATHER>

	* tsmUtils.c (tsmStringCat): Concatenates a string onto the end of
	a (possibly) existing string, growing the size of the original
	string and returning its (potentially) new address as the
	result

Mon Dec 17 11:05:44 2001    <reddy@MAGNOLIA>

	* tsmImage.c (tsm_png_read): [new func] provides support for
 	reading PNG files in the tsmReadImage() function. This provides
 	support for PNG textures in VRML models within TerraVision.

Thu Dec 13 17:29:07 2001    <reddy@MAGNOLIA>

	* tsmUrlToFile.c (tsmDoesUrlExist): updated to correctly deal with
 	local host URLs too.

Thu Dec 13 11:03:18 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmDoesUrlExist): create a convenience function
	to tsmUrlExists without the http conn param.

Tue Nov 20 10:52:05 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c: include Mike McCann's edits to add gzipped support
	for .wrl files (.wrz).

Mon Nov 12 11:50:15 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecParse.c (tspParseTspecLine): parse out the sky,
 	two-sided, view-from-below, and origin-altitude entries from the
 	tspec file.

Fri Nov  9 11:49:38 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c: updated sources from Mike McCann to include the
	specification of a max range for GeoTouchSensor LODs and some
	minor bug fixes

Tue Oct 30 10:29:02 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.h: Merge in updates from Mike McCann to add GeoOrigin
 	support to the GeoElevationGrids creation interface

	* tsmGeoVRML.c: Merge in updates from Mike McCann of MBARI to
 	support GeoOrigin, a lat/long HUD display, and GeoTouchSensor
 	expansion of tiles.

Wed Sep 19 14:30:41 2001    <reddy@MAGNOLIA>

	* tsmUtils.c (tsmSystem): new function - executes a command. Uses
 	system() under Unix and CreateProcess() under Windows.
	(tsmShowUrl): if running under Windows, first try to run the
 	default web browser by doing a $COMSPEC /c start <url>

2001-08-16  Lee Iverson  <leei@AI.SRI.COM>

	* TsTileSpecDecs.x (struct CoordTspec): Add originAltitude.
	(struct Pyramid): Add sky, twoSided, fromBelow.
	* TsTileSpecDecs.h: Regen
	* TsTileSpecDecs_xdr.c. Regen.
	* TsTileSpecGen.c (tspCreatePyramid): Initialize new pyramid
	  fields from params.
	* TsTileSpecIn.c (tspReadPyramidTspec1): Read new fields from
	  tspec. 
	(tspReadCoordTspec1): Read originAltitude value.
	* TsTileSpecOut.c (tspSaveCoordTspec_fp): Write out
	  originAltitude.
	(tspSavePyramidTspec_fp): Write out new fields.
	* tsmCreate.h (struct TsmTspecParams): Add fields for altitude,
	  sky, two_sided, and view_from_below.

	* tsmVRML.c (tsmWriteGeotile): Clean up unused variables.
	
2001-07-25  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmHost_web.c (tsmReaderThread_host): Actually retry requests up
	  to three times.
	* tsmRequestSrv.c (tsmReqServerQueueTile): Consider a tile
	  received if *any* of the request lists successfully receive it.
	  Free tileHeader if tile was received.
	
Thu Jul 19 15:58:54 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmArg.c (tsmParseInitArgs): initialise the tracing settings
	when a command line program uses -debug

	* tsmTile_wms.c (tsmWMSReadNextTile): improved error messages from
	a WMS tile failure. Now differentiates between a corrupt tile and
	an unknown file format.

	* tsmWMS.c (tsmWMSGetCapabilities): set the format ID
	appropriately and favour using JPEG as the tile request format
	instead of LRBT when talking to a Web Map Server.

	* tsmWMS.h (TSM_WMS_FORMAT_JPEG): create a simple #define list for
	the WMS format to be used for tile requests. This lets us easily
	ascertain the format without doing a strcmp.

2001-07-19  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile.c (struct ReceiveClosure): Use unsigned bitfield for
	  status.

2001-07-12  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmRequest.c (tsmRequestSubmit): Clean up trace code.
	(tsmRequestClaim): Empty readyList when making available.
	(tsmRequestReceive): Expand trace verbosity.
	* tsmRequestSrv.c (tsmReqElemReprioritize): Increase level of
	  tracing.
	(tsmReqServerRescind): Improve tracing, including flagging all
	  branches of conditional.
	(tsmReqServerSubmit): Improve tracing.
	(tsmReqServerClaimList): Ditto.
	
Fri Jun 29 16:06:17 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmWMS.c (tsmWMSGetCapabilities): clean up the http connection
	when done getting the Capabilities XML

2001-07-10  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmRequestSrv.c (tsmReqElemSetStatus): Bump up trace level to 2
	(tsmReqElemAllocate): Fix typo - doh!
	(tsmReqElemReprioritize): Bump up trace level of reconstruction to 3
	  Fix trace argument in reconstruction
	(tsmReqServerSubmit): Show conn.generic in trace message.
	* tsmTile_local.c (tsmAddRequest_local): Show conn.generic in
	  trace message.

2001-07-09  Lee Iverson  <leei@canoe.ai.sri.com>

	* tsmRequestSrv.c (tsmReqServerSubmit): Indent for tracing.
	(tsmReqServerAssignRequests): Tag and indent for tracing.
	* tsmTile_local.c (tsmAddRequest_local): Indent for tracing.

2001-07-09  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnectionInt.h (typedef ActualConnection): Remove.
	(struct ActualConnection_): Remove.
	* tsmHost_web.c (tsmRemoveRequest_host): Reset conn.generic
	* tsmRequestSrv.c (tsmReqElemCreate): Initialize conn.generic.
	(tsmReqElemReprioritize): Add better tracing.
	(tsmReqServerRescind): Use conn.generic
	(tsmReqServerSubmit): Show existing priority.
	* tsmRequestSrv.h (struct tsmReqElem_): Delete conn.actual.
	* tsmTile_local.c: Include <assert.h>
	(tsmAddRequest_local): Consolidate with tsmAddRequestActual_local
	(tsmRemoveRequest_local): Consolidate with
	  tsmRemoveRequestActual_local
	(tsmReprioRequest_local): Consolidate with
	  tsmReprioRequestActual_local

	* tsmConnect_dpss.h (struct TsmConnectionDpss): Replace aconn with
	  TsmConnectionCommon struct.
	* tsmConnection_dpss.c (tsmDisconnect_dpss): Pass TsmConnection
	(tsmBeginLogging_dpss): Ditto.
	(tsmEndLogging_dpss): Ditto.
	
	* tsmTile_dpss.c (tsmStartRequestThread_dpss): Cope with removed
	  ActualConnection.
	* tsmTspec_dpss.c (tsmReadTspec_dpss): Cope with removed
	  ActualConnection.
	(tsmWriteTspec_dpss): Ditto.

2001-07-09  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsm.h: Don't include (and thus expose) tsmWMS.h
	* tsmConnectionParamsInt.h: Don't include tsmWMS.h since this has
	  too large a dependency footprint.
	* tsmConnect_wms.h: Include tsmWMS.h here.
	* tsmDatabase_wms.c: ... and here
	* tsmHost_web.c: ... and here
	* tsmTspec_wms.c: ... and here
	* tsmWMS.c: ... and here
	* tsmInternal.h (typedef tsmWMS): Forward decl for opaque refs.
	* tsmWMS.h (struct tsmWMS_): Adapt to forward ref.
	
2001-07-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile.c (tsmAllocReadTile): More careful version of Martin's
	  patch of Mon Jun 25.  We still need to ensure that we got the
	  correct notification and that we weren't interrupted.

Fri Jun 29 16:06:17 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_wms.c (tsmWMSReadNextTile): support reading JPEG tiles
	in addition to raw format tiles

	* tsmWMS.c (tsmWMSGetCapabilities): clean up the XML parse tree
 	when done
	(tsmWMSGetCapabilities): look for a global SRS and global
 	ScaleHint tag and use this if a Layer does not define either. Then
 	try using the ScaleHint tag when the layer resolution is not
 	defined.
	(tsmWMSAddLayer): remove new line characters from all layer
 	strings (esp. description) as these case our database parser
 	problems.

	* tsmTspec_wms.c (tsmDoesTspecExist_wms): support both LAYERS= and
	LAYER= for finding a dataset name in a WMS URL
	(tsmReadTspec_wms): ditto

	* tsmTile_wms.c (tsmWMSReadNextTile): extract layer name from a
 	URL using LAYERS= parameter, and then try LAYER=

	* tsmWMS.c (tsmWMSDatasetUrl): parameter is LAYERS, not LAYER

Thu Jun 28 17:21:09 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* logging.c (NetLoggerWriteString): do a cast of a PRTime to long
	to avoid gcc-dependent symbol under Solaris

Tue Jun 26 17:14:16 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile.c (tsmAllocReadTile): add tile coordinate to error
	messages for more easy debugging

Mon Jun 25 14:17:54 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmHost_web.c (tsmReaderThread_host): break out of inifinite
	loop if a tile request returns TSM_NODATA

	* tsmTile.c (tsmAllocReadTile): break out of PR_WaitCondVar loop
	if the function returns PR_SUCCESS. Previously the value of
	rcv.buf was used, which meant that the loop would hang if a NULL
	tile buffer was returned (in the case of TSM_NODATA for instance)

	* tsmTile_local.c (tsmReaderThread_local): break out of infinite
 	loop if a tile is requested but the data does not exist (i.e. when
 	a TSM_NODATA is returned).

	* tsmTspec_wms.c (tsmReadTspec_wms): deal with fp rounding errors
	when trying to compute a tileset's pixel width and height based
	upon the geographic bbox and resolution returned by a WMS.

	* tsmWMS.c (tsmWMSGetException): fix bug in locating the error
 	description tag in a WMS Service Exception XML.

Thu Jun 21 14:06:01 2001    <reddy@MAGNOLIA>

	* tsmConnection_web.c (tsmConnect_web): only initialise the http
 	specific connection stuff if the common initialization succeeded.

	* tsmConnection_dpss.c (tsmConnect_dpss): ditto

	* tsmConnection_local.c (tsmConnect_local): ditto

	* tsmConnection_wms.c (tsmConnect_wms): ditto

2001-06-20  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnectCommon): Disconnect on failure.
	(tsmDisconnectCommon): Don't free connect here.
	* tsmConnection_local.c (tsmConnect_local): Immediately return if
	  tsmConnectCommon fails.
	(tsmDisconnect_local): Free connection memory here.
	* tsmConnection_web.c (tsmConnect_web): Immediately return if
	  tsmConnectCommon fails.
	(tsmDisconnect_web): Free connection memory here.
	* tsmConnection_wms.c (tsmConnect_wms): Immediately return if
	  tsmConnectCommon fails.
	(tsmDisconnect_wms): Free connection memory here.

Wed Jun 20 15:42:17 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_wms.c: Add #include "tsmRequest.h"

	* tsmTspec_wms.c: Add #include "tsmConnectionParamsInt.h"

	* tsmConnection_wms.c: Add #include "tsmConnectionParamsInt.h"

Mon Jun 18 14:50:19 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase_local.c (tsmParseDatabaseLine): add parsing for the
	new tilesize and overlap fields of the database

	* tsmDatabase.c (tsmPrintDataSet): output the new tilesize and
	overlap field values
	(tsmUpdateDatabaseFromServerCB): read the tilesize and overlap
	values from the dataset's tspec file and fill in the fields in the
	TsmDataSet structure

	* tsmDatabase.h: added tilesize and overlap fields to TsmDataSet

	* tsmDatabase.c (tsmReadServer): add support for WMS protocol when
 	reading a terrain database
	(tsmPrintDatabase): update the URL and formatting for the Dataset
 	Database

2001-06-17  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTspec.c (tsmReadTspec): call the tsmReadTspec_wms routine to
	create a tspec on the fly for a Web Mapping Server dataset

	* tsmPurl.c: if a URI has a question mark in it, then the protocol
	is determined to be a Web Mapping Server

	* tsmConnection.c (tsmConnect): do WMS-specific initialization if
	the Purl is for a WMS URL

	* tsmPurlDefns.x: added tsmWMS to the purl TsmProtocol enum

Fri Jun 15 10:09:38 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c (tsmSetParam): add TSM_PARAM_WMS support

	* tsmConnectionParams.h (TSM_PARAM_WMS): add TSM_PARAM_WMS
	connection parameter to specify a tsmWMS structure

	* tsmConnection.h: add TSM_WMS to TsmConnectionType

2001-06-19  Lee Iverson  <leei@canoe.ai.sri.com>

	* tsmUrlToFile.c (tsmOpenStream): Instead of checking for "r",
	  check for the absence of 'w' character.  This was breaking HTTP
	  FeatureTexLoad.

2001-06-19  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmHost_web.c: Include "tsmRequestSrv.h"
	(tsmAddRequest_host): Register status change with tsmReqElemAllocate
	(tsmReaderThread_host): Register status change with tsmReqElemReading
	  and tsmReqElemAllocate
	(
	* tsmInternal.h: Don't include "tsmConnectionInt.h" or
	  "tsmConnectionParamsInt.h"
	(struct tsmRequestServer): Move typedef to here.
	(struct tsmReqElem): Move typedef to here.
	* tsmRequestSrv.c: Include "tsmConnectionInt.h"
	(tsmReqElemSetStatus): New. Register and report a status change
	  for tsmTileReqElem.
	(tsmReqElemAllocate): New. Register a chnage to reqAllocated.
	(tsmReqElemReading): New. Register a change to reqReading.
	(tsmReqElemUpdate): Change status with tsmReqElemSetStatus
	(tsmReqElemCreate): Initialize idx.
	(tsmReqServerQueueTile): Change status with tsmReqElemSetStatus
	(tsmReqServerDequeueTile): Ditto.
	* tsmRequestSrv.h (struct tsmRequestServer): Move typedef to
	  tsmInternal.h
	(enum tsmReqStatus): Add reqReading and reqDelivered status.
	(struct tsmReqElem): Move typedef to tsmInternal.h
	(tsmReqElemAllocate): New decl.
	(tsmReqElemReading): New decl.

	* TsTileSpecUtils.c: Include "tsmConnectionInt.h"
	* tsmArg.c: Include "tsmConnectionInt.h"
	* tsmChecksum.c: Include "tsmConnectionInt.h"
	* tsmConnect_dpss.h: Include "tsmConnectionInt.h"
	* tsmConnect_local.h: Include "tsmConnectionInt.h"
	* tsmConnect_web.h: Include "tsmConnectionInt.h"
	* tsmConnection.c: Include "tsmConnectionInt.h"
	  Include "tsmConnectionParamsInt.h"
	  Include "tsmRequestSrv.h"
	* tsmConnectionInt.h: Don't include "tsmRequestSrv.h"
	* tsmConnectionParams.c: Include "tsmConnectionParamsInt.h"
	* tsmConnection_local.c: Include "tsmConnectionParamsInt.h"
	  Include "tsmRequestSrv.h"
	* tsmConnection_web.c: Move ghttp.h include inside HAVE_HTTP
	  Include "tsmConnectionParamsInt.h"
	  Include "tsmRequestSrv.h"
	* tsmCreate.c: Include "tsmConnectionInt.h"
	  Include "tsmConnectionParamsInt.h"
	* tsmEmulate.c: Include "tsmConnectionInt.h"
	* tsmGeoVRML.c: Include "tsmConnectionParamsInt.h"
	* tsmImage.c: Include "tsmConnectionInt.h"
	* tsmLocalDbase.c: Include "tsmConnectionInt.h"
	* tsmTile.c: Include "tsmConnectionInt.h"
	* tsmTile_local.c: Include "tsmRequestSrv.h"
	* tsmTile_web.c: Include "tsmRequestSrv.h"
	* tsmTspec.c: Include "tsmConnectionInt.h"
	  Include tsmConnectionParamsInt.h"
	* tsmTspec_local.c: Include "tsmConnectionParamsInt.h"
	* tsmTspec_web.c: Include "tsmConnectionParamsInt.h"
	* tsmUtils.c: Include "tsmConnectionInt.h"
	* tsmVRML.c: Include "tsmConnectionInt.h"
	  Include "tsmConnectionParamsInt.h"
	* tsmVRMLUtils.c: Include "tsmConnectionParamsInt.h"

Tue Jun 12 15:04:52 2001    <reddy@MAGNOLIA>

	* tsmTile.c (tsmTileReqAdd): return FALSE if the requested level
 	is not valid, or if the tile (x,y) does not exist in the level.

2001-06-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmHost_web.c (tsmReaderThread_host): Improve trace messages.
	* tsmTile_local.c (tsmReaderThread_local): Improve trace messages.

2001-06-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmHost_web.c (tsmReaderThread_host): Enable ghttp_dbeug when
	  trace level>= 2.

Thu Jun  7 14:26:48 2001  Lee Iverson  <leei@AI.SRI.COM>

	* tsmHost_web.c (tsmAddRequest_host): Add tracing.
	(tsmRemoveRequest_host): Add tracing.
	(trace_req): New.  Callback for heap_forall.  Prints requests.
	(tsmReaderThread_host): Add tracing of heap contents when not empty.

2001-06-07  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmHost_web.c (tsmReaderThread_host): Exit properly on interrupt.

Wed Jun  6 22:57:05 2001  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmUrlToFile.c (tsmReadHttpFile): Properly initialize and check
	  status of redirect_url.

Thu May 31 11:05:42 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmJPEG.c: implement the skip_input_data callback for the jpeg
 	decompressor. Didn't seem to need this for TV JPEG TIFFs, but it
	was needed to decompress TerraServer JPEG files.

	* tsmUrlToFile.c (tsmReadHttpFile): check for and correctly handle
	http redirect results when grabbing an http file (301 and 302).

	* tsmJPEG.c (tsmJPEGCompress): add a tsmJPEGCompress function that
	allows any buffer size to be compressed. The tsmJPEGCompressTile
	function only handled buffers of one tile size.

Sat May 12 16:06:16 2001    <reddy@MAGNOLIA>

	* tsmArg.c (tsmParseVRMLArgs): support a -onesided option for the
 	creation of GeoVRML geometry.

	* tsmConnectionParams.h (TSM_PARAM_SOLID): added a new connection
 	parameter: TSM_PARAM_SOLID to determine whether GeoVRML geometry
 	is created one- or two-sided.

	* tsmGeoVRML.c (TsmGeoVRML_uv2gcc): fix transposed lat/long pair
	(TsmGeoVRML_gcc2uv): fix transposed lat/long pair

Fri May 11 16:39:19 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmReadRowsTIFF.c (tsmParseCreateParams_TIFF): support UTM
	GeoTIFF images as output by ERDAS Imagine.

Fri Apr 20 14:09:37 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection_local.c (tsmConnect_local): only create the TIFF
	read level locks if we have a read connection, otherwise we
	reference a NULL tspec.
	(tsmDisconnect_local): only free the read level locks if they were
	actually allocated (not done for a write connection).

	* logging.c (NetLoggerWriteString): fix the generation of
	NetLogger timestamps using the NSPR time functions

Thu Apr 12 10:43:57 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_local.c (readNextTile): move the logging of TV_TILE_READ
	events down into the actual read function for localdisk.

	* tsmHost_web.c (readNextTile): move the logging of TV_TILE_READ
	events down into the actual read function for http.

Tue Apr 10 13:32:28 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmLog): lock down the function and fix a bug
 	which could cause competing threads to write over each others log
 	events.

Mon Apr  9 13:09:23 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_web.c (tsmAddRequest_web): create a NetLogger
	TV_TILE_REQ event.

	* tsmTile_local.c (tsmAddRequestActual_local): create a NetLogger
 	TV_TILE_REQ event.

2001-03-14  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmRequestSrv.c (tsmReqServerThread): Initialize status to
	  PR_SUCCESS in case tsmReqServerNextReady() returns successfully.

2001-03-07  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmHost_web.c: Add (oops)!

	* Makefile.in: Regen with automake-1.4d
	* aclocal.m4: Ditto.
	* missing: Upgrade to automake-1.4d
	* config.h.in: Regen
	* configure: Regen

2001-03-07  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnect_web.h: Delete !HOST_CONNECT branch.  Now always used.
	(struct TsmConnectionHttp): Delete.
	(struct TsmConnectionHTTP): Delete !HOST_CONNECT branch
	* tsmConnection_web.c: Delete !HOST_CONNECT branch.  Now always used.
	* tsmTile_web.c: Delete !HOST_CONNECT branch.  Now always used.

2001-03-02  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnect_web.h (TsmConnectionHTTP): New.  HTTP-specific
	  subclass of TsmConnectionCommon.  Conditionalize on HOST_CONNECT
	(struct TsmConnectionHttp): Make tsm_conn field a
	  TsmConnectionHTTP
	(tsmOpenHttpConnection, etc.): Move decls to tsmIntProts.h
	(tsmOpenHostConnection_web): New decl.
	(tsmCloseHostConnection_web): New decl.
	(tsmAddRequest_host): New decl.
	(tsmRemoveRequest_host): New decl.
	(tsmReprioRequest_host): New decl.
	(tsmCheckTileFormat_host): New decl.
	(tsmCheckTIFFFormat_host): New decl.
	* tsmConnection.c (tsmDisconnectCommon): Don't destroy
	  non-existent lock.
	* tsmConnectionInt.h (struct TsmConnectionCommon): Remove
	  type-specific fields: lock, numReaders, nextReader, readers,
	  writer and aux.
	* tsmConnection_web.c (tsmConnect_web): Adapt for use of
	  TsmConnectionHTTP and TsmConnectionHttp* instead of
	  ActualConnection.
	  Initialize properly when HOST_CONNECT defined.
	(tsmActualConnect_web, tsmDisconnectActual_web): Adapt for use of
	  TsmConnectionHTTP and TsmConnectionHttp* instead of
	  ActualConnection.
	(tsmDisconnect_web): Disconnect properly when HOST_CONNECT defined.
	* tsmTile_web.c: Conditionalize implementation on definition of
	  HOST_CONNECT.
	#if !defined(HOST_CONNECT)
	(tsmAddRequestActual_web, tsmRemoveRequestActual_web,
	 tsmReprioRequestActual_web, readNextTile,
	 tsmCheckTileFormatActual_web, tsmCheckTIFFFormatActual_web): Use
	  TsmConnectionHttp* instead of ActualConnection.
	(tsmAddRequest_web): Pass proper value to tsmAddRequestActual_web
	(tsmRemoveRequest_web): Pass proper value to
	  tsmRemoveRequestActual_web
	(tsmReprioRequest_web): Pass proper value to
	  tsmReprioRequestActual_web
	(tsmReaderThread_web): Pass correct value to readNextTile.
	(tsmCheckTileFormat_web): Pass proper value to
	  tsmCheckTileFormatActual_web
	(tsmCheckTIFFFormat_web): Pass proper value to
	  tsmCheckTIFFFormatActual_web
	#endif
	#if defined(HOST_CONNECT)
	(tsmAddRequest_web): Call tsmAddRequest_host
	(tsmRemoveRequest_web): Call tsmRemoveRequest_host
	(tsmReprioRequest_web): Call tsmReprioRequest_host
	#endif

	* tsmConnect_local.h (struct TsmConnectionLocal): Make conn point
	  to a TsmConnectionLOCAL
	(struct TsmConnectionLOCAL): New. Local file-specific subclass of
	  TsmConnection.
	* tsmConnection_local.c (tsmConnect_local, tsmActualConnect_local,
	 tsmDisconnectActual_local, tsmDisconnect_local): Adapt for use
	  of TsmConnectionLOCAL and TsmConnectionLocal* instead of
	  ActualConnection.
	* tsmTile_local.c (tsmAddRequestActual_local,
	 tsmRemoveRequestActual_local, tsmReprioRequestActual_local,
	 readNextTile, tsmCheckTileFormatActual_local,
	 tsmCheckTIFFFormatActual_local, tsmWriteTileActual_local): Use
	 TsmConnectionLocal* instead of ActualConnection.
	(tsmAddRequest_local): Update call to tsmAddRequestActual_local.
	(tsmRemoveRequest_local): Update call to
	  tsmRemoveRequestActual_local.
	(tsmReprioRequest_local): Update call to
	  tsmReprioRequestActual_local.
	(tsmReaderThread_local): Update call to readNextTile.
	(struct TIFFHandle): Make connect field a TsmConnectionLOCAL.
	(tiffCacheHandle): Use TsmConnectionLOCAL instead of
	  tsmConnection.
	(tiffCacheClose): Update for change to TIFFHandle
	(tsmReadTIFF_local): Update for change to TsmConnectionLOCAL
	(tsmWriteTile_local): Update for change to TsmConnectionLOCAL and
	  tsmWriteTileActual_local.
	(tsmWriteTILE_local, tsmWriteTIFF_local): Update for change to
	  TsmConnectionLOCAL.
	(tsmCheckTileFormat_local): Update call to
	  tsmCheckTileFormatActual_local.
	(tsmCheckTIFFFormat_local): Update call to
	  tsmCheckTIFFFormatActual_local.

	* tsmIntProts.h (tsmOpenHttpConnection): Decl moved here from
	  tsmConnect_web.h.
	(tsmCloseHttpConnection): Ditto.
	(tsmUrlToMemory): Ditto.
	(tsmUrlToFile): Ditto.
	(tsmUrlToTempFile): Ditto.
	(tsmUrlToBuffer): Ditto.
	(tsmUrlMimeType): Ditto.
	(tsmUrlExists): Ditto.
	* tsmPyramidInfo_web.c: Remove #include "tsmConnect_web.h"
	* tsmTspec_web.c: Remove #include "tsmConnect_web.h"
	* tsmUrlToFile.c: Remove #include "tsmConnect_web.h"
	(tsmReadHttpFile): Correct reuse and closure of http connection.
	  Make sure that it closes when connp is NULL.
	
2001-03-01  Lee Iverson  <leei@Canada.AI.SRI.COM>

	Remove entire ActualConnection-based virtual function
	infrastructure and replace with direct virtual functions on
	TsmConnection.

	* tsmConnect_local.h (tsmDisconnect_local): Update decl.
	(tsmAddRequest_local): Ditto.
	(tsmReprioRequest_local): Ditto.
	(tsmRemoveRequest_local): Ditto.
	(tsmCheckTileFormat_local): Ditto.
	(tsmCheckTIFFFormat_local): Ditto.
	(tsmReadNextTile_local): Delete decl.
	* tsmConnect_web.h (tsmDisconnect_web): Update decl.
	(tsmAddRequest_web): Ditto.
	(tsmReprioRequest_web): Ditto.
	(tsmRemoveRequest_web): Ditto.
	(tsmCheckTileFormat_web): Ditto.
	(tsmCheckTIFFFormat_web): Ditto.
	(tsmReadNextTile_web): Delete decl.
	* tsmConnection.c (tsmConnectionVTable): Delete.
	(tsmConnect): Modify to create TsmConnection structure by calling
	  type-specific factory methods.  Move most initialization into...
	(tsmConnectCommon): ...here.  Generic connection initialization.
	(makeActualConnection): Delete.
	(tsmvDisconnect): Delete.
	(tsmDisconnectCommon): New. Undo generic connection initialization
	  performed by tsmConnectionInit.
	(tsmvBeginLogging): Remove call to tsmBeginLogging_actual
	(tsmvEndLogging): Remove call to tsmEndLogging_actual
	(tsmDisconnect_actual): Delete.
	(tsmWriteTile_actual): Delete.
	(tsmCheckTileFormat_actual): Delete.
	(tsmCheckTIFFFormat_actual): Delete.
	(tsmBeginLogging_actual): Delete.
	(tsmEndLogging_actual): Delete.
	(tsmAddRequest_actual): Delete.
	(tsmRemoveRequest_actual): Delete.
	(tsmReprioritizeRequest_actual): Delete.
	(tsmvAddRequest): Delete.
	(tsmvRemoveRequest): Delete.
	(tsmvReprioritizeRequest): Delete.
	(tsmWriteTile, tsmCheckTileFormat, tsmCheckTIFFFormat): Move to
	  tsmTile.c 
	(tsmBeginLogging, tsmEndLogging): Protect against null function
	  pointer.
	* tsmConnectionInt.h (tsmConnect_web): Update decl as
	  HTTP-specific creation of TsmConnection.
	(tsmConnect_dpss): Update decl as DPSS-specific creation of
	  TsmConnection.
	(tsmConnect_local): Update decl as local file-specific creation of
	  TsmConnection.
	(tsmConnectCommon): New decl.
	(tsmDisconnectCommon): New decl.
	(struct ActualConnectionVTable): Delete.
	(struct ActualConnection): Remove vtable.
	* tsmConnection_dpss.c (vtable_dpss): Change to TsmConnectionVTable
	(tsmConnect_dpss): Modify to initialize the TsmConnection instead
	  of an ActualConnection.
	(tsmActualConnect_dpss): New.  Moved ActualConnection
	  initialization here from old version of tsmConnect_dpss
	(tsmDisconnectActual_dpss): Renamed from tsmDisconnect_dpss
	(tsmDisconnect_dpss): New. DPSS connection-specific disconnect.
	* tsmConnection_local.c (vtable_local): Change to
	  TsmConnectionVTable 
	(tsmConnect_local): Modify to initialize the TsmConnection instead
	  of an ActualConnection.
	(tsmActualConnect_local): New.  Moved ActualConnection
	  initialization here from old version of tsmConnect_local
	(tsmDisconnectActual_local): Renamed from tsmDisconnect_local
	(tsmDisconnect_local): New. local file connection-specific
	  disconnect. 
	* tsmConnection_web.c (vtable_web): Change to TsmConnectionVTable
	(tsmConnect_web): Modify to initialize the TsmConnection instead
	  of an ActualConnection.
	(tsmActualConnect_web): New.  Moved ActualConnection
	  initialization here from old version of tsmConnect_web
	(tsmDisconnectActual_web): Renamed from tsmDisconnect_web
	(tsmDisconnect_web): New. HTTP connection-specific disconnect.
	* tsmIntProts.h (tsmDisconnect_actual): Delete decl.
	(tsmCheckTileFormat_actual): Ditto.
	(tsmCheckTIFFFormat_actual): Ditto.
	(tsmBeginLogging_actual): Ditto.
	(tsmEndLogging_actual): Ditto.
	(tsmAddRequest_actual): Ditto.
	(tsmRemoveRequest_actual): Ditto.
	(tsmRemoveRequest_actual): Ditto.
	(tsmReprioritizeRequest_actual): Ditto.
	(tsmReadNextTile_actual): Ditto.
	(tsmWriteTile_actual): Ditto.
	* tsmTile.c (tsmvCheckTileFormat): Delete.
	(tsmCheckTileFormat): Call TsmConnectionVTable.checkTileFormat
	(tsmvCheckTIFFFormat): Delete.
	(tsmCheckTIFFFormat): Call TsmConnectionVTable.checkTIFFFormat
	(tsmvWriteTile): Delete.
	(tsmWriteTile): Call TsmConnectionVTable.writeTile
	* tsmTile_dpss.c (tsmWriteTileActual_dpss): Renamed from
	  tsmWriteTile_dpss.
	(tsmWriteTile_dpss): New. Direct target of
	  TsmConnectionVTable.writeTile for DPSS connections.
	* tsmTile_local.c (tsmAddRequestActual_local): Renamed from
	  tsmAddRequest_local.
	(tsmAddRequest_local): New. Direct target of
	  TsmConnectionVTable.addRequest for local file connections.
	(tsmRemoveRequestActual_local): Renamed from tsmRemoveRequest_local
	(tsmRemoveRequest_local): New. Direct target of
	  TsmConnectionVTable.removeRequest for local file connections.
	(tsmReprioRequestActual_local): Renamed from tsmReprioRequest_local
	(tsmReprioRequest_local): New. Direct target of
	  TsmConnectionVTable.reprioRequest for local file connections.
	(tsmWriteTileActual_local): Renamed from
	  tsmWriteTile_local.
	(tsmWriteTile_local): New. Direct target of
	  TsmConnectionVTable.writeTile for local file connections.
	(tsmCheckTileFormatActual_local): Renamed from
	  tsmCheckTileFormat_local
	(tsmCheckTileFormat_local): New. Direct target of
	  TsmConnectionVTable.checkTileFormat for local file connections.
	(tsmCheckTIFFFormatActual_local): Renamed from
	  tsmCheckTIFFFormat_local
	(tsmCheckTIFFFormat_local): New. Direct target of
	  TsmConnectionVTable.checkTIFFFormat for local file connections.
	* tsmTile_web.c (tsmAddRequestActual_web): Renamed from
	  tsmAddRequest_web.
	(tsmAddRequest_web): New. Direct target of
	  TsmConnectionVTable.addRequest for HTTP connections.
	(tsmRemoveRequestActual_web): Renamed from tsmRemoveRequest_web
	(tsmRemoveRequest_web): New. Direct target of
	  TsmConnectionVTable.removeRequest for HTTP connections.
	(tsmReprioRequestActual_web): Renamed from tsmReprioRequest_web
	(tsmReprioRequest_web): New. Direct target of
	  TsmConnectionVTable.reprioRequest for HTTP connections.
	(tsmCheckTileFormatActual_web): Renamed from
	  tsmCheckTileFormat_web
	(tsmCheckTileFormat_web): New. Direct target of
	  TsmConnectionVTable.checkTileFormat for HTTP connections.
	(tsmCheckTIFFFormatActual_web): Renamed from
	  tsmCheckTIFFFormat_web
	(tsmCheckTIFFFormat_web): New. Direct target of
	  TsmConnectionVTable.checkTIFFFormat for HTTP connections.
	* tsmUrlToFile.c: Update some comments to reflect recents changes.

2001-02-28  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (libtsmApi_a_SOURCES): Add tsmHost_web.c
	* Makefile.in: Regen.
	* tsmHost_web.c: New file.  Host-oriented web interface.  First
	  pass, not currently used.

	Deprecate _actual virtual functions in favour of direct virtual
	functions on TsmConnection.  Will increase flexibility and allow
	more variation on implementation behing the connection.
	
	* tsmConnect_web.h (tsmOpenHttpConnection): Update decl.
	(tsmCloseHttpConnection): Ditto.
	(tsmUrlToMemory): Ditto.
	(tsmUrlToFile): Ditto.
	(tsmUrlToTempFile): Ditto.
	(tsmUrlToBuffer): Ditto.
	(tsmUrlMimeType): Ditto.
	(tsmUrlExists): Ditto.
	* tsmConnection.c (tsmConnectionVTable): Define default virtual
	  function table.
	(tsmConnect): Assign default vtable to TsmConnection.
	  Initialize lock and nextReader index.
	(tsmvDisconnect): New. Default virtual function for
	  TsmConnectionVTable.disconnect
	(tsmvBeginLogging): New. Default virtual function for
	  TsmConnectionVTable.beginLogging
	(tsmvEndLogging): New. Default virtual function for
	  TsmConnectionVTable.endLogging
	(tsmvAddRequest): New. Default virtual function for
	  TsmConnectionVTable.addRequest
	(tsmvRemoveRequest): New. Default virtual function for
	  TsmConnectionVTable.removeRequest
	(tsmvReprioritizeRequest): New. Default virtual function for
	  TsmConnectionVTable.reprioritizeRequest
	(tsmDisconnect, tsmAddRequest, tsmRemoveRequest,
	 tsmReprioritizeRequest, tsmWriteTile, tsmCheckTileFormat,
	 tsmCheckTIFFFormat, tsmBeginLogging, tsmEndLogging): Convert to
	 virtual functions.
	* tsmConnectionInt.h (struct TsmConnectionVTable): New virtual
	  function table for TsmConnection.
	(struct TsmConnectionCommon): Add vtable field for
	  TsmConnectionVTable.  Add lock field and nextReader index.
	* tsmConnection_web.c (tsmConnect_web): Update call to
	  tsmUrlExists.
	(tsmDisconnect_web): Clear cached connection on close.
	* tsmPurl.c (tsmParseUrl): Return NULL for empty url.
	* tsmRequestSrv.c (struct tsmRequestServer): Remove assign field.
	(tsmReqElemCreate): Initialize connect to server connection.
	(tsmReqServerCreate): Don't initialize assign
	(tsmReqElemReprioritize): Call TsmConnection method
	  tsmReprioritizeRequest.
	(tsmReqServerRescind): Call TsmConnection method tsmRemoveRequest
	(tsmReqServerAssignRequests): Don't implement assignment algorithm
	  here.  Just use TsmConnection method tsmAddRequest
	* tsmRequestSrv.h (struct tsmReqElem): Add connect field for
	  reference to TsmConnection.  Add HostConnection reference to
	  union.
	* tsmTile.c (tsmCheckTileFormat, tsmCheckTIFFFormat,
	  tsmWriteTile): Moved to tsmConnection.c as virtual function
	  calls.
	(tsmvCheckTileFormat, tsmvCheckTIFFFormat, tsmvWriteTile): Default
	  assignments for virtual functions.
	* tsmTile_local.c (tsmAddRequest_local): Store conn.actual
	  association here.
	(tsmRemoveRequest_local): Detach conn.actual association
	* tsmTile_web.c (tsmAddRequest_web): Store conn.actual association
	  here.
	(tsmRemoveRequest_web): Detach conn.actual association
	(readNextTile): Update interface to tsmUrlToBuffer
	(tsmCheckTileFormat_web): Update interface to tsmUrlExists
	(tsmCheckTIFFFormat_web): Ditto.
	* tsmUrlToFile.c (tsmOpenHttpConnection): Change to use a
	  http_trans_conn* directly.
	(tsmCloseHTTPConnection): Ditto.
	(tsmReadHttpFile): Change to use a http_trans_conn** directly.
	  Connection caching is handled by storing values the location
	  referred to.
	(tsmUrlToMemory, tsmUrlToBuffer, tsmUrlToFile, tsmUrlToTempFile,
	 tsmUrlMimeType, tsmUrlExists): Ditto.
	
Wed Jan 31 11:17:51 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmRequestSrv.c (tsmReqServerAssignRequests): added Jason Fox's
	mod to lock down the function. This was causing a race condition
	under fast Windows machines.

Wed Jan 17 14:27:51 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmArg.c (tsmParseVRMLArgs): remove unused options

Mon Jan 15 16:45:49 2001    <reddy@MAGNOLIA>

	* tsmDatabase_local.c(tsmReadServer_local): created a new
 	implementation of this function that uses the MSVC functions
 	FindFirstFile/FindNextFile as the POSIX opendir/readdir functions
 	are not available under MSVC.

Sun Jan 14 17:56:34 2001    <reddy@MAGNOLIA>

	* tsmDatabase_local.c (tsmReadServer_local): #ifndef MSVC this
 	function as it uses opendir/readdir which are POSIX functions but
 	not supported by MSVC - need to recode in portable functions!

Tue Jan  9 15:55:47 2001  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c (TsmGeoVRML_createGeoElevationGrid): fix the
 	calculation of valid tile sizes for edge tiles.
	(TsmGeoVRML_writeAllTiles): improve the output of status
 	information as we go
	(TsmGeoVRML_writeHTMLFile): output an HTML comment saying that the
 	file was produced with tsmApi from SRI. Also, create the directory
 	for the index.html file if it does not exist.
	(TsmGeoVRML_progress): do an fflush in order to get the progress
 	display
	(TsmGeoVRML_writeAllTiles): create the index.html file at the
 	start of the tile generation process, not at the end.
	(TsmGeoVRML_normalize): only normalize if the length is != 0.0
	(TsmGeoVRML_calcNormal): compare oi (x,y) against oi pixel bounds,
	not the DEM one. Stops all those 0xnan normals being generated.

Sun Jan 07 13:00:21 2001    <reddy@MAGNOLIA>

	* tsmUtils.c (tsmMakePathAbsolute): [new func] prepends an
 	absolute path to a filename if it is relative.

Wed Dec 20 16:15:21 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c (tsmDescribeImportFormat): add the text "big endian"
	to the format description for raw and lrbt to show that we expect
	binary data in big-endian format (Unix type, not PC).

2000-12-15  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmDatabase.c (tsmRemoveMapFromDatabasePos): Provide doc header.
	(tsmRemoveModelFromDatabasePos): Ditto.
	* tsmReadRowsDEM.c (tsmReadRowsDEM_saveDEMAsRAW): Predeclare static.

	* tsmConnection_web.c (tsmDisconnect_web): Don't close HTTP
	  connection until after thread shutdown.

2000-12-13  Lee Iverson  <leei@canoe.ai.sri.com>

	* tsmReadRowsGIF.c (tsmParseCreateParams_GIF): Return FALSE.

	* tsmDatabase.c (tsmRemoveServerSetsFromDatabase): Remove maps
	  using tsmRemoveMapFromDatabasePos and don't skip checking next
	  one.  Ditto for models.
	(tsmRemoveMapFromDatabasePos): New.  Remove map at index.
	(tsmRemoveMapFromDatabase): Find then use
	  tsmRemoveMapFromDatabasePos.
	(tsmRemoveModelFromDatabasePos): New.  Remove model at index.
	(tsmRemoveModelFromDatabase): Find then use
	  tsmRemoveModelFromDatabasePos.

2000-12-11  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnect): Store purl into location to clean
	  up memory leak.

Thu Nov 30 17:59:55 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c: removed unused variables "geo_width" and
 	"geo_height"

	* tsmVRMLUtils.c (tsmGetTexCoords): removed unused variables
 	"maxpix_x" and "maxpix_y"
	(tsmCalcRange): commented out unused variables "geo_width" and
 	"geo_height"
	(tsmTileElev): removed unused variable "polyx" and "polyy"

	* tsmImageUtils.c (tsmTileToRgb): removed unused variables "i10",
 	"i01", and "numPixels"

	* tsmTile_local.c (tsmCheckTileFormat_local): remove unused
	variable "connect"
	(tsmCheckTIFFFormat_local): removed unused variable "connect"

	* tsmWriteRows.c (tsmWriteRows_new): reference the SimpleTileSet
 	starting from the minLevel, not zero. Do not assume that the start
 	level is 0.  Bug reported by Jerry Isdale.
	(tsmWriteRows_write): provide more verbose error output when an
 	invalid level number is found. Suggestion from Jerry Isdale.
  	Also, correctly offset the level number with the minLevel value,
 	as above.
	(tsmWriteRows_writeTiles): provide more verbose error output when
 	an invalid level number is found and correctly offset the level
 	number with the minLevel value, as above. Bug report from Jerry
 	Isdale.

Mon Nov 27 15:12:59 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmFootprintToLatLong): implement approximate
	conversion between an LVCS bounding box and a GDC bounding box
	(assumes 1 deg == 100 km).

2000-11-22  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnect_local.h (tsmReprioRequest_local): New decl.
	* tsmConnect_web.h (tsmReprioRequest_web): New decl.
	* tsmConnection.c (tsmReprioritizeRequest_actual): New.
	  Call reprioritizeRequest virtual function.
	* tsmConnectionInt.h (ActualConnectionVTable): Add
	  reprioritizeRequest virtual function.
	* tsmConnection_dpss.c (vtable_dpss): Add empty entry for
	  reprioritizeRequest
	* tsmConnection_local.c (vtable_local): Add entry for
	  tsmReprioRequest_local
	* tsmConnection_web.c (vtable_web): Add entry for
	  tsmReprioRequest_web
	* tsmIntProts.h (tsmAddRequest_actual): Add proto
	(tsmRemoveRequest_actual): Add proto.
	(tsmReprioritizeRequest_actual): Add proto.
	(tsmReadNextTile_web): Delete decl.
	(tsmWriteTile_local): Delete decl.
	* tsmRequestSrv.c (tsmReqElemReprioritize): New. Adjust the
	  priority of a request.
	(tsmReqServerRescind): Reprioritize a tile if we've removed the
	  highest priority request but not the tile itself.
	(tsmReqServerSubmit): Reprioritize when priority increases.
	* tsmTile_local.c (tsmReprioRequest_local): New. Reprioritize a
	  tile in this connection's queue.
	* tsmTile_web.c (tsmReprioRequest_web): New. Reprioritize a tile
	  in this connection's queue.
	(tsmReadNextTile_web): Delete.

Fri Nov 17 14:22:19 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c (tsmInitTspecParams): make the default level number
	for creating DEMs be 0 not 5.

2000-11-13  Michael A. Eriksen  <eriksen@ai.sri.com>

	* tsm.h: Added void tsmTileReqInfo( TsmConnection connect,
 	PRIntervalTime *begin, PRIntervalTime *end, int *num_now, int
 	*num_never, int *num_later );
 	
	* tsmReadRowsTIFF.h: moved #include "tsmReadRowsTIFF.h" to be the
 	first include in order to get config.h loaded

2000-11-01  Michael A. Eriksen  <eriksen@ai.sri.com>

	* Logging.c: Renamed __WIN32__ to WIN32 and _MSVC to MSVC
	* Removed winbuild/config.h

2000-11-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmExtProts.h (tsmRequestDestroy): Expose
	* tsmRequestSrv.c (tsmReqServerNextReady): Handle end >= n.

2000-11-07  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmRequest.h: Move exposed decls to...
	* tsmExtProts.h: ...here.

	* tsmConnection.c (tsmConnect): Don't initialize removed fields.
	(tsmConnectRequestList): New.  Create and return a new tile
	  request list.
	* tsmConnectionInt.h (struct TsmConnectionCommon): Remove obsolete
	  fields (req_begin, req_end, numb_now, numb_never, numb_later).
	* tsmTile.c (tsmTileReqAdd): Remove references to old
	  implementation.
	(tsmTileReqInfo): Turn into useless stub.  No longer works.

2000-11-06  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmDownSample_inmemory_levels): Disable >10000m
	  checking.
	* tsmWriteRows.c (tsmWriteRows_write): Ditto.

Fri Nov  3 16:02:47 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_local.c (tiffCacheHandle): when reading the max number
	of open file descriptors, a previous TIffHandle was popped off the
	stack to use for the new descriptor, however it was stored in a
	local variable with the same name as a more global variable. This
	outer variable was used after the inner scope was deleted and so
	the new TiffHandle pointer was lost, causing core dump time.

2000-11-03  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in: Use large file compilation environment under
	  Solaris.
	* configure: Regen
	
	* tsmConnection.c (tsmConnect): Check for read failure when
	  mode != TSM_WRITE_ONLY
	* tsmConnection_local.c (tsmConnect_local): Initialize read
	  infrastructure when mode != TSM_WRITE_ONLY
	
	* tsmCreate.c (tsmCreateAllTiles): Properly add TSM_DOWNSAMPLE_DEM
	  flag to tsmDownSample_inmemory calls.
	* tsmCreate_RAW.c (downsample_image_u32): Alternate
	  implementation with checking (disabled).
	(tsmDownSample_byblocks): Check for bad DEM values read in.
	* tsmTile.c (tsmWriteTile): Clean the tracing a bit.
	* tsmWriteRows.c (tsmWriteRows_write): Check for bad DEM values on
	  write.

Thu Nov 02 15:29:26 2000    <reddy@MAGNOLIA>

	* tsmConnection.c (tsmConnect): don't do all that tsmFreePurl()
 	stuff - it's freeing memory that is owned by the connection!

	* tsmConnection_local.c (tsmConnect_local): the new multi-pipe
 	reading architecture made a few assumptions that connection was
 	read only. As a result, write connections always failed.

	* tsmGeoVRML.c: new function - sets an MFColor field with a single
 	value
	(TsmGeoVRML_writeTileModel): create a Background node
	(TsmGeoVRML_writeHTMLFile): fix up the index.html file
	(TsmGeoVRML_writeTileImage): fix so that we can now handle 1-byte
 	(greyscale) images - previously assumed all images were RGB.

	* tsmUtils.c (tsmShowUrl): use "explorer" as the default web
 	browser to use for hyperlinks on a PC for the time being. (Can be
 	overridden.)

	* tsmConnectionParams.c (tsmInitParams): don't generate normals by
 	defaults - still some small bug to track down here

Wed Nov 01 17:14:19 2000    <reddy@MAGNOLIA>

	* tsmGeoVRML.c: guard against NULLs and also free the TsmGeoVRML
 	structure itself.

2000-10-26  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnect): Handle failures to creat actual
	  connections more gracefully.

	* tsmConnect_local.h (struct TsmConnectionLocalAux): New.
	  Common to all actuals. Hangs off of parent connection.
	* tsmConnection_local.c (tsmConnect_local): If a TIFF dataset,
	  create locks and TIFF handle space for each level.
	(tsmDisconnectCommon_local): New. Clean up locks and TIFF handle
	  space for each level. Close open TIFF handles using
	  tiffCacheClose.
	* tsmTile_local.c: Include <prinit.h>
	(struct TIFFHandle): New.  Cache for TIFF handles.
	(all_handles): New. List of currently open TIFF handles.
	(tiffInit, tiffInitFunc): New.  PRCallOnceType pair to initialize
	  all_handles.
	(tiffCacheHandle): New.  Cache a newly created TIFF handle,
	  trashing a previous one if we've overrun our limit.
	(tiffCacheClose): New.  Close and forget about a TIFF handle.
	(tsmReadTIFF_local): Lock accesses to a particular TIFF file.
	  Cache open handles using tiffCacheHandle.

2000-10-16  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnect): Attempt to read tspec prior to
	  making actual connections.
	* tsmConnectionInt.h (tsmConnect_web): Add idx argument.
	(tsmConnect_dpss): Ditto.
	(tsmConnect_local): Ditto.
	* tsmConnection_dpss.c (tsmConnect_dpss): Add idx argument.
	* tsmConnection_local.c (tsmConnect_local): Add idx argument.
	  Remove tspec initialization (now done in tsmConnect).
	  Make readable thread name.
	* tsmConnection_web.c (tsmConnect_web): Add idx argument.
	  Remove tspec initialization (now done in tsmConnect).
	  Make readable thread name.
	
	* tsmRequest.c (tsmRequestClaim): Increase trace level.
	* tsmRequestSrv.c (tsmReqServerClaimList): Increase trace level.
	
	* tsmTile_local.c (tsmReaderThread_local): Improve tracing of
	  error and shutdown conditions.
	* tsmTile_web.c (tsmReaderThread_web): Improve tracing of error
	  and shutdown conditions.
	
Thu Oct 12 13:11:13 2000    <reddy@MAGNOLIA>

	* tsmImage.c (tsmReadImage): use "rb" for tsmOpenStream, not "r"

	* tsmWriteRowsPPM.c: always use "wb" not "w"

	* tsmUrlToFile.c: always use "rb" not just "r" - Windows will not
 	read a binary file correctly if you just specify "r"

	* tsmReadRowsRAW.c (tsmReadRowsRAW_new): always use "rb" not "r"

	* tsmReadRowsJPEG.c: always use "rb", not just "r" with fopen

	* tsmReadRowsDOQ.c: always use "rb", not just "r"

	* tsmReadRowsDEM.c: always use "rb" and "wb" with fopen!

	* tsmImage.c (tsmSaveImageJFIF): always use "rb" with fopen, not
 	"r"!

	* tsmReadRowsPBM.c: always use "rb" with fopen when then file is
 	binary as Windows gets picky about this.

Mon Oct  9 14:28:38 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_local.c (tsmReaderThread_local): make robust in face of
	req being returned NULL.

	* tsmConnection_local.c (tsmConnect_local): make sure that we
	create a connect->name string, even if we don't have a tspec file
	to get the name from.

	* tsmRequestSrv.c (tsmReqServerThread): guard against NULL tspec
	pointer - this can happen when connection is write-only, i.e. the
	tspec hasn't been created yet.

2000-10-02  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile.c (tsmReadTile): Call tsmAllocReadTile() instead of vice
	  versa.
	(tsmAllocReadTile): The basic implementation that does no data
	  copying (maybe a speed boost).

2000-09-29  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmRequest.h (struct tsmSimpleRequestList): Don't limit to 32768
	  items in request list.

2000-09-29  Lee Iverson  <leei@Mission.AI.SRI.COM>

	* tsmGeoVRML.c (TsmGeoVRML_new): Remove strange cruft.
	* tsmTile_local.c (tsmCheckTileFormat_local): Use PR_GetFileInfo64
	  so that we don't crap out on large TIFF files.
	(tsmCheckTIFFFormat_local): Ditto.

2000-09-29  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile_local.c (tsmCheckTileFormat_local): Improve tracing.

2000-09-28  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmDownSample_inmemory_levels): Remove warining
	  on h1_span.

	* tsmTile.c (receiveTile, tsmReadTile): Improve tracing.
	
	* tsmTile_local.c (tsmReaderThread_local): Change direction of
	  heap_is_empty test.  Ooops.  Copy rest of error handling
	  etc. from tsmReaderThread_web.
	* tsmTile_web.c (tsmReaderThread_web): Use heap_is_empty test.

2000-09-27  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmRequestSrv.c (struct tsmRequestServer_): Add destroying flag
	  so we can avoid recursive locks.
	(tsmReqServerCreate): Initialize destroying to FALSE.
	(tsmReqServerDestroy): Set destroying TRUE once we are locked.
	(tsmReqServerForgetList): Only lock if !destroying.
	(tsmReqServerRescind): Ditto.

	* tsmTile.c (receiveTile): Status is TRUE if tileBuffer is non-zero.

	* tsmRequestSrv.c (tsmReqElemCreate): Zero errCount.
	(tsmReqServerDequeueTile): Return failure if NULL buffer queued.
	* tsmRequestSrv.h (struct tsmReqElem_): Add errCount field.
	* tsmTile_web.c (tsmReaderThread_web): Rerequeue tiles after
	  errors, counting number of failures.  If a tile request fails
	  three times, then complete the request by queueing a NULL
	  tileBuffer.
	(readNextTile): Improve failure tracing.
	* tsmUrlToFile.c (tsmReadHttpFile): Reset the connection after an
	  error response from ghttp.

Tue Sep 26 10:43:09 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmReadRowsTIFF.c (tsmParseCreateParams_TIFF): swap lat/long
	info from GeoTIFF file - got it the wrong way round.

Tue Sep 26 13:52:24 2000    <leei@MAGNOLIA>

	* configure.in: libxml inclusion references ../libxml
	* configure: Regen.

	* tsmRequestSrv.c (tsmReqServerForgetElem): If not found in
	  eqhash_delete, don't destroy. 

Tue Sep 26 10:43:09 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* logging.c (sys_err_str): removed references to sys_nerr and
 	sys_errlist as these do not appear to be defined under Solaris
 	2.7.

2000-09-25  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmArg.c (tsmParseReadArgs): Add -read_multi arg for setting the
	  TSM_PARAM_READ_MULTI value.
	* tsmConnection.c (tsmConnect): Default read_multi to 4, and read
	  from params if set.
	* tsmConnectionParams.c (tsmSetParam): Parse TSM_PARAM_READ_MULTI
	  and TSM_PARAM_WRITE_MULTI.
	* tsmConnectionParams.h (TSM_PARAM_READ_MULTI): Define.
	(TSM_PARAM_WRITE_MULTI): Define.
	* tsmConnectionParamsInt.h (struct TsmConnectionParamsStruct): Add
	  read_multi and write_multi value slots.

2000-09-20  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmDatabase.c (tsmPersistDatabase): Update for libxml 2.x

2000-09-14  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (EXTRA_HEADERS): Add tsmConnect_web.h,
	  tsmConnect_local.h and tsmConnect_dpss.h
	* Makefile.in: Regen

	* tsmConnection.c (tsmConnect): Start request server and create
	  initial (compatibility) request list.
	(tsmDisconnect): Clean up request server and request lists.
	(tsmAddRequest_actual): New. Generic function to add a request to
	  the actual connection.
	(tsmRemoveRequest_actual): New. Generic function to remove a
	  request from the actual connection.
	
2000-09-14  Lee Iverson  <leei@Canada.AI.SRI.COM>

	*: First step in implementing multiple connections per server.

	* Makefile.am (EXTRA_HEADERS): Add tsmRequestSrv.h
	* Makefile.in: Regen

	* tsmConnectionInt.h (ActualConnection): New typedef.
	(TsmConnectionCommon): Move ConnectionCommonFields into here.
	(tsmActualConnect_dpss): Declare.
	(tsmActualConnect_http): Declare.
	(tsmActualConnect_local): Declare.
	(ActualConnectionVTable): New typedef.
	(struct ActualConnection_): Declare base class.
	(struct TsmConnectionDpss): First field is now 
	  struct ActualConnection_.  Move jpegBuffer here.
	(struct TsmConnectionLocal): Ditto.
	(struct TsmConnectionHttp): Ditto.
	* tsmConnection.c (tsmConnect): Allocate allocate one
	  ActualConnection and establish it.
	  Don't allocate jpegBuffer
	(tsmDisconnect): Call tsmDisconnect_actual.
	  Don't free jpegBuffer.
	(tsmBeginLogging): Defer to tsmBeginLogging_actual
	(tsmEndLogging): Defer to tsmEndLogging_actual
	(tsmDisconnect_actual): New.
	(tsmReadNextTile_actual): New.
	(tsmWriteTile_actual): New.
	(tsmCheckTileFormat_actual): New.
	(tsmCheckTIFFFormat_actual): New.
	(tsmBeginLogging_actual): New.
	(tsmEndLogging_actual): New.
	* tsmConnection_dpss.c (vtable_dpss): Instantiate
	  ActualConnectionVTable for DPSS.
	(*_dpss): Adapt for new structure.
	* tsmTile_dpss.c: Adapt for new structure.
	* tsmTspec_dpss.c: Ditto.
	* tsmConnection_local.c (vtable_local): Instantiate
	  ActualConnectionVTable for local files.
	(*_local): Adapt for new structure.
	* tsmTile_local.c: Adapt for new structure.
	* tsmConnection_web.c (vtable_web): Instantiate
	  ActualConnectionVTable for HTTP.
	(*_web): Adapt for new structure.
	* tsmTile_web.c: Adapt for new structure.
	* tsmUrlToFile.c (tsmOpenHttpConnection): Grab type from
	  TsmConnection
	(tsmReadHttpFile, tsmUrlToMemory, tsmUrlToBuffer, tsmUrlToFile,
	 tsmUrlToTempFile, tsmUrlMimeType, tsmUrlExists): Take
	 TsmConnectionHttp argument directly.
	
2000-09-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (libtsmApi_a_SOURCES): Add tsmRequest.c and
	  tsmRequestSrv.c.
	(EXTRA_HEADERS): Add tsmRequest.h and tsmRequestSrv.h
	* Makefile.in: Regen
	* tsmRequest.[ch]: New files.  Request list management.
	* tsmRequestSrv.[ch]: New files. TsmConnection-specific request
	  list manager.

2000-08-29  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (DO_RPCGEN): Define automake conditional only when
	  we have rpcgen on an SGI Irix.
	* Makefile.am: Turn off rpcgen derivations if !DO_RPCGEN
	* configure, Makefile.in: Regen

Mon Aug 28 11:16:30 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_local.c (tsmWriteTIFF_local): when writing TIFF files,
	then set the PHOTOMETRIC tag correctly for greyscale images -
	previously we were setting this to be RGB. This caused the JPEG
	library to fail when writing JPEG compressed greyscale (1
	component) tilesets.

	* tsmLAS_IO.c: [file deleted]

	* tsmLAS_IO.h: [file deleted]

	* tsmCreate_RAW.c (tsmReadRow_RAW): [removed]
	(tsmCreateLevelTiles_generic): [removed]
	(tsmDownSample_generic): [removed]
	(tsmDownSample_generic_ps): [removed]
	(tsmDownSample_generic_gaus): [removed]
	(tsmCreateLevelTiles_RAW): [removed]
	(tsmDownSample_RAW): [removed]

	* tsmCreate_LRBT.c (tsmCreateLevelTiles_LRBT): [removed]
	(tsmDownSample_LRBT): [removed]

	* tsmCreate_TIFF.c: [file deleted]

	* tsmCreate.c (tsmCreateLevelTiles): [removed]
	(tsmMakeTempImageName): [removed]
	(tsmRemoveTempImages): [removed]
	(tsmDownSample): [removed]

	* mtables.c: [file deleted]

	* sih.h: [file deleted]

	* sihDecs.h: [file deleted]

	* sihHash.c: [file deleted]

	* sihProts.h: [file deleted]

	* All .[ch] files: added Apache Software License notice
	
	* AUTHORS: added Yong Tze Chi

	* LICENSE: change the tsmApi license to the Apache Software
	License, version 1.1

Sat Aug 26 18:24:26 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmReadRowsDEM.c (tsmParseCreateParams_DEM): don't constrain
 	USGS DEM based data to be output as 16-bit pyramids. This should
 	be user customizable.

	* tsmReadRowsTIFF.c (tsmParseCreateParams_TIFF): allow grayscale
	TIFF images as well as RGB and colour palette

Thu Aug 24 10:21:59 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmReadRowsTIFF.c: [new file] TIFF/GeoTIFF file reader

	* tsmReadRowsTIFF.h: [new file] TIFF/GeoTIFF file reader

	* tsmCreate.c: Added instructions in the header comment for the
 	file on how to write your own file format reader functions for
 	tsmApi
	(tsmGetFileType): remove function - tsmFindImportFormat does all
 	of this already.
	(tsmInitTspecParams): the default coordinate system when
	generating a dataset should be TSM_NONE_COORDSYS, not UTM.

Tue Aug 22 11:37:31 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGeoVRML.c (TsmGeoVRML_new): guard against NULL ferror field
 	don't create an error.txt file when generating GeoVRML content
	(TsmGeoVRML_usage): correct the help text and correctly describe
	the purpose of the make_geovrml utility (this really shouldn't be
	in the tsmApi library but in tsmUtils/make_geovrml).
	(TsmGeoVRML_writeHTMLFile): correct the path output to the
	index.html <embed> tag for the root tree file

	* tsmCreate_RAW.c (tsmDownSample_inmemory_levels): deal with the
 	case where the target pyramid has only one level (i.e. the entire
 	image is contained within a single tile - can happen for small
 	DEMs).

Fri Aug 18 17:53:04 2000  Yong Tze Chi  <chi@Lomond.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): Modified so that this
 	function sets the numBytesPerComponent in tspec correctly.

	* tsmReadRowsDEM.c: (tsmReadRowsDEM_read): Fixed bug in reading
 	DEM data from temporary RAW file.

Fri Aug 18 11:48:07 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmCreate.c (tsmInitTileParams): Modified to initialize
 	out_bytespercomp properly.

	* tsmCreate.h: Added the field 'out_bytespercomp' in TsmTileParams
 	struct to suuport byte format conversion.

	* tsmWriteRows.h: Added the the field 'outBytesPerComp' in
 	TsmWriteRows struct for byte format conversion.

	* tsmWriteRows.c: (tsmWriteRows_convertTileFormat): New function
 	to convert input tile byte format into output byte format desired,
 	e.g. 16-bit to 32-bit conversion.
	
Thu Aug 17 20:55:59 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmWriteRows.c (tsmWriteRows_writeTile): This function now calls
 	tsmUpdateTileStats to update the min/max value of the dataset.

	* tsmCreate.c: Modified to support reading of USGS DOQ format.

	* tsmReadRowsDOQ.c: Added support for reading USGS DOQ format.

	* tsmReadRowsDOQ.h: Added support for reading USGS DOQ format.

Wed Aug 16 11:32:37 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmCreate.c: Added support for LRBT images.

	* tsmReadRowsPBM.c: Changed functions only used in this module to
 	static.

	* tsmReadRowsGIF.c: Changed functions only used in this module to
 	static.

	* tsmReadRowsJPEG.c: Changed functions only used in this module to
 	static.

	* tsmReadRowsDTED.c: Modified tsmParseCreateParams_DTED to
 	initialize tile's geographic coordinate.

	* tsmReadRowsDEM.c: Added progress report while resampling
 	elevation data. Also modified tsmParseCreateParams_DEM to
 	initialize tile's geographic coordinate.

	* tsmWriteRows.c: Added progress report while writing data.

	* tsmReadRowsDTED.c: Added tsmReadRowsDTED.c to support reading of
 	DTED files for TerraVision dataset creation.

	* tsmReadRowsDTED.h: Added tsmReadRowsDTED.h to support reading of
 	DTED files for TerraVision dataset creation.

	* tsmCreate.h: Modified to add support for DTED reader.

	* tsmCreate.c: Modified to add support for DTED reader.

Tue Aug 15 13:37:29 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmFootprintToLatLong): [new func] convert a
 	footprint in any coordinate system into a lat/long footprint.
	(tsmIsFootprintInside): support comparisons against different
 	coordinate systems by first converting both footprints into
 	lat/long and then performing the comparison.
	(tsmBuildGeosets): compare resolutions in a common unit system
	(convert degrees into meters)
	(tsmAddDataSetToDatabase): change message reporting different min
 	or max resolution between a newly read dataset and a dataset that
 	exists in the database. This is now a debug message, not an error
 	report.

Fri Aug 04 10:07:15 2000    <reddy@MAGNOLIA>

	* tsmGeoVRML.c: add <float.h> include for DBL_MAX definition under
 	Windows

	* tsmReadRowsGIF.h: need to undefine DrawText if it exists because
 	winuser.h under Windows defines this and thus causes a conflict
 	with the DrawText function in libungif.

	* tsmGeoVRML.c: replace Unix-specific code with calls to
 	tsmMakeDirIfNotExist that works under Windows too.

Thu Aug 10 15:08:54 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmCreate.c: Modified to support reading USGS DEM file.

	* tsmReadRowsDEM.c: Added support for reading USGS DEM file.

	* tsmReadRowsDEM.h: Added support for reading USGS DEM file.

	* tsmWriteRows.c: Minor bug fix: inadequate memory allocation for
 	temporary buffer.

Tue Aug  8 10:19:48 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmCreate.c: Modified to support RAW data format.

	* tsmReadRowsRAW.h: Added tsmReadRowsRAW.h.

	* tsmReadRowsRAW.c: Added tsmReadRowsRAW.c - support for reading
 	RAW data format.

	* tsmWriteRowsPPM.c: Added comments.

	* tsmWriteRows.c: Bug fix for handling non-LRBT image with
 	overlapping region, and added comments.

Mon Aug  7 18:20:59 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmWriteRows.h: Modified to handle non-LRBT image formats
 	correctly.

	* tsmWriteRows.c: Modified to handle non-LRBT image formats such
 	as JPEG, GIF, and PBM correctly.

2000-08-07  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmDownSample_image, tsmDownSample_inmemory_r,
	tsmDownSample_inmemory_levels, tsmDownSample_inmemory):
	  Change print() traces to TSMTRACE.

Mon Aug  7 10:57:13 2000  Yong Tze Chi  <chi@Silver.AI.SRI.COM>

	* tsmWriteRowsPPM.h: Added tsmWriteRowsPPM.h

	* tsmWriteRowsPPM.c: Added tsmWriteRowsPPM.c. Write TerraVision
 	tiles out to PPM files. Used for debugging purposes.

	* tsmReadRowsPBM.h: Added tsmReadRowsPBM.h.

	* tsmReadRowsJPEG.h: Added tsmReadRowsJPEG.h.

	* tsmReadRowsGIF.h: Added tsmReadRowsGIF.h.

	* tsmWriteRows.h: Added tsmWriteRows.h.

	* tsmReadRowsPBM.c: Added tsmReadRowsPBM.c. Read rows of data from
 	PPM and PGM image.

	* tsmReadRowsJPEG.c: Added tsmReadRowsJPEG.c. Read rows of data
 	from JPEG image.

	* tsmReadRowsGIF.c: Added tsmReadRowsGIF.c.  Read rows of data
	from GIF image.

	* tsmWriteRows.c: Added tsmWriteRows.c.  Contain functions to
 	write out TerraVision tiles.  To be used with
 	tsmDownSample_inmemory.

2000-08-04  Lee Iverson  <leei@Canada.AI.SRI.COM>

	(tsmDownSample_byblocks): Redo initialization of top and bottom
	  borders to avoid memory overruns.

2000-08-04  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmIntProts.h (TSM_DOWNSAMPLE_SIGNED): Changed from UNSIGNED,
	  since most integer datasets (e.g. OI) will be unsigned.
	* tsmCreate_RAW.c (tsmDownSample_image): Adapt for change to
	  SIGNED flag.
	(tsmDownSample_inmemory_r, tsmDownSample_inmemory_levels):
	  Properly set flags for TOP and BOTTOM borders.

2000-08-03  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmDownSample_byblocks): Properly initialize
	  in_dex array.
	(tsmDownSample_inmemory_r): Fix recursion to properly distribute
	  data.
	
Tue Aug  1 14:25:04 2000  Yong Tze Chi  <chi@Lomond.AI.SRI.COM>

	* tsmGeoCoordBuffer.h: Renamed from tsmGeoCoord.h to avoid name
 	clash.

	* tsmGeoCoordBuffer.c: Renamed from tsmGeoCoord.c to avoid name
 	clash.

	* tsmGeoVRML.c: Renamed from TsmGeoCoord to GeoCoordBuffer to
 	avoid name clash.

2000-08-01  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmCreate_RAW.c (struct LevelBuf): Add span_h field (necessary?)
	(tsmDownSample_inmemory_levels): Simplify and correct iin
	  preparation for rolling updates when overlap needed.
	(tsmDownSample_inmemory): Initialize span_h.
	
	* tsmGeoVRML.c (TsmGeoVRML_writeHTMLFile): Correct format string
	  to print percent signs.

Fri Jul 21 11:31:14 2000  Yong Tze Chi  <chi@Lomond.AI.SRI.COM>

	* tsmConnectionInt.h (ConnectionCommonFields): add new fields to
 	connection params structure for GeoVRML support

	* tsmConnectionParams.c (tsmInitParams): initialise new GeoVRML
 	variables
	(tsmSetParam): support new GeoVRML variables: TSM_PARAM_MODELS and
	TSM_PARAM_TEXTURES

	* tsmArg.c (tsmParseVRMLArgs): removed obsolete VRML creation options
	(tsmDescribeArgs): ditto

Thu Jun 29 10:47:17 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): updated the tspec generation
	routine to support the creation of LVCS datasets. 

	* tsmCreate.c (tsmInitTspecParams): initialise lvcs_x and lvcs_y
	to 0.0.

	* tsmCreate.h: add lvcs_x and lvcs_y parameters to specify the
	LVCS offset from the lat/long origin

	* tsmCreate.c (tsmCreateTspec): allow LVCS coordinate systems when
	creating tspec files

2000-07-12  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection_web.c (tsmConnect_web): Default connection caching
	  to TRUE.

2000-06-29  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): tm_month needs to be offset
	  by 1, since tm_month==0 => January.

Wed Jun 28 15:24:46 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): don't ignore the user's
	-comps setting when defining the default components per pixel for
	an OI. Previously this was getting hardcoded to 3.

2000-06-28  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): Downsample by (w+1)/2
	* tsmCreate.c (tsmCreateAllTiles): Downsample by (w+1)/2
	* tsmCreate_RAW.c (tsmDownSample_generic_ps): Downsample to
	  (w+1)/2 instead of w/2.  Handle edge conditions.
	(tsmDownSample_generic_gaus): Downsample to (w+1)/2 instead of
	  w/2.  Use a 4x4 kernel for gaussian downsampling to avoid image
	  creep.

2000-06-26  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmUrlToFile.c (tsmOpenHttpConnection): Call
	  tsmCloseHttpConnection if failed to connect, instead of rolling
 	  our own disconnect.
	(tsmCloseHttpConnection): Don't assume that
	  http_trans_conn_destroy() won't access host and proxy_host.

Sat Jun 17 19:26:06 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmSet): don't do the va_arg inside of the
 	min() MACRO because it gets expanded twice and we lose the
 	argument value. This meant that you could never set the jpeg
 	quality for writing datasets.
	
Sat Jun  3 22:40:51 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmOpenStream): make the "http writes not
	supported" message a debug message rather than an error
	report. Let's the calling function fail silently if it wants to.

Fri Jun 09 17:49:30 2000    <reddy@MAGNOLIA>

	* tsmConnection.c (tsmConnect): only create the tileBasePurl and
 	tspecBasePurl structures if they are NULL. This was causing a mem
 	leak before because we were creating a new Purl without looking to
 	see if one already existed.

	* tsmPurl.c (tsmMakePurl): remove the constant string initialisers
 	to the new Purl - make them NULL instead. This ties up a number of
	potential mem free errors.

Mon Jun 05 15:06:31 2000    <reddy@MAGNOLIA>

	* tsm.h: add #include for stdlib.h because Visual Studio's
 	stdlib.h defines min() and max() without checking for their
 	existence. We check, so let's bring in the MS stuff first.

	* tsmPurl.c (tsmMakePurl): initialise the uri string also
	(tsmCopyPurl): do a tsmMemStrdup on the protocolString field of a
 	Purl when we copy it. This used to be a pointer copy and that
 	worries me.
	(tsmFreePurl): free the protocolString too now
	(tsmParseUrl): do a tsmMemStrdup() when setting the protocolString

	* tsmEmulate.c (tsmOpen): add protocolString to list of Purl
 	fields initialised

	* tsmUrlToFile.c (tsmOpenStream): free the Purl that was allocated
 	when bombing out upon an error

	* tsmConnection.c (tsmConnect): the Purl we create here is now
 	local in its scope and we can free it when we're done. Fixes a
 	potential duplicate mem free when tspec not parsed.

	* tsmConnection_dpss.c (tsmConnect_dpss): take a copy of the
 	Purl for the dataset location, don't just grab the pointer.

	* tsmConnection_web.c (tsmConnect_web): take a copy of the
 	Purl for the dataset location, don't just grab the pointer.

	* tsmConnection_local.c (tsmConnect_local): take a copy of the
 	Purl for the dataset location, don't just grab the pointer.

2000-06-09  Michael A. Eriksen  <eriksen@AI.SRI.COM>

	* added #define HAVE_ERRNO_H to config.h in winbuild

2000-06-09  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (AC_CHECK_HEADERS): Add errno.h
	* configure, config.h.in: Regenerate.
	* logging.c: Include <errno.h> if HAVE_ERRNO_H, otherwise use
	  hopeful definitions.

2000-06-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmAllocTspecs.c (tsmFreeTspec): Add tracing.
	* tsmConnection.c (tsmDisconnect): Add tracing.
	* tsmUrlToFile.c (tsmOpenHttpConnection): Destroy connection on
	  http connection failure.

2000-06-05  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* TsTileSpecIn.c (tspReadIdentityTspec1): Remove redundant strcpy().
	* TsTileSpecIntProts.h (tspReadSimpleTileSet): Declare.

	* configure.in (AC_CHECK_HEADERS): Add unistd.h
	* configure, config.h.in: Regen
	
	* tsmHost.c: Don't include <ctype.h>
	* tsmImage.c: Include <unistd.h> if HAVE_UNISTD_H defined.
	* tsmInternal.h: Include <ctype.h>
	* tsmUtils.c: Include <unistd.h> if HAVE_UNISTD_H defined.
	(tsmShowUrl): We can only call unlink() if HAVE_UNISTD_H

Thu May 18 15:31:59 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmPrintMap): save the geo-name field for map
	entries in the dataset database
	(tsmPrintModel): save the geo-name field for model entries also

	* tsmDatabase_local.c (tsmParseDatabaseLine): read the geo-name
	field for model and map entries in the dataset database

Wed May 10 17:10:13 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmReadHttpFile): only check for connection
	close if a TsmConnection structure has been passed in, otherwise
	we stand the risk of dereferencing a NULL pointer.

2000-04-24  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnectionInt.h (struct TsmConnectionHttp): Add cache_conns
	  flag and use bitfields.
	* tsmConnectionParams.h (TSM_PARAM_CACHE_CONNS): New flag.
	* tsmConnectionParamsInt.h (struct TsmConnectionParamsStruct): Add
	  cache_conns flag associated with TSM_PARAM_CACHE_CONNS
	* tsmConnection_web.c (tsmConnect_web): Use TSM_PARAM_CACHE_CONNS
	  and param->cache_conns to initialize cache_conns
	* tsmUrlToFile.c (tsmOpenHttpConnection): Optionally cache
	  connection based on value of connect->cache_conns.

2000-04-24  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmUrlToFile.c (tsmOpenHttpConnection): Use ASYNC mode.
	  Expand buffer to 16K.  Call http_trans_buf_reset() to clean up
	  between requests.
	(tsmCloseHTTPConnection): Correct Doc++ comment.
	(tsmReadHttpFile): Check for a "Connection: close" reponse from
	  server and close connection if seen.

	* TsTileSpecOut.c (tspSaveTspec): Comment out unused funcName.
	* tsmArg.c (tsmParseVRMLArgs): Comment out unused funcName.
	* tsmChecksum.c (tsmUpdateTileStats, tsmChecksumPyramid_col):
	  Comment out unused funcName.
	* tsmConnection.c (tsmDisconnect): Comment out unused funcName.
	* tsmConnectionParams.c (tsmPrintParams): Comment out unused
	  funcName.
	* tsmCreate_LAS.c (tsmCreateLevelTiles_LASRGB): Remove unused vars.
	* tsmCreate_RAW.c (tsmReadRow_RAW): Comment out unused funcName.
	* tsmEmulate_local.c (tsmIsTIFFPresent_local): Comment out unused
	  funcName.
	* tsmEmulate_web.c (tsmIsTIFFPresent_web): Comment out unused
	  funcName.
	* tsmImageUtils.c (tsmRgbBufferToGifFile): Comment out unused
	  funcName.
	* tsmMem.c (tsmMemManagerFree): Comment out unused funcName.
	* tsmPyramidInfo.c (tsmPrintServerGroup, tsmPrintPyramidInfo):
	  Comment out unused funcName.
	* tsmTspecUtils.c (fprint_Purl, fprint_IdentityTspec,
	 fprint_TileTspec, fprint_CoordTspec, fprint_PixelTspec,
	 fprint_ImageTransformationTspec, fprint_ProjectionTspec,
	 fprint_SimpleTileSet, fprint_Pyramid, fprint_NameUrlPairs,
	 check_TileTspec_for_strings, check_CoordTspec_for_strings,
	 check_PixelTspec_for_strings, 
	 check_ImageTransformationTspec_for_strings,
	 check_ProjectionTspec_for_strings): Comment out unused funcName.
	* tsmTspec_web.c (tsmReadTspec_web): Comment out unused funcName.
	* tsmUTM.c (projection_limit_check): Remove unused var
	* tsmUtils.c (tsmCheckString): Comment out unused funcName.
	* tsmVRML.c (tsmWriteGeotile): Make funcName static.
	* tsmVRMLUtils.c (tsmVRMLCacheAdd): Remove unused vars.
	(tsmTileElev): Comment out unused funcName.

Sun Apr 23 14:55:09 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c (tsmInitTileParams): set the default DEM tile size
	to be 128 x 128.

	* tsmCreate_RAW.c (tsmCreateLevelTiles_generic): calculate the
	tile size based upon the pyramid's pixel dimensions not those of
	the input data

	* TsTileSpecGen.c (tspCreatePyramid): set tspec pixel info to a
	default value (e.g. 1 comp of 4 bytes) and don't use the values
	from the params structures as these as for the input data not the
	output pyramid.

	* tsmChecksum.c (tsmCalcTileStats): added code to calculate the
	min/max tile values for 2-byte input data.

2000-04-13  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmUrlToFile.c (tsmOpenHttpConnection): Use HTTP_TRANS_SYNC
	  mode.  Identify connection in TSMTRACE.
	(tsmCloseHttpConnection): Identify connection in TSMTRACE.
	(tsmCloseStream): Pass funcName to TSMTRACE

Thu Apr  6 16:48:45 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmOpenHttpConnection): disabled the http
	connection caching for the time being - it doesn't work on avila
	for some reason - need to investigate this further!! 

	* tsmTile_web.c (tsmReadNextTile_web): create a URL that will use
	the Apache mod on the server (if installed), otherwise stick with
	the old cgi-bin style URL.

	* tsmConnection_web.c (tsmConnect_web): remove the code that
	checks for the existence of tile formats over the web - this is
	done by the apache mod/cgi script.
	(tsmConnect_web): check whether the http server has the
	mod_terravision Apache mod installed

2000-04-06  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile_local.c: Include <prerror.h>
	(tsmReadNextTile_local): Check for PR_PENDING_INTERRUPT_ERROR on
	  failure and return TSM_NODATA.
	* tsmTile_web.c: Include <prerror.h>
	(tsmReadNextTile_web): Check for PR_PENDING_INTERRUPT_ERROR on
	  failure and return TSM_NODATA.

2000-04-06  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmGet, tsmDescribeConnection): Move
	  DPSS-specific variables inside #ifdef region.
	(tsmConnectionType): Remove unused vars.
	* tsmCreate_PBM.c (tsmParseCreateParams_PPM,
	  tsmParseCreateParams_PGM): Remove unused vars.
	* tsmDatabase.c (tsmAppendDataSet, tsmPersistDatabase,
	  tsmIsFootprintInside, tsmCalcFootprintFromXform,
	  tsmUpdateDatabaseFromServerCB, tsmRemoveMapFromDatabase,
	  tsmRemoveModelFromDatabase): Remove unused vars.
	(tsmUpdateDatabaseFromServerCB): Move fast_dpss check inside DPSS
	  ifdefed region.
	* tsmDatabase_local.c (tsmReadDatabase_local): Remove unused vars.
	  Delete #if 0 section.
	* tsmPyramidInfo_local.c (tsmReadNameUrlIds): Remove unused vars.
	* tsmTile.c (tsmTileReqEnd): Remove unused vars.
	* tsmTile_local.c (tsmReadTIFF_local): Remove unused vars.
	(tsmWriteTIFF_local): Ditto.
	* tsmTspec_web.c (tsmReadTspecNEW_web): Remove unused tmpPathName
	* tsmUrlToFile.c (tsmUrlToTempFile): Remove unused vars.
	(tsmOpenStream): Add funcName to TSMTRACE().

	* tsmUrlToFile.c (tsmFilenameFromHandle): Correct usage of
	  list_next() and list_delete()

Wed Apr  5 15:43:06 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): changed the behaviour of how
	many levels to create. Previously we created levels until the
	lowest res version fitted inside a 32x32 tile. This is no longer a
	requirement, so now we go down until the lowest version fits
	inside a single tile of the dimensions set for that dataset,
	e.g. 128x128 for OIs by default.

	* tsmCreate_RAW.c (tsmCreateLevelTiles_generic): minor fix for
	dealing with arbitrary tile sizes

	* tsmUrlToFile.c (tsmReadHttpFile): explicitly set the HTTP
	version number of GETs/HEADs to 1.1

	* TsTileSpecGen.c (tspCreatePyramid): no longer hardcoded to
	128x128 for OIs and 32x32 for DEMs. Accepts a TsmTileParams
	structure and sets up the tile dimensions from that.

Fri Mar 17 09:23:31 2000    <reddy@MAGNOLIA>

	* tsmUrlToFile.c (tsmReadHttpFile): move range string to top of
 	function otherwise it is destroyed before we are finished with its
 	value
	(tsmReadHttpFile): only read the body if we doing a GET

	* tsmPurl.c (tsmFilenameToUrl): don't assume that getcwd() returns
 	a string starting with '/'. This is not the case under Windows.

Thu Mar 16 09:45:13 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c: updated all http routines to use the low-level
	ghttp functions.

Wed Mar 15 16:15:31 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection_web.c (tsmDisconnect_web): if we have an http
	connection open, then close it.

	* tsmConnection.c (tsmDisconnect): call the new HTTP disconnect
	function when closing a connection

Mon Mar 06 00:40:31 2000    <reddy@MAGNOLIA>

	* tsmTile_web.c (tsmReadNextTile_web): include the port number in
 	the http URL to the server's get_http_tile CGI entry point.
	(tsmCheckTileFormat_web): include the port number in the test for
 	whether a file exists at the specified URL
	(tsmCheckTIFFFormat_web): ditto

Thu Mar  2 17:15:48 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* configure.in (ac_cv_have_dash_pthread): removed libwww and ghttp
	from the command line

Tue Feb 29 18:24:56 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUtils.c (tsmMakeDirIfNotExist): should check for
 	PR_GetFileInfo returning a value NOT equal to PR_SUCCESS in order
	to create the directory structure (logic was inverted).

2000-02-11  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in: Remove check for ../thread/pthread.h
	* configure, config.h.in: Regen

Thu Jan 27 10:59:06 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmInitHttp): initialise out http PRLock 
	(tsmCleanupHttp): destroy our http PRLock
	(tsmSetHttpProxy): enclose the mechanics of this function inside a
	PR_Lock...PR_Unlock block because libwww is not thread safe
	(tsmUrlToMemory): ditto on the locking to maintain thread safe
	(tsmUrlToBuffer): ditto on the locking to maintain thread safe
	(tsmUrlMimeType): ditto on the locking to maintain thread safe

	* tsmTile_web.c (tsmReadNextTile_web): use the new tsmUrlToBuffer
	call to read an http tile into memory
	(tsmCheckTileFormat_web): use the new tsmUrlExists call to check
	the tile format of the remote dataset
	(tsmCheckTIFFFormat_web): use the new tsmUrlExists call to check
	for the specific TIFF image on an http server

	* tsmUrlToFile.c (tsmUrlToFile): [new func] takes an http url and
 	downloads it to a file on local disk using the libwww routines.
	(tsmUrlToBuffer): [new func] loads an http url to a preallocated
 	buffer, with the ability to specify a maximum number of bytes to
 	read.
	(tsmUrlMimeType): [new func] performs a HEAD request on the URL
	and returns its MIME type using libwww
	(tsmUrlExists): [new func] checks to see if a valid file exists at
	the end of a URL (not exist means MIME type = "www/unknown").
	(tsmHttpUrlToFile): [deleted]
	(tsmHttpUrlToBuffer): [deleted]
	(tsmHttpUrlFd): [deleted]
	(tsmHttpFdToStream): [deleted]
	(tsmSkipHttpHeader): [deleted]
	(tsmSkipHttpHeaderFd): [deleted]
	(tsmSocketRequestFd): [deleted]
	(tsmFileDescToFile): [deleted]
	(tsmFileDescToBuffer): [deleted]

Wed Jan 26 17:17:59 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmInitHttp): [new func] initialises the libwww
 	library (if not already initialised)
	(tsmCleanupHttp): [new func] closes down the libwww (if previously
 	inited)
	(tsmSetHttpProxy): [new func] set and remove a proxy server for all
	http accesses
	(tsmUrlToMemory): [new func] uses libwww to download a file from
	an http server into memory. Returns the buffer and its size.

	* tsmUtils.c: change name of our HTTP define to USE_HTTP in order
	to avoid conflict with a definition in libwww

	* tsmConnection_web.c: ditto

	* tsmEmulate_web.c: ditto

	* tsmLocalDbase_web.c: ditto

	* tsmPyramidInfo_web.c: ditto

	* tsmTile_web.c: ditto

	* tsmTspec_web.c: ditto

	* configure.in: added libwww include files to the compile line for
	tsmApi

Tue Jan 18 17:16:03 2000    <reddy@MAGNOLIA>

	* tsmUrlToFile.c (tsmAddHandle): remembers a FILE stream and
 	filename pair.
	(tsmFilenameFromHandle): returns a filename given a FILE stream,
 	as previously supplied to tsmAddHandle
	(tsmHttpFdToStream): remember the name of the temp file that we
 	create when we pull the http file over to localdisk
	(tsmCloseStream): delete the temp file associate with this handle
 	(if there is one)

Fri Jan 14 11:07:21 2000    <reddy@MAGNOLIA>

	* tsmPurl.c (tsmParseUrl): update to support Windows style full
 	paths, e.g. C:/foo. This involves correctly realizing that C:/ is
 	not a full URL with an unknown protocol (http://), that this is
 	the root directory and doesn't need a '/' prefixed, as well as
 	converting '\' style slashes to '/'.

Thu Jan 06 15:21:07 2000  Martin Reddy  <reddy@MAGNOLIA>

	* tsmUrlToFile.c (tsmSocketRequestFd): don't do an htons on the
 	port. This caused http streams to not work on the PC. Also, the
 	3rd param of PR_Connect is a timeout not a byte size.

Tue Jan  4 09:44:26 2000  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* make_html.pl: [new file] This Perl script will automatically
 	generate the API documentation from the source code in the tsm
 	directory using the doc++ utility. This script fixes some
 	problems with doc++ and prettifies the HTML output a bit.

1999-12-22  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmDatabase.c (rawTimeString): New.  Produce a raw hex time
	  string for 64 bit PRTime.
	(tsmAppendServer): Use rawTimeString() to print PRTime.
	(tsmPrintServer): Ditto.
	* tsmDatabase_local.c (tsmParseDatabaseLine): Handle both 32 bit
	  and 64 bit raw PRTime values.

Mon Dec 20 16:10:02 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmPrintDataSet): write out the geo-name field to
	the database file for each dataset!!

Fri Dec 17 11:04:22 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmPurl.c (tsmFilenameToUrl): remove declare for getcwd()

Wed Dec 15 09:44:56 1999    <reddy@MAGNOLIA>

	* logging.c (NetLogOpen): Use PR_AF_INET.
	* rpc_types.h.in: Either include <sys/types.h> or use PRUint*
	  to define u_int and u_short.
	* tsmGenArray.h: Include <rpc/types.h> for u_int.
	* tsmImage.c (DrawText): Undefine to protect from Windows
	  DrawText->DrawTextA translation.
	* tsmPurl.c (tsmFilenameToUrl): Don't need to declare getcwd().
	* tsmTileInt.h (struct TsmTileHeader): Make tv an array of PRTime.
	* tsmUrlToFile.c (tsmStreamToFile): Don't close input stream.
	(tsmFileDescToFile): Correct docs.
	(tsmStreamToBuffer): Don't close input stream.
	(tsmFileDescToBuffer): Correct docs.
	
	* tsmVRMUtils.c (M_PI): Define if not imported from <math.h>

1999-12-14  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection_web.c (tsmConnect_web): Don't call
	  tsmInitHttpLock().
	* tsmExtProts.h (tsmInitHttpLock): Delete decl.
	(tsmHttpFdToStream): Take PRFileDesc* arg.
	(tsmHttpUrlFd): Return PRFileDesc* and take skipHeader arg.
	(tsmSkipHttpHeaderFd): New decl.
	(tsmSocketRequestFd): Return PRFileDesc*.
	(tsmSocketRequestStream): Delete.
	* tsmTile_web.c (tsmReadNextTile_web): Adapt for PRFileDesc*
	  returns from tsmHttpUrlFd().
	(tsmCheckTileFormat_web): Don't use tsmOpenStream() since we don;t
	  want to read whole files.  Simply call tsmHttpUrlFd() and then
	  PR_Close() if successful.
	(tsmCheckTIFFFormat_web): Ditto.
	* tsmUrlToFile.c: Include <prio.h> and <prnetdb.h>
	(gethost_lock): Delete.
	(tsmHttpUrlToFile): Adapt for tsmHttpUrlFd() returning PRFileDesc*
	(tsmOpenStream): Adapt tsmHTTP access for tsmHttpUrlFd() returning
	  PRFileDesc*
	(tsmHttpUrlToBuffer): Adapt for tsmHttpUrlFd() returning
	  PRFileDesc*
	(tsmHttpUrlFd): Since tsmSocketRequestFd() now returns
	  PRFileDesc*, so must we.  Also add skipHeader arg.
	(tsmHttpFdToStream): Take PRFileDesc* as fd arg.  Copy contents to
	  a temporary file, then fopen() and return stream.
	(tsmInitHttpLock): Delete.
	(PRfgets): New.  Read a single line from PRFileDesc*.
	(tsmSkipHttpHeaderFd): New.  Read HTTP header until start of
	  data.  Returns error condition if 404/403 error or header is
	  improperly formatted.
	(tsmSocketRequestFd): Now returns PRFileDesc* and doesn't take
	  verbose argument.  NSPR-ized for socket initialization.
	(tsmSocketRequestStream): Deleted.
	(tsmFileDescToFile): New.  Copy from PRFileDesc* to file.
	(tsmFileDescToBuffer): New. Copy from PRFileDesc* to memory buffer.

1999-12-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (DPSS_C): Conditionally define files to only include
	  when DPSS defined.
	(libtsmApi_DPSS_a_SOURCES, libtsmApi_ISS_a_SOURCES): Add $(DPSS_C)
	* Makefile.in: Regen
	* aclocal.m4: Regen
	* configure.in (AC_CHECK_HEADERS): Add <sys/types.h>
	(AM_CONDITIONAL(DPSS)): Add.
	* configure: Regen.
	* config.h.in: Regen
	
	* tsmPurlDefns.x: Unconditionally include <rpc/rpc.h>
	* tsmPurlDefns.h: Regen
	
Tue Dec  7 12:08:42 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmRemoveServerSetsFromDatabase): fix bug that
	caused TV to crash when updating a database that we built before
	we added geoname fields to datasets.
	(tsmBuildGeosets): robustified the GeoSet building process against
	datasets with no geoname fields. Plugs another potential TV crash
	during database update.

1999-12-06  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (libtsmApi_a_SOURCES): Remove TsTileSpecDecs_xdr.c,
	  tsmPurlDefns_xdr.c and tsmPackTspecs.c ...
	(libtsmApi_DPSS_a_SOURCES, libtsmApi_ISS_a_SOURCES): ... and add
	  them here, so they are only compiled if DPSS enabled.
	* Makefile.in: Regen
	
	* TsTileSpecOut.c (tspSaveTileTspec_fp): Make extern instead of
	  static.
	* tsmImageUtils.c (tsmTileToRgb): Call tspSaveTileTspec_fp()
	  directly.
	
	* tsmPackTspecs.c: Move tsmCheckString() to ...
	* tsmUtils.c (tsmCheckString): ... here.

	* configure.in: Check for <rpc/types.h> header and generate
	  minimal file if not seen.
	(AC_CHECK_HEADERS): Add syslog.h and pwd.h
	* configure: Regen
	* config.h.in: Regen

	* logging.c: Conditionalize <syslog.h> on HAVE_SYSLOG_H
	(NetLoggerOpen): Disable NL_SYSLOG if !HAVE_SYSLOG_H
	(NetLoggerGTWriteString, NetLoggerWriteString, NetLoggerClose):
	  Ditto.
	(SysLogOpen, SysLogClose): Don't define if !HAVE_SYSLOG_H
	
	* tsmPurl.c: Conditionalize <pwd.h> on HAVE_PWD_H
	(tsmFilenameToUrl): Only interpret ~foo if HAVE_PWD_H
	(tsmParseUrl): Ditto.
	
	* TsTileSpecDecs.x tsmPurlDefns.x: Conditionalize <rpc/rpc.h>
	  include on DPSS, otherwise provide dummy typedefs for XDR and
	  bool_t. 
	* TsTileSpecDecs.h tsmPurlDefns.h: Regen.

1999-12-05  Lee Iverson  <leei@canoe.ai.sri.com>

	* tsmPurl.c: Make sure we count the extra : when port is defined.

Tue Nov 30 15:17:40 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmPrintServer): need to add a line feed at the
	end of a server's last-contacted date

Tue Nov 23 16:52:16 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate_LAS.c (tsmCreateLevelTiles_LASRGB): compiling with
	-o32 didn't like comparison with PRFileDesc* < 0. Changed to != 0.

1999-11-13  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmDatabase.c (tsmUpdateDatabaseFromServerCB): Conditionalize
	  DPSS access on defined(DPSS)
	(tsmReadServer): Ditto.

Tue Nov  9 10:09:48 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase_local.c (tsmParseDatabaseLine): parse the
	lvcs-footprint field in the old database format

Mon Nov  8 16:24:34 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmAppendServer): [new func] adds a server to the
 	XML tree
	(tsmAppendGeoSet): [new func] adds a geoset to the XML tree
	(tsmAppendMap): [new func] adds a map to the XML tree
	(tsmAppendDataSet): [new func] adds a dataset to the XML tree
	(tsmAppendFootprint): [new func] adds a footprint to the XML tree

	* tsmUtils.c (tsmDateString): don't put \n at the end of a date
 	string.

Fri Nov  5 00:24:54 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase_local.c (tsmParseDatabaseLine): support reading of
	resolutions in degrees as well as meters

	* tsmDatabase.c (tsmPrintFootprint): add support for writing out
	an LVCS coordinate to the database file
	(tsmCalcFootprintFromXform): When we encounter a pyramid with an
	affine projection type, interpret this as an LVCS. Previously we
	tried to convert this to GCC using the various matrices in the
	tspec, but these are not always supplied or correct.
	(tsmPrintDataSet): when outputing the resolution for a latlong
	dataset, the units are degrees not meters
	(tsmIsFootprintInside): [new func] works out if one geographic
	footprint is inside another.
	(tsmCalcFootprintFromXform): support latlong pyramids - calculate
	the latlong-footprint values

	* TsTileSpecDecs.x: add TSM_LVCS_COORDSYS to the list of possible
	coordinate systems in a Footprint.
	LVCSFootprint: added a new structure for holding the origin and
	extent of an LVCS dataset
	Add LVCSFootprint to the list of possible representations for a
	geographic Footprint

	* tsmDatabase.c (tsmFreeMap): free the geoname field of a TsmMap
	(tsmFreeModel): free the geoname field of a TsmModel
	(tsmPrintMap): output the geoname of a TsmMap
	(tsmAddMapToDatabase): copy the geoname field of a TsmMap
	(tsmAddModelToDatabase): copy the geoname field of a TsmModel
	(tsmReadMap): add a new field to the map.info file called
	map-geoname which we read in order to find the map's geoname
	(tsmReadModel): parse the geoname field in the VRML model's
	Metadata node.

	* tsmDatabase.h: added a geoname field to TsmModel and TsmMap

	* tsmDatabase.c (tsmAddModelsToGeoSets): [removed]
	(tsmAddPyramidGeoSet): [removed]
	(tsmExtractFilename): [removed]
	(tsmAddGeoSetToDatabase): [removed]
	(tsmPairDanglingDatasets): [removed]
	(tsmIsDatasetInAGeoset): [removed]
	(tsmRemoveRedundantGeoSets): [removed]
	(tsmAddMapsToGeoSets): [removed]
	(tsmBuildGeosets): [new func] takes the current list of datasets,
	maps, and models and builds a refresh list of GeoSets based upon
	this. 
	(tsmCompareGeoNames): [new func] compares the geoname fields
	of two datasets (pyramid, map, or model).
	(tsmRemoveMapFromDatabase): no need to remove from geoset array
	anymore 
	(tsmRemoveModelFromDatabase): ditto

Thu Nov  4 09:26:01 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.h: add a geoname field to the dataset
	structure. This is a copy of the tspec geoname field.

	* tsmDatabase.c (tsmPrintDataSet): write out the geoname
	(tsmFreeDataSetContents): free the geoname

	* tsmDatabase_local.c (tsmParseDatabaseLine): parse a geo-name
	field associated with a dataset in the database.

	* tsmDatabase.c (tsmUpdateDatabaseFromServerCB): use the new
	tsmReadServer function to find all datasets on a server, rather
	than using the old PyramidUrls loading functions from the
	TsmHandle routines.

	* tsmDatabase_dpss.c (tsmCompareDPSSDates): moved this function to
	the _dpss.c file instead of having to #ifdef it out of the main
	tsmDatabase.c file. Also provide a stub for when the DPSS define
	is not given.

Wed Nov  3 18:44:06 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmCompareDPSSDates): change the time_t to a
	PRTime and build the appropriate string from this value to compare
	against a DPSS date string.
	(tsmUpdateDatabaseFromServerCB): save current timestamp using
	PR_Now() instead of time(NULL) so that the value works with the
	new tsmDataString() function.

	* tsmDatabase.h: change last_contacted from a time_t to a PRTime
	variable so that it can be used with the updated tsmDateString().

	* tsmDatabase_web.c: [new file]

	* tsmDatabase_dpss.c: [new file]

	* tsmDatabase_web.c (tsmReadServer_web): does a GET on an HTML
	directory and parses through the result looking for any <A HREF>
	tags that contain urls with a .oi, .dem., .map, or .model extension.

	* tsmDatabase_local.c (tsmReadServer_local): scans a directory on
	local disk and returns a list of all entries with a .oi, .dem,
	.map, or .model extension.

	* tsmDatabase_dpss.c (tsmReadServer_dpss): uses the old TsmHandle
	routines to get a NameUrlIds list of datasets on a DPSS server
	that is consistent with the other tsmReadServer_x calls.

	* tsmDatabase.c (tsmReadServer): main function that reads a
	TerraVision dataset server and returns a list of all datasets
	(entries with a .oi, .dem, .map, or .model extension).

	* tsmUtils.c (tsmCheckFilenameExtension): checks to see if a
	filename has the specified filename extension, e.g. ".oi".

1999-10-06  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmCreate_LAS.c (tsmCreateLevelTiles_LASRGB): Use
	  PR_Open/PR_Close for ifp.
	(tsmDownSample_LAS_psample, tsmDownSample_LAS_gaussian): Use 
	  FILE * for in_ptr.
	* tsmLAS_IO.c (tsmLAS_Finish, tsmLAS_GetLine, tsmLAS_GetDemLine,
	  tsmLAS_InitInImg): Use FILE * instead of bare fd for in_ptr.
	* tsmLAS_IO.h (tsmLAS_Finish, tsmLAS_GetLine, tsmLAS_GetDemLine,
	  tsmLAS_InitInImg): Redeclare with FILE * for in_ptr.
	
	* tsmInternal.h: Include <prio.h>

	* TsTileSpecParse.c (tspReadPyramid): Convert stat() to
	  PR_GetFileInfo()
	* tsmConnection_local.c (tsmConnect_local): Replace stat() with
	  PR_GetFileInfo().
	* tsmImage.c (tsmSaveImageGIF, tsmReadImage): Remove unsued vars.
	* tsmLocalDbase.c (tsmLoadPyramidDatabaseIfExist): Convert stat()
	  to PR_GetFileInfo() 
	* tsmPurl.c (tsmParseUrl): Convert stat() to PR_GetFileInfo()
	* tsmPyramidInfo_local.c (tsmReadNameUrlIds): Remove unused var.
	* tsmTile_local.c (tsmCheckTileFormat_local,
	 tsmCheckTIFFFormat_local): Convert stat() to PR_GetFileInfo()
	* tsmTspec_local.c (tsmDoesTspecExist_local, tsmReadTspec_local):
	  Convert stat() to PR_GetFileInfo()
	* tsmUtils.c (tsmDateString): Remove unused vars.
	(tsmMakeDirIfNotExist): Convert stat() to PR_GetFileInfo() and
	  mkdir() to PR_MkDir().
	* tsmVRML.c (tsmCreateVtileProto, tsmSetNodeMFNode,
	 tsmAppendNodeMFString): Remove unused vars 
	(tsmWriteGeotile): Convert stat() to PR_GetFileInfo()
	
1999-10-05  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (AC_CHECK_HEADERS): Remove checks for
	  system-specific headers.
	(AC_CHECK_FUNCS): Remove checks for functions handled by NSPR.
	* configure: Regen
	* config.h.in: Regen.
	
	* tsmInternal.h: Remove all system-specific includes.
	* checksum.c (checksum): Use NSPR bit-sized int types.
	* logging.h: Include <prio.h>
	(struct _loginfo): Declare log_socket as PRFileDesc *
	(NetLogOpen): Returns PRFileDesc *
	(NetLogClose): Takes PRFileDesc * as arg.
	* logging.c: Remove system-specific includes, replacing with NSPR.
	(NetLoggerOpen): Redo with NSPR primitives.
	(NetLoggerGTWriteString): Use %lu for printing unsigned long.  Use
	  PR_htonl() and PR_Write().
	(NetLoggerWriteString): Use PR_htonl() and PR_Write().
	(NetLogOpen): Use NSPR I/O primitives and return PRFileDesc *
	(NetLogClose): Take PRFileDesc * arg
	(writen): Delete.  Replaced with calls to PR_Write().
	* tsmCreate_RAW.c (downsample_image_*, downsample_point_*,
	 downsample_gauss_*): Rename using NSPR bit-sized int types.
	(tsmDownSample_image): Properly call renamed downsample_* funcs.
	(tsmDownSample_inmemory_r, tsmDownSample_inmemory_levels,
	 tsmDownSample_inmemory): Remove unused vars.
	* tsmHost.c: Remove system-specific includes, replacing with NSPR.
	(getrealhost): Use NSPR for obtaining host info.
	(getfulllocalhostname): Use NSPR for obtaining system and host
	  info.

	* TsTileSpecOut.c (tspSaveCoordTspec): Remove %lg in fprintf()
	* tsmIntProts.h (tsmRemoveMapFromDatabase): Declare.
	(tsmRemoveModelFromDatabase): Declare.
	* tsmImage.c (gif_read): Make in_buffer an unsigned char *.
	* tsmTspec_dpss.c (tsmReadEmbeddedTspec_dpss): Use %ld for long
	  arg to sprintf().
	* tsmUtils.c (tsmElapsedTime): Reindent.
	* tsmVRML.c (tsmCreateTreeGraph): Remove %lg in sprintf()

1999-10-01  Lee Iverson  <leei@Canada.AI.SRI.COM>

	Merge from main branch.
	
	* tsmIntProts.h (tsmDownSample_inmemory): Declare.
	* tsmCreate_RAW.c (tsmDownSample_byblocks): New.  Internal
	  function to downsample a large rectangular buffer in
	  cache-blocked chunks.
	(tsmDownSample_inmemory_r): New.  Internal function to recursively
	  downsample a whole pyramid.  (not yet implementing the proper
	  edge effects for gaussian downsampling).
	(tsmDownSample_inmemory_levels): New.  Internal function for
	  downsampling an entire pyramid, reading in the level 0 data and
	  calling tsmDownSample_inmemory_r() to recursively write and
	  downsample all levels below.
	(tsmDownSample_inmemory): New.  Downsample an entire pyramid in
	  memory.  Takes a description of the process (image size and
	  format) and callbacks for reading from level 0 and writing to
	  all the levels.

Tue Sep 28 18:39:36 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmLocalDbase_web.c (tsmLoadPyramidDatabase_web): now we can
	just use the "localdisk" version as this also supports http urls.

	* tsmLocalDbase_local.c (tsmLoadPyramidDatabase_local1): update
 	comments and variables to reflect that we can now read from an
 	http url as well as a local disk file.

	* tsmPyramidInfo_local.c (tsmReadNameUrlIds): use tsmOpenStream to
	open PyramidUrls file which means that we can read http URLs
	too. Also, make sure we close the file when we are done.

	* tsmTspec_web.c (tsmReadTspecNEW_web): update function to read
	tspec file directly from a stream. Previously we saved the tspec
	file to /tmp and then read from local disk, but Windows machines
	don't generally have a /tmp directory.

	* TsTileSpecParse.c (tspReadTspecStream): [new func] new interface
	to reading a tspec file where you pass in an already opened file
	stream.
	(tspReadTspec): updated to use the new tspReadTspecStream func
	once the named file has been opened.

1999-09-27  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmIntProts.h (TSM_DOWNSAMPLE_*): Define flags for controlling
	  behaviour of tsmDownSample_image() and tsmDownSample_block().
	(tsmDownSample_image): Declare.
	(tsmDownSample_block): Declare.
	* tsmCreate_RAW.c (tsmDownSample_image): New.  Downsamples a
	  2D-indexable image using point-sampling or gaussian
	  convolution.
	(tsmDownSample_block): New.  Downsamples a 2D image as a memory block.

Fri Sep 24 14:25:10 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionInt.h: removed prev_tile_no field and replaced it
	with a tiles_written field - we don't care about the order any
	more, but we still need to keep track of how many tiles have been
	written to a TIFF file so that we can close it when all tiles have
	been output.

	* tsmTile_local.c (tsmWriteTIFF_local): removed code to enforce an
	ordering of tiles for writing to a TIFF. Can now write out tiles
	in any order. On the first tile write the TIFF file is opened,
	after tiles_x * tiles_y tiles have been written out the TIFF file
	is closed.

Thu Sep 23 21:55:34 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c (tsmCreateAllTiles): if we get a TIFF image, then
	convert it to a raw bitmap and then treat it like a .raw file.

	* tsmCreate_TIFF.c (tsmCreateRAWFromTIFF): [new func] converts a
	24-bit or 8-bit TIFF/GeoTIFF file to a raw RGB bitmap file.

1999-09-23  Lee Iverson  <leei@Canada.AI.SRI.COM>

	*  tsmCreate_RAW.c (tsmDownSample_generic_ps): Select whether
	  downsampling should be grid or inter-grid aligned based on
	  whether connection is to a DEM or an image.
	(tsmDownSample_generic_gaus): Why was this kernel asymmetric?

Mon Sep 20 13:53:41 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate_TIFF.c (tsmParseCreateParams_TIFF): parse a TIFF or
	GeoTIFF file for all its parameters. Extracts TIFF image
	dimensions, and if the file is also GeoTIFF then extracts the
	lower-left UTM/Latlong coord, resolution, and description.

Tue Sep 14 16:11:48 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* configure.in (LIBS): include the geotiff library in the compile
 	line.

	* tsmCreate.c (tsmFindImportFormat): support the use of ".tif" or
 	".tiff" filename extensions for indicating TIFF files.
	(tsmParseCreateParams): support querying the TIFF/GeoTIFF file to
 	find the image width/height etc and (optionally) the georeference
 	information.

	* tsmCreate.h: added a TSM_IMPORT_TIFF enumerated type to code for
	TIFF and GeoTIFF format images.

1999-09-08  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am: Remove CLASSIC_NSPR definition.
	* Makefile.in: Regen
	* configure: Regen based on change to ../acinclude.m4

1999-09-03  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* acconfig.h (PTHR_TRACE): Delete.
	* config.h.in: Regen
	* configure.in (AC_CHECK_HEADER(pthr/trace.h)): Delete.
	* configure: Regen.
	* tsmTrace.c (tsmError, tsmStatus): Remove non-pthr definitions.
	* tsmTrace.h.in: Remove conditionalization on pthr/trace.h (we'll
	  disable the definition of TRACING if <pthr/trace.h> not found.

1999-08-27  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure: Regen based on change to TV_NSPR in ../acinclude.m4

1999-08-20  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (CPPFLAGS): Search .. before $srcdir/..
	* configure: Regen
	
	* logging.c (NetLoggerGTWriteString): Change // comment to /*
	(NetLoggerWriteString): Ditto.
	* tsmUtils.c (tsmDateString): Change // comment to /*

1999-08-19  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Merge in changes from main branch.
	
	* configure.in (SRI_INT32_T): Remove since now using NSPR sized
	  ints.
	* configure: Regen.

1999-08-18  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmChecksum.c: Replace PRIntervalNow() with PR_IntervalNow().
	
	* tsmConnection.c (tsmDisconnect): Selectively destroy locks and
	  conds only if they've been initialized.

1999-07-30  Rick Brownrigg  <brownrig@erg.sri.com>

	* tsmCreate_RAW.c (tsmCreateLevelTiles_generic): replacing all system
	int16_t/int32_t types with NSPR equivalents.

1999-07-27  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnectionType): New.  Return the type of
	  connection.
	* tsmExtProtos.h (tsmConnectionType): Declare.
	
	* tsmConnectionParams.c (tsmCopyParams): Make sure that vrml_dir
	  and vrml_url fields don't get overwritten and freed.

1999-07-25  Rick Brownrigg  <brownrig@erg.sri.com>

	* tsmInternal.h: include <prinrval.h>,  <prtime.h> 
	* tsmConnectionInt.h: change type of timing variables req_begin and 
	req_end to NSPR types.
	* tsmExtProts.h:  change signatures of tsmElapsedTime() tsmDateString()
	* tsm.h: include <prinrval.h>, <prtime.h>
	* tsmTile.c:  use NSPR interval timing functions.
	* tsmChecksum.c: Ditto.
	* tsmUtils.c:  tsmElapsedTime() now uses NSPR types.  Rewrote 
	  tsmDateString() substantially.
	* logging.c:  uses NSPR date/time facilities.
	* TsTileSpecGen.c:  Ditto.

Fri Jul 23 18:18:05 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.h (TSM_PARAM_*): correctly define these as
	64-bit constants by using ((int64_t)1)<<n.

	* tsmConnectionParams.c (tsmCopyParams): previously we were only
	copying one tsmConnectionParams *pointer* worth of data into the
	new structure - i.e. 4 bytes!!! Now we copy the full byte-length
	of the structure.

1999-07-23  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmDatabase.c (tsmIsDatasetInDatabase): Constify database.
	(tsmIsDatasetInAGeoset): Constify database.  Prtoect against a
	  NULL oi_name or dem_name.
	
	* tsmConnection_dpss.c (tsmConnect_dpss): Call
	  tsmDisconnect_dpss() instead of tsmDisconnect() on failure.
	  tsmConnect() is responsible for cleaning itself up, and
	  tsmDisconnect_dpss() is responisible for cleaning up what we
	  allocate/initialize here.
	* tsmConnection.c (tsmConnect): Call tsmFreePurl() if
	  tsmConnect_foo() fails.

1999-07-22  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnectionParamsInt.h (tsmSetParamFlag): Cast to void, since
	  there is no meaningful return value.
	* tsmDatabase.c (tsmPrintFootprint): Replace all %lg format args
	  with %g (since %lg is non-standard and float/double arguments in
	  printf() get promoted to double anyway).
	(tsmPrintMap): Ditto.
	(tsmRemoveServerSetsFromDatabase): Remove unused var.
	(tsmAddPyramidGeoSet): Ditto.
	(tsmReadMap): Ditto.
	(tsmReadModel): Ditto.
	(tsmUpdateDatabaseFromServerCB): Ditto.
	
Thu Jul 22 14:07:50 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmRemoveServerSetsFromDatabase): don't remove
	redundant geosets from the database after removing old sets. This
	gets done one time after the server update.
	(tsmIsDatasetInAGeoset): [new func] checks for a named dataset in
	any geosets
	(tsmPairDanglingDatasets): [new func] tries to pair up any OIs and
	DEMs that are not already in geosets

Fri Jul 16 11:56:54 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmGetGeoSetFromURL): [new func] check if a
	dataset URL exists in the database, and if so then return the
	name of the geoset that links to that dataset.

	* tsmAllocTspecs.c (tsmFillSimpleTileSets): move the section that
	computes the wrap_lat/lon variables to *after* we have computed
	the valid pixel sizes.

Wed Jul 14 15:30:43 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.h (TV_TILES_AVAIL_RATIO): added a
	TV_TILES_AVAIL_RATIO event in order to log the ratio of tiles
	required for a frame to the tiles available at that time.

	* tsmConnection.c (tsmLog): add a DATASET=<name> event to all
	NetLogger events that TerraVision outputs. This may be useful to
	discriminate sources when logging to a host.

Mon Jul 12 14:25:00 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmRemoveMapFromDatabase): once we have removed a
	map entry from the database, go through all of the geoset entries
	and remove any references to that map also.
	(tsmRemoveModelFromDatabase): same for removing a model entry
	(tsmRemoveServerSetsFromDatabase): in addition to dataset entries,
	remove all map and model entries that are defined for the
	specified server.

Thu Jul  8 09:49:16 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection_web.c (tsmConnect_web): call tsmInitHttpLock when
	opening an http connection to make sure that the tile reads are
	thread safe.

	* tsmUrlToFile.c (tsmInitHttpLock): creates a global pthread mutex
	lock that is used to make calls to tsmOpenStreams thread-safe for
	accessing http datasets.

	* tsmDatabase.c (tsmUpdateDatabaseFromServerCB): added a
	TsmConnectionParams structure to the command line. This is used to
	pass in the TSM_PARAM_FULL_DPSS_READ setting. Also updated the 
	code from the old tsmGetPyramid call to the tsmConnect call and
	use the TsmConnectionParams structure here too.

	* tsmConnectionParams.c (tsmSetParam): support the new
	TSM_PARAM_FULL_DPSS_READ parameter
	(tsmPrintParams): support the TSM_PARAM_FULL_DPSS_READ param

	* tsmConnectionParams.h (TSM_PARAM_FULL_DPSS_READ): new connection
	parameter. This is used to select between a quick or a full DPSS
	server update.

Wed Jul  7 14:42:35 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmCompareDPSSDates): [new func] compares the
	DPSS loaded date string with the time_t for the last time we
	contacted the server. 
	(tsmAddDataSetToDatabase): updated the logic of testing for a
	duplicate instance in the database - test setids when looking at a
	DPSS instance.
	(tsmIsDatasetInDatabase): [new func] tests for the existence of a
	DPSS dataset instance in the database

Tue Jul  6 13:47:21 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmRemoveServerSetsFromDatabase): added a new
 	parameter to this function, keep_list. This is a NameUrlIds list
 	that contains a list of all datasets that should not be removed
 	from the database.
	(tsmUpdateDatabaseFromServerCB): instead of removing all entries
 	for a server at the start and then adding all of the new ones, we
 	build a list of all the entries that we found and then remove all
 	entries from the database for this server that do not appear in
 	the list.

	* TsTileSpecDecs.x: removed definitions for the GeoPyramidTspec
	and GeoPyramid structures

	* TsTileSpecUrls.c (tspReadGeoPyramidUrls): removed

	* TsTileSpecIn.c (tspReadGeoPyramid): removed
	(tspReadGeoPyramidTspec): removed

	* tsmLocalDbase.h: GeoPyramids structure removed

	* tsmPackTspecs.c (geoPyramidPack): removed
	(geoPyramidUnpack): removed
	(geoPyramidOffset): removed
	(geoPyramidUnoffset): removed

	* tsmTspecUtils.c (fprint_GeoPyramidTspec): removed
	(fprint_GeoPyramid): removed
	(check_GeoPyramidTspec_for_strings): removed
	(check_GeoPyramid_for_strings): removed

	* tsmPyramidInfo.h: GeoPyramidInfo and GeoPyramidInfos structures
 	removed

	* tsmPyramidInfo.c (tsmPrintGeoPyramidInfo): removed
	(tsmGetGeoPyramidInfo): removed
	(noDemOrOI): removed
	(tsmGetAllGeoPyramidInfos): removed

	* tsmUtils.c (tsmGeoPyramidNameToUrl): removed
	(tsmGeoPyramidNameToId): removed

	* tsmAllocTspecs.c (tsmMakeGeoPyramid): removed
	(tsmFreeGeoPyramid): removed

	* tsmEmulate.c (tsmGetGeoPyramid): not emulated anymore
	(tsmPutGeoPyramid): not emulated anymore

	* tsmEmulate_dpss.c (tsmGetGeoPyramid_dsm): removed
	(tsmLoadGeoPyramidToDPSS): removed

	* tsmEmulate_local.c (tsmGetGeoPyramid_local): removed
	(tsmGetGeoPyramid_local1): removed
	(tsmPutGeoPyramid_local): removed
	(tsmPutGeoPyramid_local1): removed

	* tsmEmulate_web.c (tsmGetGeoPyramid_web): removed

	* tsmLocalDbase.c (tsmLoadGeoPyramidDatabase): removed
	(tsmReLoadGeoPyramidDatabase): removed
	(tsmLoadGeoPyramidDatabaseIfExist): removed
	(tsmSaveGeoPyramidDatabase): removed

	* tsmLocalDbase_dpss.c (tsmLoadGeoPyramidDatabase_dsm): removed

	* tsmLocalDbase_web.c (tsmLoadGeoPyramidDatabase_web): removed

	* tsmLocalDbase.c (tsmAddToGeoPyramidDatabase): [removed]

	* logging.c (NetLoggerGTWriteString): incorporate Amit's bug fix
	for the netlogger API under Linux. There was a comparison between
	an htonl() int and a machine specific int in the LBL code.
	(NetLoggerWriteString): ditto 

Thu Jul  1 20:38:02 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmDescribeConnection): only output tspec URL
	for DPSS if it is defined.

	* tsmCreate.c (tsmCreateLevelTiles): support greyscale LAS images
	when creating a new OI tileset.
	
	* tsmCreate_LAS.c (tsmCreateLevelTiles_LASGREY): [new func]
	creates a tileset from a greyscale (1 component) LAS format image.

1999-06-21  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (CLASSIC_NSPR): Conditionally define in order to
	  bypass native threads.
	* Makefile.in: Regen.
	* configure: Regen.
	
	* tsm.h: Include <prtypes.h>
	* tsmConnection_dpss.c(tsmConnect_dpss): Call
	  issSetAllRcvStreamsTimeout(50000) so that a blocked DPSS
	  connection will check for interrupt every 50ms. 
	* tsmExtProts.h (tsmPause, tsmPause_ms, tsmPause_us): Declare.
	* tsmTile.c (tsmReadTile): Return status from tsmReadNextTile().
	(tsmGrabValidReadList): Exit condition loop on PR_CondWaitVar()
	  error return.  Capture return value before exiting locked
	  region.
	(tsmAllocReadNextTile): Process unsuccessful return for any return
	  value from tsmReadNextTile() other than TRUE.
	* tsmTile_dpss.c: Include <prerror.h>
	(tsmRequestThread_dpss): Use tsmPause().  Check for
	  PR_PENDING_INTERRUPT_ERROR and exit thread.
	(tsmReconnectThread_dpss): Use tsmPause(). Check for
	  PR_PENDING_INTERRUPT_ERROR and exit thread.
	(tsmReconnect_dpss): Loop, checking for ISS_LIB_TIMEOUT and
	  PR_PENDING_INTERRUPT_ERROR.  Reset error and exit with
	  TSM_NODATA on interrupt.
	
	* tsmUtils.c (tsmPause): New.  Pause for a given number of seconds
	  (with millisecond resolution).
	(tsmPause_ms): New. Pause for a given number of milliseconds.
	(tsmPause_us): New. Pause for a given number of microseconds.

1999-06-15  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* acconfig.h: Add NO_NSPR_10_SUPPORT
	* config.h.in: Regen.
	* configure: Regen.

	* tsmConnection_dpss.c (tsmDisconnect_dpss): Remove second arg to
	  PR_JoinThread().
	* tsmTile_dpss.c (tsmRequestThread_dpss): Return void.
	(tsmSendRequestListToDPSS): Add missing open brace.
	(tsmReconnectThread_dpss): Return void.
	
Wed Jun  9 10:35:10 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection_dpss.c (tsmConnect_dpss): moved the code that sets
	the blocking variable into the protocol specific routine because
	we need to set this *before* we try to load a tspec file (as this
	could be on the DPSS for a DPSS set). Also, change the default
	reads to be blocking, not non-blocking.

	* tsmConnection_local.c (tsmConnect_local): ditto

	* tsmConnection_web.c (tsmConnect_web): ditto

	* tsmConnection.c (tsmConnect): removed the code for setting the
	read blocking variable. This is now done in the protocol specific
	connection routines.

Wed Jun  2 00:08:43 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.h (TV_REQUEST_SENT): add a new TerraVision
 	NetLogger event: TV_REQUEST_SENT.

	* tsmTile_dpss.c (tsmSendRequestListToDPSS): output a
	TV_REQUEST_SENT NetLogger event every time we send a request list
	to the DPSS, with a record of the number of tiles sent. 

	* tsmTile.c (tsmTileReqEnd): output a TV_REQUEST_SENT NetLogger
	event every time we call tsmTileReqEnd for local/http connections

	* tsmCreate_RAW.c (tsmCreateLevelTiles_generic): use int32_t and
	int16_t to ensure we have 4-byte and 2-byte datatypes, also fixed
	the check for sea_level values and correctly set them to 0m.

Tue Jun  1 15:01:20 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmCreateLevelTiles_generic): added an extra
	parameter - sea_level. Any DEM values that match this value are
	set to 0.0.

	* tsmCreate.h: moved the sea_level field from the TsmTspecParams
	structure to the TsmTileParams structure as it is now used in
	order to create the tiles of a pyramid.

	* tsmCreate_LAS.c (tsmCreateLevelTilesOld_LASELEV): removed -
	obsolete function
	(pad_right): removed - obsolete function
	(pad_top): removed - obsolete function
	(full_tile): removed - obsolete function
	(get_ibuf): removed - obsolete function

	* tsmVRMLUtils.c (tsmGetCoords): removed the bit that checks for
 	an elevation of sea_level and sets it to zero when outputing a
 	VRML pyramid. This is now done at TerraVision dataset creation
 	time.

	* TsTileSpecParse.c (tspParseTspecLine): remove sea_level field
 	parsing

	* TsTileSpecDecs.x: remove sea_level field from Pyramid

	* TsTileSpecOut.c (tspSavePixelTspec_fp): removed sea_level output

	* tsmTspec_web.c (tsmReadTspecNEW_web): remove the check that
	tests if a file buffer returned from an http request is a valid
	tspec file. This would fail if there was any line it didn't
	recognise in the tspec, e.g. if a new field was added, and anyway
	we don't need to do this check anymore because the tsmUrlToFile
	routine will handle HTTP errors correctly.

Sun May 30 11:04:38 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecUrls.c (tspSaveGeoPyramidUrls): removed

	* TsTileSpecOut.c (tspSaveOldPyramid): removed
	(tspSaveSimpleTileSet): removed
	(tspSaveIdentityTspec): removed
	(tspSaveTileTspec): removed
	(tspSaveProjectionTspec): removed
	(tspSaveImageTransformationTspec): removed
	(tspSaveCoordTspec): removed
	(tspSaveSimpleTspec): removed
	(tspSavePyramidTspec): removed
	(tspSavePyramids): removed
	(tspSaveGeoPyramid): removed
	(tspSaveGeoPyramidTspec): removed

	* tsmConnectionParams.c (tsmSetParam): remove the code to set the
 	TSM_PARAMS_CLIP value

	* tsmArg.c (tsmParseVRMLArgs): removed the -zclip VRML parameter
	that was used to get a TSM_PARAMS_CLIP value. This is now done
	with the sea-level value in the DEM tspec file.

	* tsmVRMLUtils.c (tsmGetCoords): use the sea_level field of the
	DEM pyramid in order to work out the height value that represents
	sea level. This replaces the previous way of using the
	TSM_PARAMS_CLIP parameter.

	* tsmCreate.c (tsmInitTspecParams): initialise the sea_level field
	of TsmTspecParams to zero.
	(tsmCreateTspec): set the tspec sea_level field from the value in
	the TsmTspecParams structure when creating a new tspec file.

	* tsmCreate.h: added a sea_level field to TsmTspecParams

Fri May 28 15:08:34 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* Makefile.am (EXTRA_LIBRARIES): removed all of the VRML
	generation tools (vtile, image, tree) from the directory and
	removed references to these in the Makefile. These 3 programs now
	join the rest of the tsmUtils, which are under CVS control as a
	separate repository: "cvs -d /homedir/reddy/CVS checkout tsmUtils"

	* TsTileSpecOut.c (tspSaveTspec): do not write out the obsoleted
 	map fields to tspec files.
	(tspSavePixelTspec_fp): output the sea-level field to the tspec
	file (for DEM datasets only).
	(tspSaveMapTspec_fp): deleted

	* tsmTile_dpss.c (tsmRequestThread_dpss): we need to set the
 	cancel type to asynchronous while in the select call because this
 	function is not specified as a cancellation point by POSIX. This
	caused tsmDisconnect to hang under Solaris waiting for the DPSS
	request thread to cancel when it never would.

	* TsTileSpecParse.c (tspParseTspecLine): support parsing the new
	sea-value tspec field.
	(tspParseTspecLine): remove the routines for parsing the map tspec
	fields - these are obsoleted now that maps and models are
	represented as datasets in the Pyramids directory and pulled in by
	the Database reading routines.

	* TsTileSpecDecs.x: add a new Pyramid field to store the DEM value
 	that represents sea level

Thu May 27 16:23:45 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_dpss.c: change #include <dsm/dsm.h> to <dpss/dsm.h> as
	this is the new location for these include files in DPSS 2.5.2.

	* tsmConnectionInt.h: ditto

	* tsmConnection_dpss.c: ditto

	* tsmEmulateInt.h: ditto

1999-05-28  Rick Brownrigg  <brownrig@erg.sri.com>

	*  Modifications to the following files to replace Posix threads
	*  with NSPR threads:
	*    tsmInternal.h
	*    tsmConnectionInt.h
	*    tsmConnection.c
	*    tsmConnect_dpss.c
	*    tsmTile.c
	*    tsmTile_dpss.c

1999-05-24  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (TV_NSPR): Reference.
	* configure: Regen.

	* acconfig.h (PTHR_TRACE): Add #undef template.
	* config.h.in: Regen.
	* tsmTrace.c: Use PTHR_TRACE instead of HAVE_PTHR_TRACE_H

	* image.c (IMAGE_VERSION): Renamed from VERSION.
	(usage, main): Use IMAGE_VERSION.
	* tree.c (TREE_VERSION): Renamed from VERSION.
	(usage, main): Use TREE_VERSION.
	* vtile.c (VTILE_VERSION): Renamed from VERSION.
	(usage, main): Use VTILE_VERSION.

Thu May 20 11:02:06 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.h: include <sys/types.h> for the int64_t
 	definition, not config.h - tsmConnectionParams.h is an exported
 	header and so it cannot have any dependency upon an internal
 	header.

1999-05-20  Lee Iverson  <leei@canoe.ai.sri.com>

	* configure.in (AC_CANONICAL_SYSTEM): Add, so we can check for use
	  of -pthread and _REENTRANT define.
	(AM_CONFIG_HEADER): Add tsmTrace.h
	(AC_CHECK_HEADERS(pthr/trace.h)): Define PTHR_TRACE if yes.
	(AC_OUPUT): Remove tsmTrace.h.
	* acconfig.h (_REENTRANT): Add.
	(_THREAD_SAFE): Add.
	* tsmTrace.h.in: Add #undef PTHR_TRACE so we can use tsmTrace.h as
	  a config file, and avoid extraneous recompiles.
	
	* tsmConnection.c (tsmBeginLogging): Compare log_socket with 0,
	  not NULL.
	* tsmDatabase.c (tsmPrintDatabase): Pass 0 arg to tsmDateString(),
	  not NULL.
	* tsmDatabase_local.c (tsmParseDatabaseLine): Compare int return
	  values with 0, not NULL.
	* tsmEmulate_dpss.c (tsmLoadGeoPyramidToDPSS): Return 0, not NULL.
	* tsmUtils.c (tsmDateString): Compare against 0, not NULL.

Thu May 13 16:40:23 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection_dpss.c (tsmConnect_dpss): added a call to
	dpssPrintServers to tell us which servers we are connected to.
        Requires latest verson of DPSS libs (see ~reddy/magic/DPSS.2.5.2)
	
Wed Apr 14 11:18:51 1999  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmConnectionParams.c (tsmSetParam): added 'include_vtiles'
 	parameter, not yet implemented to put all the vtile data directly
 	in the tree file.

	* tsmConnectionParams.h (TSM_PARAM_INCLUDE_VTILES): had to change
 	way flags are created using hex instead of << left shift since
 	left shift doesn't work over 31 bits

Tue Apr  6 15:31:45 1999  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmVRML.c (tsmCreateInline): refer to a tree instead of vtile in
 	LOD_TREE_TYPE
	(tsmMakeTreeRedirectFilename): redirect to trees if using LOD tree
 	types
	(tsmCreateAnchor): make an inline instead of an anchor if in an
 	LOD tree type

	* configure.in (CPPFLAGS): moved TV_TSMCONFIG to add -ldpss
 	library before -lpthread library

Wed May 12 15:05:41 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmUpdateDatabaseFromServerCB): [new func] this
	is essentially the old tsmUpdateDatabaseFromServer() function but
	you can pass in a callback function (and closure) that gets
	invoked every time we start to look at a new dataset. This lets us
	give progress reports in the main application.
	(tsmUpdateDatabaseFromServer): this is now just a wrapper to the
	above function, with the callback params set to NULL.

1999-05-12  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile_dpss.c (tsmStartRequestThread_dpss): Add stub for case
	  when !DPSS.

Tue May 11 16:04:07 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecParse.c (tspReadTspec): add a sanity check to see if
	any tspec tokens were actually read in from a tspec file. If we
	opened the file and no tokens were found (e.g. not a tspec file or
	an I/O error occurred), then we return a result of FALSE.

1999-05-07  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmDatabase.c (tsmAddDataSetToDatabase, 
	tsmUpdateDatabaseFromServer): Add funcName as second arg to
	  tracing commands. 
	
	* tsmMem.c (tsmMemManagerFree): Make arg type const so that it can
	  free const ptrs without warning.
	* tsmExtProts.h (tsmMemManagerFree): Declare arg const.

	* tsmConnectionInt.h (struct TsmConnectionDpss): Add
	  requestThreadRunning field which is TRUE iff the request thread
	  is active. 
	* tsmConnection_dpss.c (tsmConnect_dpss): Don't start request
	  thread here.  Initialize requestThreadRunning to FALSE.
	(tsmDisconnect_dpss): If requestThreadRunning then cancel/join
	  requestThread. 
	* tsmTile.c (tsmTileReqEnd): Call tsmStartRequestThread_dpss() for
	  DPSS case.
	* tsmTile_dpss.c (tsmRequestThread_dpss): Change to static.  Set
	  requestThreadRunning field.  Start by sending current request
	  list, since thread isn't started until requests are registered.
	(tsmStartRequestThread_dpss): New.  Start the thread if not
	  already running.
	* tsmIntProts.h (tsmStartRequestThread_dpss): Declare.
	
Wed May  5 09:57:47 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmSet): according to the default argument
 	promotions, float variables should be accessed as doubles with
 	va_arg, not as a float! I was doing va_arg( args, float ) to
 	access the TSM_REQUEST_TIMEOUT value.

Tue May  4 10:23:50 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile.c (tsmTileReqAdd): don't log tile requests here if the
 	connection is a DPSS set (otherwise log request as normal).

	* tsmTile_dpss.c (tsmSendRequestListToDPSS): log tile requests
 	here for DPSS connections - i.e. when we actually request the
 	blocks

	* tsmConnection_dpss.c (tsmEndLogging_dpss): only do
 	issStopRcvLogging if we were logging a read connection, and only
 	do issStopSendLogging if we were logging a write connection.

	* tsmConnection.c (tsmSet): added code to support the changing of
 	the DPSS request thread timeout using the TSM_REQUEST_TIMEOUT
 	token.
	(tsmGet): return the current setting of TSM_REQUEST_TIMEOUT (or
	0.0 if dataset is not a DPSS set).

	* tsmTile_dpss.c (tsmSendRequestListToDPSS): use the current read
	list, not the request list (i.e. we want to use the last complete
	request list, not one that is currently being built).

	* tsmConnection_dpss.c (tsmConnect_dpss): if we have a read DPSS
 	connection, then fire off a new thread that calls
 	tsmRequestThread_dpss. This is the thread that actually performs
 	the DPSS tile requests at user-defined intervals

	* tsmTile.c (tsmTileReqEnd): don't request DPSS tiles here anymore

Mon May  3 17:16:15 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.h: change the definition of TsmParamCode to
 	be a long long (64-bit) - otherwise when we set the 31st bit
	(i.e. TSM_PARAM_REQUEST_CHECK) we get a negative number, which is
 	not good and caused us to not be able to access named DPSS sets.

	* tsmTile_dpss.c (tsmRequestThread_dpss): [new func] this is the
	requester thread that goes into an infinite loop of sleeping for a
	bit, then requesting the current tile list from the DPSS. 

	* tsmTile.c (tsmTileReqBegin): put mutex locking around the bits
	that modify the request list structures
	(tsmTileReqAdd): ditto

Mon Apr 26 16:23:50 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_dpss.c (tsmReconnectThread_dpss): continually calls
 	issReReady until it returns ISS_OK, with a 5 second timeout
 	between attempts.
	(tsmReconnect_dpss): spawns a new thread that calls the above
 	tsmReconnectThread_dpss function in order to try and reconnect to
 	DPSS server that has given us a SERVER_DIED message
	(tsmReadNextTile_dpss): check for a SERVER_DIED return code from
 	issReadBlocks. If we get this, then call tsmReconnect_dpss to try
	and reconnect to the server

	* tsmConnection_dpss.c (tsmConnect_dpss): initialise the DPSS
	reconnect mutex lock
	(tsmDisconnect_dpss): do a pthread_kill on the reconnect thread if
	it is currently running, and then destroy the mutex lock

	* tsmConnectionInt.h: added new fields to the TsmConnectionDpss
 	data structure: a pthread_t and a pthread_mutex_t. These are for
 	controlling the DPSS reconnect thread.

Tue Apr 20 09:23:44 1999    <reddy@MAGNOLIA>

	* tsmVRML.c (tsmGetMetadataNode): changed function so that it
 	outputs trace messages on error, but not a tsmError. This way it
 	can fail silently and the calling function can report the error.

Mon Apr 19 10:42:44 1999    <reddy@MAGNOLIA>

	* tsmDatabase_local.c (tsmParseDatabaseLine): use the new
 	tspExtractAllStrdup function to parse a string from the database
 	file - this will now make sure that we strip all spaces and quotes
 	from the start/end of the string.

	* TsTileSpecParse.c (tspStripQuotes): [new func] strips all space
 	and quote characters from the start and end of a string.
	(tspExtractAllStrdup): [new func] as a complement to the
 	tspExtractNthStrdup functions, this function will just do an
 	strdup on a string and then call tspStripQuotes to strip all of
 	the leading/trailing quotes and spaces.

Thu Apr 15 09:42:44 1999    <reddy@MAGNOLIA>

	* tsmImage.c (tsmReadImage): read the image's magic header to work
 	out the image format, then close and reopen the file. This is less
 	efficient but seems to be more stable than trying to do a
 	rewind/dup, particularly given that the handle could be for a file
 	coming over http.

1999-04-19  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* TsTileSpecParse.c (tspReadLineFromTspec): Correct logic for
	  detecting empty lines to avoid buffer overruns.

1999-04-14  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmExtProts.h (tsmGetPyramidInfos): Constiify decl.
	(tsmSetIdToPyramidTspecUrl): Ditto.
	(tsmPyramidUrlFromSetId): Ditto.
	(tsmPyramidUrlFromString): Ditto.
	(tsmGeoPyramidNameToUrl): Ditto.
	(tsmPyramidNameToUrl): Ditto.
	(tsmGeoPyramidNameToId): Ditto.
	(tsmPyramidNameToId): Ditto.
	* tsmIntProts.h (tsmNameToUrl): Update decl to return (char const *).
	* tsmLocalDbase.c (tsmAddToPyramidDatabase): Constification of
	  various strings.
	(tsmAddToGeoPyramidDatabase): Ditto.
	* tsmLocalDbase.h (struct TsmLocalDbase): Constification of names
	  and urls fields.
	* tsmPyramidInfo.c (tsmGetPyramidInfos): Constification of
	  pyramidNames arg.
	(tsmGetGeoPyramidInfo): Pass pyramidNames arg to
	  tsmGetPyramidInfos as (char const **).
	* tsmPyramidInfo_dpss.c (tsmGetPyramidInfo_dsm): Constification of
	  various strings.
	* tsmPyramidInfo_local.c (tsmWriteNameUrlIds): Constification of
	  various strings.
	* tsmUtils.c (tsmParseIdentifier): Constification of various strings.
	(tsmMakeNameUrlIds): Ditto.
	(tsmFreeNameUrlIds): Ditto.
	(tsmNameToUrl): Returns char const *
	(tsmSetIdToPyramidTspecUrl): Constification of hostName arg.
	(tsmPyramidUrlFromSetId): Constification of hostName and uri args.
	(tsmPyramidUrlFromString): Constification of hostName, uri and
	  string args.
	(tsmGeoPyramidNameToUrl): Constification of geoPyramidName arg.
	(tsmPyramidNameToUrl): Constification of pyramidName arg.
	(tsmGeoPyramidNameToId): Constification of geoPyramidName arg.
	(tsmPyramidNameToId): Constification of pyramidName arg.

Sun Apr 11 15:32:06 1999  Martin Reddy  <reddy@MAGNOLIA>

	* tsmDatabase.c (tsmReadModel): now we actually try to open a VRML
 	feature file when we are doing a re-read server action. We look
 	for the METADATA node in this file and extract the values of all
 	supported fields for the database. Currently, we just get the
 	"name" value from the Metadata's info exposedField and insert this
 	into the title field of the TsmModel.

	* tsmDatabase_local.c (tsmParseDatabaseLine): parse the title field 

	* tsmDatabase.c (tsmFreeModel): free the new title field
	(tsmPrintModel): output the title field string
	(tsmReadModel): set default title field from the name field
	(tsmAddModelToDatabase): copy the title field 

	* tsmDatabase.h: added a title field in order to give a more
 	user-friendly and descriptive title to a feature file

	* tsmVRML.c (tsmGetMetadataNode): [new func] takes a VRML scene
 	graph and returns the MFString for the info exposedField of the
 	node that has been DEF-named as METADATA.
	(tsmParseMetadataInfo): [new func] parses the info field of a
 	METADATA node looking for a specified token - returns the value
 	part of that token if found.

Thu Apr 08 11:29:16 1999  Martin Reddy  <reddy@MAGNOLIA>

	* tsmPyramidInfo_local.c (tsmReadNameUrlIds): changed the way we
 	read a PyramidUrls file. We no longer need to specify a number at
 	the top of the file to dictate the number of entries. Now we read
 	each line and add it to the list dynamically. We ignore lines that
 	do not have quotes, or begin with '#'. Therefore, we can still
 	read older PyramidUrls files without modification.
 
	* tsmUtils.c (tsmMakeNameUrlIds): allow the creation of NameUrlIds
 	structures with 0 entries (all arrays are NULL).

Sat Mar 27 19:55:23 1999  Martin Reddy  <reddy@MAGNOLIA>

	* tsmConnection.c (tsmBeginLogging): the LBNL NetLogger function
 	NetLoggerOpen returns a valid (non-NULL) pointer even if the log
 	file/socket was not opened!!! We need to explicitly check the
 	log_fp and log_socket fields - if both are NULL, then the log file
 	could not be opened so we do our own clean up and return a FALSE
 	result.

Mon Mar 22 17:24:14 1999  Martin Reddy  <reddy@MAGNOLIA>

	* TsTileSpecParse.c (tspReadLineFromTspec): strip CR symbol as
 	well as LF symbol from the end of a line. This now means that
 	tspec files and database files can be edited on a PC.
 
	* tsmDatabase.c (tsmGetGeoSet): [new func] finds a named geoset
 	entry in a TsmDatabase

Sun Mar 21 15:06:05 1999  Martin Reddy  <reddy@MAGNOLIA>

	* tsmJPEG.c: include jpeglib.h as <jpeg/jpeglib.h> and not
 	"jpeg/jpeglib.h"

	* tsmVRML.c: include vrml2 headers as <vrml2/c_nodes.h> and
 	<vrml2/vrml2.h>, not "vrml2/c_nodes.h" and "vrml2/vrml2.h"
 
	* tsmInternal.h: include vrml2.h as <vrml2/vrml2.h> not
 	"vrml2/vrml2/h"

1999-03-19  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.in: Regenerate
	* aclocal.m4: Regenerate.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	
	* tsmConnectionInt.h: Move DPSS includes from tsmInternal.h to here.
	* tsmInternal.h; Remove DPSS includes.

	* tsmConnection_dpss.c: Redo DPSS includes for DPSS 2.5.2.
	* tsmEmulateInt.h: Ditto.
	* tsmPyramidInfo_dpss.c: Ditto.
	* tsmTile_dpss.c: Ditto.

	* tsmImage.c (tsmReadImage): Cast header back to (char*) for
	  strncmp() calls.
	
1999-03-17  Lee Iverson  <leei@canoe.ai.sri.com>

	* tsmTile_local.c (tsmReadTILE_local): Can't check ferror() for a
	  closed fp, so moved fclose() to just before return.

1999-03-16  Lee Iverson  <leei@canoe.ai.sri.com>

	* acconfig.h: Add _config_h_ guards.
	  Add alloca() definition.
	* configure.in (AM_MAINTAINER_MODE): Add.
	(AM_PROG_INSTALL): <= AC_PROG_INSTALL
	* tsm.h (pow2i): Renamed from pow2 to avoid math.h clash.
	* tsmAllocTspecs.c (tsmFillSimpleTileSets): Use pow2i() instead of
	  pow2(). 
	* tsmImage.c (tsmSaveImageGIF): Return FALSE, not NULL.
	(gif_read): Use fileno() for FILE->fdesc.
	(tsmReadImage): Make header[] unsigned.
	* tsmInternal.h: Remove alloca() specialization.

Thu Mar 11 10:22:55 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmImage.c (tsmSaveImageGIF): takes an RGB image and writes it
	out to a file using the GNU ungif library. N.B. this outputs
	uncompressed GIF so we don't need to worry about licensing issues
	with the LZW compression scheme.
	(rgb_image_to_gif_file): this old function is now just a wrapper
	to the new tsmSaveImageGIF, instead of using the hacked XV routines.

	* rgb_image_to_gif.c: [removed] (use new ungif lib writer)

	* xv.h: [removed] (use new ungif lib write)

	* xv24to8.h: [removed] (use new ungif lib writer)

	* gd.h: [removed] (use new ungif lib writer)

	* gd.c: [removed] (use new ungif lib writer)

	* gdfontl.h: [removed] (use new ungif lib writer)

	* gdfontl.c: [removed] (use new ungif lib writer)

	* gdfonts.h: [removed] (use new ungif lib writer)

	* gdfonts.c: [removed] (use new ungif lib writer)

	* tsmInternal.h: remove cruft required for xv24to8.c

Wed Mar 10 14:18:56 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmImage.c (tsmWriteImage): [new func] writes out an Image_t
	structure to a number of possible image formats. Currently just
	support PPM.
	(tsmFreeImage): [new func] frees an Image_t structure

Tue Mar  9 09:55:42 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmImage.c (tsmReadImage): [new func] this function will read a
	number of supported image formats from a localdisk or http
	url. Currently, we support PPM, GIF, and JPEG/JFIF format images.
	
	* configure.in: compile and link with the ungif library includes
 	and library.

	* tsm.h: change include from "tsmTrace.h" to <tsm/tsmTrace.h> so
 	that this file gets pulled in if you have configured separate
 	build and source directories (tsmTrace is in the build dir).

	* configure.in: also add -I.. to the include line so that we can
 	pull in the automatically generated tsmTrace.h file that sits in
 	the build directory and not the source directory (these are only
 	different if you have configured them to be so).

Mon Mar  8 09:04:50 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecDecs.x: removed obsolete structures:
 	MultiImageTileSet, TerraFormRectangularAreaTspec,
 	TerraFormRectangularAreaTileSet, RectangularORGATileSet,
 	RectangularORGATspec

	* tsmTspecUtils.c: removed all of the routines that worked on all
 	those obsolete structures (RectangularORGA, etc.)

	* TsTileSpecOut.c: ditto

	* TsTileSpecIn.c: ditto

	* tsmDatabase.c (tsmAddMapToDatabase): [new func] adds a TsmMap
	entry to the database if it does not already exist
	(tsmAddMapsToGeoSets): goes through the list of maps and
	associates them with geosets based upon the base name of the map
	and OI.
	(tsmReadMap): reads a map.info file in the specified map directory
	in order to find the filename and (u,v) coordinates
	(tsmReadModel): makes a new TsmModel structure and fills in the
	required fields. Currently we don't try to parse the METADATA node
	of the VRML site model, but if wan't to store more info about the
	site model in the database then we will need to do this.
	(tsmAddModelToDatabase): [new func] adds a new TsmModel entry to
	the database if it does not already exist
	(tsmAddModelsToGeoSets): goes through the list of models and
	associates them with geosets, as with tsmAddMapsToGeoSets

	* tsmPurl.c (tsmIsUrlValid): [new func] simply utility function
	that uses tsmParseUrl to check if a string is a valid URL.

	* tsmDatabase_local.c (tsmNewMapLocation): [new func] adds a new
	Purl to the array of location Purls in a TsmMap structure

	* tsmDatabase.c (tsmRemoveMapFromDatabase): [new func] removes the
	named map from the database
	(tsmRemoveModelFromDatabase): ditto for a named model
	(tsmGetMap): [new func] returns a named TsmMap from the database
	(tsmGetModel): [new func] returns a named TsmModel from database

Sun Mar  7 11:53:04 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase_local.c (tsmNewModelLocation): [new func] add a new
	Purl to the array of location Purls in a TsmModel structure

Sat Mar  6 12:54:33 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase_local.c (tsmNewDatabaseMap): [new func] grow the map
	array in the database structure by one entry
	(tsmNewDatabaseModel): [new func] ditto for the model array

Fri Mar  5 16:10:52 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmPrintMap): [new func] print a TsmMap struct
	(tsmPrintModel): [new func] print a TsmModel struct
	(tsmFreeMap): [new func] deallocates a TsmMap struct
	(tsmFreeModel): [new func] deallocates a TsmModel struct
	(tsmFreeDatabase): free the map/model structures as well
	(tsmPrintDatabase): print the map/model structures as well
	(tsmFreeGeoSetContents): free the map/model name entries

	* tsmDatabase.h: added a TsmMap data structure to hold information
 	about a single map instance, and a TsmModel structure to hold
 	information about a single model. Added support for an array of
 	both of these in the TsmGeoSet structure.

Tue Feb 23 08:23:31 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionInt.h (ConnectionCommonFields): added fields to
	store the start/end time of a request list and the number of
	different types of tile requests in the list

	* tsmTile.c (tsmTileReqBegin): initialise request list stats
 	(tsmTileReqAdd): increment the log count for the priority of tile
	(tsmTileReqEnd): record the time taken to send the request list
	(tsmTileReqInfo): [new func] returns the information about the
	last request list that was sent to the server.

1999-02-26  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in: Explicitly include and link in ../jpeg since no
	  longer exposed by TV_LIBTIFF.
	* Regenerate configure.

1999-02-24  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (CPPFLAGS): Add a single -I$srcdir/.. at start.
	  Remove creation of symbolic link to tsm (non-portable).
	  Directory must be named tsm.

1999-02-22  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in: Modify includes for pthrutil library.
	  Make symbolic link to tsm at configure time.
	* Makefile.am: Remove build of symbolic link to tsm.

Fri Feb 05 18:19:28 1999  Martin Reddy  <reddy@Magnolia.AI.SRI.COM>

	* tsmUtils.c (tsmSetWebBrowser): [new func] lets you specify the
 	command that is used to run your web browser. By default, this is
 	"netscape".
	(tsmShowUrl): if we are running under Windows, or if the web
 	browser to use is not netscape, then don't bother with all that
 	fancy "netscape -remote" shell script stuff -just run the program.
 
Thu Feb  4 09:33:49 1999  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmInternal.h: include tiffio.h here. This header is only
	included by internal tsmApi code and is not visible to clients
	that use the tsmApi library.

	* TsTileSpecDecs.x: removed tiffio.h include from here. It was
	previously needed when we embedded TIFF file handles in the
	Pyramid structure, but now that is nice and clean in the
	TsmConnection structure so we don't need to include tiffio.h here.

Fri Dec 11 12:57:25 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmAppendVRML): takes a piece of VRML code and
 	appends it to a string, creating the string if it is NULL. This
 	correctly deals with placing the VRML header at the top and
 	nowhere else. We can only do one vsgParseString for a VRML file so
 	this gives us a way to build that string from multiple sources
 	before passing to vsgParseString.
	(tsmCreateLODStructure): don't need to include the Cache node in
 	the old-style tree files - this is only required for QuadLOD.
	(tsmCreateQuadLODStructure): If we are creating geotiles then we
 	embed these as a node in the QuadLOD structure. Also updated code
 	to use tsmAppendVRML to select which EXTERNPROTOs to put in the
 	tree files.
	(tsmMakeGeoTile): [new func] creates an instance of a GeoTile
	node. This can then be inserted into the QuadLOD parentNode field

Wed Dec  9 20:49:46 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecOut.c (tspSaveTspec): save out the map fields when
	writing a tspec file

	* tsmAllocTspecs.c (tsmFreeTspec): free the mapName string (if
	set) when freeing a Pyramid structure
	(tsmCopyPyramid): copy the mapName string (if set)

	* TsTileSpecParse.c (tspParseTspecLine): added routines to parse
 	the new map fields from a tspec file.

	* TsTileSpecDecs.x: added fields to the Pyramid structure to hold
	a map name and its min/max (u,v) coordinates, i.e. we currently
	assume that the map image is in the same coordinate system as the
	pyramid data.

Tue Dec  8 11:24:05 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmImageUtils.c (tsmTileToRgb): remove the check for the old
	tileTspec->storageFormat field - this went away years ago!

Mon Dec  7 17:26:05 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_web.c (tsmReadNextTile_web): enable reading of tiles
	from an http server. This is done by creating a new url which
	points to a /cgi-bin/get_http_tile CGI script on the web
	server. We can now read TIFF format files over the web!
	(tsmCheckTileFormat_web): [new func] check whether an http dataset
	is in .tile or .tiff format
	(tsmCheckTIFFFormat_web): [new func] check whether an http dataset
	is a raw, jpeg, or lzw TIFF file.

	* tsmConnection_web.c (tsmConnect_web): allow connections to http
	datasets and do all of the standard checks for tile/image format,
	etc. 

	* tsmUrlToFile.c (tsmSkipHttpHeader): make the http file not found
	test more robust - previously only worked for http 1.0. Also,
	check for Forbidden (403) as well as File Not Found (404).

Mon Nov 23 17:30:33 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c (tsmCopyParams): [new func] performs a
	deep copy on the specified TsmConnectionParams structure.

Thu Nov 19 10:29:44 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmInternal.h: only include net/route.h when on an SGI. This
	doesn't seem to be required anyway - can probably be removed
	altogether.

	* tsmLAS_IO.h: [renamed from ezio.h]. Removed unused vars/defs,
	renamed defines like BYTE to TSM_EZ_BYTE to avoid conflict with
	defines on the PC. (N.B. this will require a rm -rf .deps and
	reconfigure in the tsmApi dir)

	* tsmLAS_IO.c: [renamed from ezio.c]. Integrated more tightly with
	tsmApi way of doing things: function names, return codes, etc. 

1998-11-13  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile_dpss.c (tsmReadNextTile_dpss): Correct printf format string.

	* tsmTile.c (tsmTileReqAdd): Undo the TSMTRINC() indentation on
	  eqhash_get() != 0 return.

	* acconfig.h: Remove #undef HAVE_JPEG_CREATE_COMPRESS.
	* configure.in: Remove AC_DEFINE(HAVE_JPEG_CREATE_COMPRESS).
	* tsmJPEG.c: Disable HAVE_JPEG_CREATE_COMPRESS test.

Fri Nov 13 09:54:13 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* All: added "Exhibit A" portion of tsmApi license agreement to
	all source code files.

	* LICENSE: [new file] add a text version of the tsmApi license

	* tsmVRML.c (tsmWriteAllImages): we made a copy of the tspec
	structure, but tsmSetTspecField does this for us already, so we
	had an extra tspec structure hanging around that was never
	deallocated. Fixed now.
	(tsmWriteAllImages): we didn't do a tsmDisconnect when we had
	finished with the temporary write connection!

Thu Nov 12 10:47:52 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmWriteAllImages): support the start_level and
	end_level settings in the params structure so that we can create
	partial JPEG pyramids instead of only the full pyramid.

	* tsmVRMLUtils.c (tsmVRMLCacheFree): we weren't free the memory
	for the DEM tiles that we read in! Geeeez.
	(tsmVRMLCacheAdd): ditto

	* tsmVRML.c (tsmWriteAllTrees): validate the user-specified start
	and end levels to ensure that they are in the range of valid level
	numbers for the dataset.
	(tsmWriteAllVtiles): ditto

	* tsmConnectionParams.c (tsmFreeParams): free the vrml_dir,
	vrml_url strings if they have been defined.
	(tsmSetParam): free the previous TSM_PARM_VRML_DIR or
	TSM_PARAM_VRML_URL string (if exist) before setting new one.

	* tree.c (main):  print an SRI copyright message when run

	* vtile.c (main): print an SRI copyright message when run

	* image.c (main):  print an SRI copyright message when run

Tue Nov  3 17:38:41 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c: updated GlobalState.wrl and Cache.wrl URLs to reflect
	a new directory organisation: GlobalState.wrl now lives in the
	GeoTile directory and Cache.wrl now lives in the QuadLOD
	directory. See /homedir/magic/VRMLSets/protos/. Also added a few
	more error checks around VRML pointers, just in case.

Fri Oct 30 09:01:37 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmCreateTreeGraph): put the GlobalState and Cache
	nodes into the Anchor tree files if we are also creating GeoTiles.
	(tsmWriteGeotile): if the geotile file exists, then read it in and
	parse its contents so that we don't destroy current geotile info.

Thu Oct 29 12:38:43 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (CreateAnchor): removed the freeString function and
	all of the vsgRegisterExtern callbacks that free strings using
	this. Now we can just use the vsgStrdup obstack functions.
	(vtileStr): put the vtileProto instance inside a Group node.
	(tsmAppendNodeMFString): [new func] appends a string to an
	MFString field of an SFNode - used for updating GeoTile entries.

	* tsmTspec.c (tsmValidateTspec): added check to make sure that the
	geo-name field is set up loading of a tspec file.

	* tsmUtils.c (tsmEnsureGeoNameSet): [new func] checks to see if a
	geo-name has been specified for a pyramid. If not, then it will
	generate one automatically from the pyramid name.

Tue Oct 27 15:50:21 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmWriteVRMLIndex): [new func] generates an
	index.html file for the dataset that redirects the web browser to
	the root tree file. This is now called by tsmWriteAllTrees().
	(tsmWriteAllTrees): only write out the arrow and zoom widgets if
	we are making an old anchor-lod tree file. We don't need these for
	QuadLOD.

	* tsmArg.c (tsmParseVRMLArgs): added a -rootlevel command line
	option to specify the root (entry point) tree file level.

	* tsmConnectionParams.h (TSM_PARAM_ROOT_LEVEL): added a new
	connection param setting to control the level number of the entry
	tree file, e.g. the default 2 means trees/2/p0p0.wrl.

	* tsmVRML.c (tsmSetNodeSFVec3f): [new func] convenience function
 	that takes a node name, a field name, and an SFVec3f, then finds
 	that node in the world and sets the value of that SFVec3f field.

	* tsmTile_dpss.c (tsmReadNextTile_dpss): added validity checks of
	the issReadBlocks data. Currently, during a server down fault,
	issReadBlocks will return invalid data but a result of ISS_OK. We
	therefore have to check to see if the tile data is okay and fake a
	SERVER_DIED return code if it looks screwy. This should be removed
	when issReadBlocks does the right thing.

	* tsmVRML.c (tsmSetNodeMFString): [new func] convenience function
 	that takes a node name, a field name, and a string, then finds
 	that node in the world and sets the value of the specified
 	MFString field.
	(tsmWriteAllTrees): changed all of the QuadLOD fprintf code to use
 	the new vrml parser for generating VRML. Also added code to output
 	the GlobalState and Cache nodes for the root tree file.

Fri Oct 23 17:24:01 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecParse.c (tspReadTspec): move the code that makes up a
	geo-name field if not specified to the higher level function
	tsmReadTspec_local. This means that the check is also done for the
	old style multi-file tspec format too, instead of just tiles.tspec.

Thu Oct 22 10:25:31 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c: changed all references to TSM_PARAM_ABS_URL and
	absurl to TSM_PARAM_VRML_URL and vrml_url. Also changed all
	EXTERNPROTO urls so that all proto files are stored in the
	../../protos/ directory (no more lib/ directory), and also provide
	a fallback absolute url to www.ai.sri.com/VRMLSets.
	(tsmWriteAllTrees): use the GeoSet name as the default
	terrainName value for a terrain when adding a GeoTile entry.

	* tsmConnectionParams.c (tsmInitParams): change the default value
 	of absurl from "http://www.ai.sri.com/VRMLSets" to "../../". This
 	means that we no longer need any conditional code all over the
 	place to selectively put in the absolute URL or the relative
 	prefix. The name absurl is now slightly confusing so this has been
 	changed to vrml_url, and TSM_PARAM_ABS_URL becomes
 	TSM_PARAM_VRML_URL.
	(tsmSetParam): if the user specifies a vrml_url or a vrml_dir with
 	a trailing '/' then strip this so that we can always do "%s/dir"
	when appending directory or filenames to these.

	* tsmDatabase.c (tsmUpdateDatabaseFromServer): removed some unused
	variables.

	* tsmTile_dpss.c (tsmReadNextTile_dpss): return TSM_NODATA if
	issReadBlocks returns SERVER_DIED.

Fri Oct 16 10:59:14 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRMLUtils.c (tv2vGetCoords): change references to floorf to
	just floor as floorf and ffloor are non-ANSI and only available
	under IRIX.

1998-10-16  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile_dpss.c (tsmReadNextTile_dpss): Remove ugly (and
	  unecessary) dangling else in SERVER_DIED handler.

Thu Oct 15 17:35:59 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_dpss.c (tsmReadNextTile_dpss): conditionally compile the
	check for SERVER_DIED. Only compile if this is defined in the DPSS
	libs.

Wed Oct 14 14:12:41 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* Makefile.am (EXTRA_PROGRAMS): change the VRML generation programs
	(image tree vtile) from bin_PROGRAMS to EXTRA_PROGRAMS. This means
	that they are not recompiled every single time you recompile the
	tsmApi library. You can can them explicity, "make image".

	* config.h.in: removed the ISS and DPSS24 defines and replaces
	these with just DPSS. Also updated all references in the tsmApi
	source code.

	* tsmConnection.c (tsmSet): missing semi-colon.

Tue Oct 13 13:58:12 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_dpss.c (tsmReadNextTile_dpss): explicitly check to see
	if a server has died when issReadBlocks fails. If so, then output
	a trace message and return a failure for tsmReadNextTile.

Mon Oct 12 11:24:29 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* configure.in (LIBS): changed $updir instances to "../" for the
 	pthr libs. For some reason, $updir was no longer defined and so
 	the link line had -L/pthr instead of -L../pthr.
	(LIBS): rearranged the position of the pthread lib on the link
 	line as the DPSS libs (12 Oct 98) now makes use of pthread calls.

	* tsmConnection_dpss.c (tsmBeginLogging_dpss): the dummy (non
	DPSS) stub for this function didn't have the same number of
	arguments as the prototype. Fixed now.
	(tsmConnect_dpss): when writing a new DPSS set, if a server
	combination is not specified then use the default server list from
	the DPSS hwdb structure.

1998-10-13  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmAllocTspecs.c (tsmFillSimpleTileSets): Copy ixiytoUV from
	  minLevel and then transform and invert.  More numerically stable
	  than the inverse.

1998-10-09  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* test: Delete directory.
	* image.c: Moved from test.
	* tree.c: Moved from test.
	* vtile.c: Moved from test.
	* Makefile.am: Move test/Makefile here.
	(bin_PROGRAMS): Add image tree vtile.
	(image_{SOURCES,DEPENDENCIES,LDADD}): Define image.c compilation.
	(tree_{SOURCES,DEPENDENCIES,LDADD}): Define tree.c compilation.
	(vtile_{SOURCES,DEPENDENCIES,LDADD}): Define vtile.c compilation.
	(vtiles, trees, round-earth, flat-earth): Moved from test/Makefile.
	(colorado): Ditto.
	(p-icon, pendleton-vtiles, pendleton-trees, pendleton): Ditto.
	(pend1deg-vtiles, pend1deg-trees, pend1deg): Ditto.
	(geotile-vtiles, geotile-trees, geotile): Ditto.
	(test, test-vtiles): Ditto.
	(ctrees, cvtiles, ): Ditto.
	(btrees, bvtiles): Ditto.
	(etrees, evtiles, eimages): Ditto.
	(ytrees, yvtiles): Ditto.
	(ctrees-pc, cvtiles-pc): Ditto.
	(benning-trees, benning-vtiles, benning): Ditto.

	* tsmConnection.c (tsmConnect): Change protoCtx -> protoWrl.
	  Don't call vsgcSetupPrinting() (obsolete).  
	(tsmDisconnect): Change DestroyProtoCtx -> DestroyProtoWrl.
	* tsmConnectionInt.h (ConnectionCommonFields): Rename protoCtx
	  field to protoWrl.

	* tsmVRML.c: Reflect changes to vrml2 interface from newapi merge.

Sat Sep 12 18:42:44 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmPurl.c (tsmParseUrl): whenever we create a Purl, go through
	the uri string and collapse any multiple contiguous '/ symbols to
	one '/', so we don't get things like /homedir/reddy//.TerraVision

Mon Aug 31 09:23:13 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.h: added a TSM_TSPEC_URL value for tsmGet to
	recognise and return the URL where the tspec file for a dataset
	was loaded from.

	* tsmConnection.c (tsmGet): support the new TSM_TSPEC_URL setting

Fri Aug 28 09:22:54 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUtils.c (tsmStringToPlanet): [new func] converts a string
	into a TsmPlanet enumerated type
	(tsmPlanetToString): [new func] converts a TsmPlanet to a string

	* TsTileSpecDecs.x: (Pyramid): add a geoName field and planet
	field to the tspec definition. With these in the pyramid tspec,
	and with the global database, we no longer need GeoPyramids!

	* tsmCreate.h: added a geoName and planet field to the parameter
	structure for creating tspecs (TsmTspecParams).

	* tsmCreate.c (tsmInitTspecParams): define default values for
	geoName (NULL) and planet (TSM_EARTH) when initialising a
	TsmTspecParams structure.

	* TsTileSpecGen.c (tspCreatePyramid): create the geoName and
	planet fields based upon the values in TsmTspecParams.

	* TsTileSpecOut.c (tspSaveIdentityTspec_fp): write out the geoName
	and planet information to the IdentityTspec section of tspec files.

	* TsTileSpecParse.c (tspParseTspecLine): parse the geoName and
 	planet fields from a tspec file and enter into Pyramid struct
	(tspReadTspec): specify default geoName and planet fields if not
 	defined in the tspec file.

	* tsmAllocTspecs.c (tsmCopyPyramid): copy the geoName field when
	copying a Pyramid structure
	(tsmFreeTspec): free the geoName field when freeing a Pyramid

	* tsmDatabase.h: moved TsmPlanet into TsTileSpecDecs.x so that it
	can be accessed by the Pyramid definition.

	* tsmDatabase.c (tsmPrintDataSet): add support for representing
 	lzw compressed datasets in addition to lrbt and jpeg.
	(tsmUpdateDatabaseFromServer): check for lzw compressed datasets
	when checking image formats

	* tsmDatabase_local.c (tsmParseDatabaseLine): support parsing of
	the lzw token for the formats field of a dataset database entry.

Thu Aug 27 18:28:20 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c (tsmPrintParams): added a few connection
	parameters that were missing, e.g. DPSS_TSPEC, VALIDATE_TSPEC, etc.

Tue Aug 25 11:14:27 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmAddServerToDatabase): normalise the url before
	checking to see if it exists in the database. Do this by running
	it through tsmParseUrl first and using purl->url.

	* tsmDatabase_local.c (tsmNewDatabaseServer): when creating a new
 	server structure, explicity set the last_contact time to be -1,
 	indicating that the server has not been contacted yet.

	* tsmUtils.c (tsmDateString): if you pass a value of -1, then a
	result of "n/a" is generated.

1998-08-26  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (CPPFLAGS): Add -I$updir/pthr to get pthr/sysconfig.h.
	* tsmConnection.c (tsmConnect): Initialize request_table if
	  TSM_PARAM_REQUEST_CHECK is set.
	* tsmConnectionInt.h (ConnectionCommonFields): Add request_table
	  field. 
	* tsmConnectionParams.c (tsmSetParam): Move va_start() and
	  va_end() outside of switch so we only need to do each once!
	  Add case TSM_PARAM_REQUEST_CHECK.
	* tsmConnectionParams.h (TSM_PARAM_*): Renumber flags using (1<<n)
	(TSM_PARAM_REQUEST_CHECK): Add parameter selector to list.
	* tsmConnectionParamsInt.h: Add request_check flag to structure.
	* tsmExtProts.h (tsmMakeTileId): New.  Macro for creating a tile
	  ID based on x,y,res.  Intended to be unique within a dataset
	  connection.
	* tsmInternal.h: Include <pthr/eqhash.h>
	* tsmTile.c (tsmReadNextTile): Use tsmMakeTileId() to make tile ID.
	(tsmTileReqBegin): Clear request_table if initialized.
	(tsmTileReqAdd): Use request_table to check for existing request
	and return if found, otherwise register request after entered.

Mon Aug 24 12:28:03 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile.c (tsmReadNextTile): set the tile_id field of the tile
	header to a unique 32-bit value based upon the (x,y,res) tuplet
	defining the tile. We assign 12 bits for x and y, 6 for res.

	* tsmEmulate.c (tsmGetPyramid_params): [new func] does the same as
	tsmGetPyramid but allows a TsmConnectionParams structure to be
	passed through to the tsmConnect call. This lets us have the
	flexibility of new connection parameters in the old tsmApi interface.
	(tsmGetPyramid): now just a call to tsmGetPyramid_params with a
	NULL parameter setting

1998-08-24  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnect): Remove initialization of
	  readLocka and readBlockLock.

	* tsmConnectionInt.h: Declare tsmReadListReady(),
	  tsmGrabReadList() and tsmGrabValidReadList().
	  (ConnectionCommonFields): Remove readLock and readBlockLock.

	* tsmTile.c (tsmReadListReady): New.  Check whether read list
	  argument has pending tiles.
	  (tsmGrabReadList): New.  Grab the current read list, checking
	  whether nextReadList is ready.  Optionally locks with requestLock.
	  (tsmGrabValidReadList): New.  Grab the current read list,
	  optionally blocking if no pending requests.
	  (tsmReadNextTile): Remove manipulations of read list.  Moved
	  into type-specific reader functions (described below).
	  (tsmTileReqAdd): Don't signal readBlockCond every time a tile
	  request is added.
	  (tsmTileReqEnd): Signal readBlockCond when updating nextReadList.

	* tsmTile_dpss.c (tsmReadNextTile_dpss): Call tsmGrabReadList()
	  and then return TSM_NODATA if not blocking and empty list.

	* tsmTile_local.c (tsmReadNextTile_local): Use
	  tsmGrabValidReadList() for blocking/non-blocking read list
	  manipulation.

	* tsmVRML.c: Change vrml2 library includes to public interface,
	  not internals.

Sat Aug 22 18:07:08 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.c (tsmAddGeoSetToDatabase): changed the check for
 	adding a new geoset to the database so that we ignore any geoset
 	(whatever its name) if the OI and DEM names are then same as those
 	of the new geoset.
	(tsmSortGeoSets): [new func] sorts the geoset array alphabetically
	and also removes any degenerate geoset entries (where the OI and
	DEM do not exist in the database).
	(tsmWriteDatabase): call tsmSortGeoSets before saving a database
	to ensure that we write sorted geosets and remove degenerates.

Fri Aug 21 14:43:02 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParamsInt.h: changed the flag field from an int to
	a long so that we can handle more than 32 parameter bits.

	* tsmConnectionParams.h (TSM_TREE_TYPE_ANCHOR): there was a define
	to 1 and 2<<0 which are the same thing. Reorganised numbers
	accordingly. 

	* tsmConnectionParams.c (tsmSetParam): use varargs to handle
	values of different types instead of lots of hokey macro stuff and
	tons of pointer dereferencing. Now much cleaner.

	* tsmConnection.c (tsmSet): ditto on the varargs thing

Thu Aug 20 13:53:23 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase_local.c (tsmParseDatabaseLine): the name field of
	Geoset and Dataset was only parsed as far as the first space, so
	names with spaces got chopped off. Now parse entire name.

	* tsmConnection.c: added #ifdef DPSS24 blocks around all
	references to DPSS specific structures.

Wed Aug 19 14:50:31 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile.c (tsmReadNextTile): if we are doing a blocking read and
	there are no more tiles to be read in, then block until we receive
	a signal that there are new tiles. If we are not doing blocking
	reads (the default), then return TSM_NODATA as usual.
	(tsmTileReqAdd): if we are doing blocking reads, then signal the
	condition that we have new tiles to play with

	* tsmConnection.c (tsmConnect): initialise the blocking read mutex
	and condition variable

	* tsmConnectionParams.c (tsmInitParams): added a connection
 	parameter TSM_PARAMS_BLOCKING_READ to specify blocking reads
	(FALSE by default).

Tue Aug 18 09:58:02 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmEstimateBoundingBox): for the -fastbbox option,
 	taking 5 samples (4 corners and center) is not enough to estimate
 	the bounding box of a large-area geocentric dataset, so we
 	increase the number of samples for geocentric datasets > 45 deg.

Mon Aug 17 15:09:01 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (AppendViewpoint): [new func] creates a single
 	Viewpoint node. You give it where you are and where you want to
 	look at. It also transforms the coords to a Y-up coord system if
	creating a flat world.
	(AppendViewpoints): put the overhead view in here as well and
 	clean things up to use the new AppendViewpoint function above.
	(CreateTreeGraph): if we are creating a flat world, then the LOD
	hierarchy is put inside a Transform node to convert to Y-up.
	(WriteIcons): transform the arrow widgets to a Y-up coord frame if
	we are creating a flat world. Also, we now only write out the
	fields of the DrawArrows EXTERNPROTO declaration that are acutally
	used.
	
	* tsmVRMLUtils.c (SetNearPlane): changed the calculation of the
	near clip plane to be relative to the scene's bounding box.

	* tsmVRMLUtils.h (TSM_MAKE_Y_UP): added a macro to do the
	transformation from a z-up coordinate frame to y-up.

Fri Aug 14 15:52:56 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c (tsmSetParamPtr): forget a break statement
	after the TSM_PARAM_FAST_BBOXES switch statements.

Thu Aug 13 11:22:23 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmVRML.c (tv2vCreateVtileProto): made absolute URL's not
 	necessary if not set

	* tsmVRMLUtils.c (tv2vGetTexCoords): fixed tex coord calculations
 	to go from 0 to 1.0 and max out at max valid pixel coord

	* tsmVRML.c (tsmWriteVtile): added check for wrap around the world
 	in params->wrap_lat and wrap_long, and fixed max valid pixel
 	calculations

Thu Aug 13 12:13:14 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmLog): put mutex locking around the NetLogger
	call to log events so that this works in a multi-threaded app
	like TerraVision.
	(tsmGet): added a TSM_DPSS_SERVERS token to let you get a list of
	servers for a DPSS dataset.

Wed Aug 12 21:11:39 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmCrossProduct): renamed function with a tsm prefix
	to circumvent name clash with TerraVision function.
	(tsmNormalizeVector): ditto
	(tsmSubVector): follow suit

Tue Aug 11 14:08:01 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c (tsmInitTspecParams): set the default DEM scale to
	1.0 instead of 0.001. The data in the LAS .img files is in meters
	but we were multiplying it by 1000 before storing - there's no
	point in this, so let's just stick to data at 1 m in the DEMs.

	* tsmVRML.c (tsmCalcBoundingBox): if TSM_PARAMS_FAST_BBOXES is set
	true, then use the new tsmEstimateBoundingBox function instead.
	(tsmEstimateBoundingBox): [new func] estimates the bounding box of
	a tile by using the min/max elevation of the entire dataset for
	the four corner points and the center point.

	* tsmConnectionParams.h: added TSM_PARAMS_FAST_BBOXES connection
	parameter to control whether to use a faster but approximate
	calculation for bounding boxes, or to do the calc by checking
	every single vertex in a tile.

	* tsmArg.c (tsmDescribeArgs): added -fastbbox command line parsing
	and descriptions.

	* tsmCreate_LAS.c (tsmCreateLevelTiles_LASELEV): now uses the
 	generic tiling function for raw data, which means that we can also
 	support the wrap around edge pixels for LAS images as well as raw
 	ones. LAS images are rrrr*gggg*bbbbb* rather than rgbrgb*, however
 	we can use the generic function here because elevation data are
 	only bitplane.

	* TsTileSpecDecs.x: added wrap_lat and wrap_lon fields to the end
	the Pyramid structure.

	* tsmAllocTspecs.c (tsmFillSimpleTileSets): automatically evaluate
	whether the dataset wraps around the word horiz/vertically. Store
	this in tspec->wrap_lon and tspec->wrap->lat, resp.

Mon Aug 10 17:20:29 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmReadRow_RAW): extend the functionality to
	handle cylindrical wrap-around at the end of a raster row.
	(tsmCreateLevelTiles_generic): extend the functionality to handle
	spherical wrap-around at the top of the world

	* tsmConnection.c (tsmConnect): don't let the user use LZW
	compression for DEMs as this currently doesn't work - the libtiff
	lzw support can't handle our overlap pixels.

Thu Aug  6 09:33:19 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecUtils.c (tspCalcGeoidSeparation): clamp lat/long to
	max values if they are over by some small epsilon, to deal with
	floating point rouding errors that creep in.

	* tsmTile_local.c (tsmReadTIFF_local): use TIFFReadRawTile for
	TIFF files with no compression, but TIFFReadEncodedTile for LZW
	compressed tiles. N.B. 33x33 DEM tiles causes a problem here as
	the decompression (or compression?) routine use the specified tile
	size of 32x32 (tiles must be ^2 for TIFF) so we loose data. Need
	to fix this.

	* tsmVRMLUtils.c (tv2vGetCoords): apply scale/offset to raw data
	read before testing against clip value (-9999), also fix the test
	as it was checking loc_coords[2] not lerp[px][py].

Wed Aug  5 14:34:05 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate_RAW.c (tsmCreateLevelTiles_generic): if the input data
	is 16-bit, and we want to output 32-bit data, then we need to
	resample the input data. We assuming signed data here and properly
	deal with sign extension to 32-bit.

Tue Aug  4 18:12:16 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmArg.c (tsmParseReadArgs): add -readlzw
	(tsmParseWriteArgs): add -writelzw
	(tsmDescribeArgs): added description for -readlzw
	(tsmDescribeArgs): added description for -writelzw

	* tsmConnection_local.c (tsmConnect_local): support the detection
	of LZW compressed data, stored as tiles_lzw.tiff.

	* tsmTile_local.c (tsmReadTIFF_local): support reading of LZW (and
 	any other supported compression scheme) tiles. Previously it was
 	JPEG or raw.
	(tsmWriteTIFF_local): write LZW compressed data if selected *
 	(tsmCheckTIFFFormat_local): support checks for the new LZW scheme

	* tsmConnection.c (tsmGet): support the new LZW format

Wed Aug  5 12:10:53 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmArg.c (tsmParseVRMLArgs): added -zclip command line arg
	* tsmVRMLUtils.c (tv2vGetCoords): now handles OI and DEM's in
 	different coordinate systems, and clips out elevation values that
 	are invalid.
	* tsmVRML.c (OILevel2DEMLevel): new function

Mon Jul 20 16:09:31 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmVRML.c (tsmWriteVtile): polys beyond maxValidPixel are no
 	longer generated. Fixed normal generation problem.

Wed Jul 15 17:40:04 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

        * tsmConnection_dpss.c (tsmBeginLogging_dpss): only do NetLogger
        write events if the connection mode is write only (not read/write).

Sat Jul 11 19:44:01 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c (tsmInitParams): disable Nat's normal
	generation code by default until this is all working 

	* tsmVRML.c (tsmWriteAllTrees): added code to output QuadLOD style
	tree files. Also, added GlobalState node to tree files.

Mon Jul  6 19:01:41 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmWriteGeotile): [new func] creates a GeoTile file
	for the specified tx,ty,level.
	(tsmWriteAllTrees): write a geotile for each tree file (unless
	parameter structure says no geotiles)
	(CreateInline): link to a geotile if parameter structure says we
	are creating geotiles, otherwise link to a vtile

Thu Jul  2 13:43:51 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.h (tsmLogTile): [new macro] basically a wrapper to
	tsmLog for the common task of logging an event for a single tile
	(now logs tile data to a DPSS.BID event for merging with DPSS logs)

Mon Jun 29 15:59:16 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>
	
	* tsmConnectionParams.c
	* tsmConnectionParams.h
	* tsmConnectionParamsInt.h
	* tsmArg.c
	* tsmVRMLUtils.c (tv2vGetCoords): Added UTM coordinate output format
	    and associated command line args.

Fri Jun 19 10:37:58 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c (tsmSetParamPtr): [new func] does what
	tsmSetParam_ used to do, but takes a void * as its value argument
	so that you can pass references to non int sized variables.
	(tsmSetParam_): is now just a wrapper to tsmSetParamPtr. it still
	takes an int as the value argument.

Thu Jun 18 09:59:47 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmVRML.c (tsmWriteAllImages): [new func] used to produce a
	pyramid of JPEG tiles from a TV OI pyramid.

	* tsmVRMLUtils.c (tsmVRMLCacheInit): [new func] initialise a tile
	buffer and bounding box cache
	(tsmVRMLCacheFree): [new func] dispose of the cache contents
	(tsmVRMLCacheGetBBox): [new func] check for a bounding box in cache
	(tsmVRMLCacheGetBuffer): [new func] check for a tile buffer in cache
	(tsmVRMLCacheAddBBox):  [new func] add a bounding box to cache
	(tsmVRMLCacheAddBuffer): [new func] add a tile buffer to cache
	(ReadDEMTile): updated to use above caching routines

	* tsmVRML.c (tsmCalcBoundingBox): calculates the bounding box for
 	a tile, taking into account whether it is flat, geocentric, etc.
	Uses the above caching routines to cache recently calc'd bboxes.
	(tsmWriteAllTrees): routine to create Anchor node type tree
	files.

Tue Jun  9 16:43:07 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmArg.c (tsmParseVRMLArgs): added -elevscale and -worldscale
 	command line args.
	* tsmConnectionParamsInt.h: ditto
	* tsmConnectionParams.h: ditto
	* tsmConnection.c: ditto
	* tsmVRMLUtils.c (tv2vGetCoords): make lat/long coords wrap around
 	at 180 to remove seam from earth.
	* tsmVRML.c: made lat/long coords work and speed up in tile access
 	order

Fri Jun  5 11:41:48 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUTM.c (tsmLatLongToGeocentric): allow longitudes in the range
 	0..360 as well as -180..180 and also make sure that the result of
	lon 180 == -180 and lon 0 == lon 360.
	
	* TsTileSpecUtils.c (tspCalcGeoidSeparation): support longitudes
	in the range 0..360 as well as -180..180.

Wed Jun  3 09:26:30 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmArg.c (tsmParsedAllOptions): added a function to return
	whether all command line options were parsed and optionally
	provide an error report detailing unmatched options.
	(tsmGrabArgs): grabs an internal copy of command line and makes an
	array of booleans to record which options have been matched
	(tsmFreeArgs): frees the boolean array 
	(tsmSetArg): records an option as being matched
	(tsmIsArgSet): asks if an option has been matched

Mon Jun  1 13:06:43 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmBeginLogging): enable DPSS logging when we
	log a connection to a DPSS set - this now works with the DPSS 2.5
	libs, of 1 June 1998.

	* tsmConnection_dpss.c (tsmBeginLogging_dpss): only do DPSS read
 	logging if the tsm connection is a read connection, and write
 	logging if a write connection.

1998-05-27  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmConnect): Declare dataset and access_mode args
	  as char const *.
	* tsmExtProts.h (tsmConnect): Declare dataset and access_mode args
	  as char const *.

	* tsmTspec_dpss.c (tsmWriteTspec_dpss): Cast connect to
	  TsmConnectionDpss * before using.

	* tsmVRML.c (CreateTreeGraph): Use SFFloat for floating point
	  locals.
	(WriteIcons): Don't use non-portable %1$g structures in printf().

	* tsmConnectionInt.h: #include <vrml2/vrml2.h>
	* tsmInternal.h: #include <vrml2/vrml2.h>
	* tsmVRMLUtils.h: #include <vrml2/vrml2.h>

Tue May 26 16:06:02 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmEmulate.c (tsmGetConnectionsFromTsmHandle): [new func] lets
	us get to the new connection structures from an old TsmHandle 

Fri May 22 10:37:21 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmEmulate.c (tsmStartLogging): make this old-style tsmApi call
 	be a wrapper to the new NetLogger based logging provided in the
 	connection interface.
	(tsmStopLogging): ditto
	(tsmPutLog): [new func] an interface to tsmLog for the old
	server-based tsmApi interface.

Thu May 21 14:05:48 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmBeginLogging): now uses NetLogger. This
	function basically does a NetLoggerOpen call.
	(tsmEndLogging): now uses NetLogger - does a NetLoggerClose
	(tsmLog): [new func] use NetLogger to write out a generic log
	event. 

	* tsmConnection.h (TV_TILE_IN_CACHE): added a number of standard
	log event names for use with tsmLog

	* tsmTile.c (tsmReadNextTile): instrumented to generate a
	TV_TILE_READ log event if the user has started logging
	(tsmTileReqAdd): instrumented to generate a TV_TILE_REQ event
	(tsmWriteTile): instrumented to generate a TV_TILE_WRITE event

	* tsmConnection.c: moved vrml2.h include into tsmInternal.h
	(tsmDisconnect): automatically do a tsmEndLogging call on a
	tsmDisconnect if we are currently logging data.

	* logging.c (NetLoggerWriteString): updated LBL's NetLogger code
	to include a NetLoggerWriteString function and to use tsmApi's
	DPSS24 define to avoid multiple references when compiled against
	the DPSS libs.

	* tsmEmulate.c (tsmOpen): if tsmOpen("") format used, then
 	initialise the port, uri, and hostName fields of the dbPurl using
 	tsmMemStrdup so that we don't free non-heap mem in tsmFreePurl.

Tue May 19 16:13:38 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecGen.c (tspCreatePyramid): changed name from
	tspCreatePyramidUTM. Now is more general and can create lat/long
	tspec files.

	* tsmCreate_LAS.c (tsmParseCreateParams_LAS): support reading
	Lat/Long information from .prt files (in addition to UTM)

Fri May 15 18:01:06 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmConnectionParamsInt.h: added variables for VRML params
	* tsmArg.c (tsmParseVRMLArgs): added procedure for VRML args
	* tsmVRML.c : added file - creates vtiles, geotiles, tree files
	* tsmVRMLUtils.c : added file - utilities for above
	* tsmVRMLUtils.h: added file
	* Makefile.am (pkginclude_HEADERS): added new files and libraries
	* configure.in: ditto

Mon May 11 14:27:30 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecOut.c (tspSaveCoordTspec_fp): write out coord tspec
	inform for lat/long datasets.

Fri May  8 15:25:55 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecParse.c (tspExtractTokenAndData): if a line in a tspec
	file had more than one whitespace between the keyword and the
	value, then things blew up. Changing *data++ to (*data)++ fixes
	the problem - now if I was a lisp man I'd know all about parens.

	* TsTileSpecDecs.x: added tspPointSample as a possible Operation
	in the Identity section of the tspec

Thu May  7 14:25:57 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_local.c (tsmCheckTileFormat_local): when checking for
	valid .tile data, check for (minTile[0],minTile[1]) and don't just
	assume (0,0).

	* tsmTile.c (tsmTileReqAdd): added a check to ensure that we never
	create a request list with more than TSM_MAX_NUMREQS requests.

	* tsm.h (TSM_MAX_NUMREQS): updated the default value of
	TSM_MAX_NUMREQS to 8192, as defined by DPSS 2.5

	* logging.c: [new file] added LBL's NetLogger C code to tsmApi

	* logging.h: [new file] added LBL's NetLogger C code header


Wed May  6 11:35:17 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecUtils.c (tspCalcUTMZone): make this function public
	(tspCalcCentralMeridian): ditto
	(tspCalcGeoidSeparation): ditto
	(tspCalcK0): ditto

	* tsmUTM.c (tsmLatLongToGeocentric): assume altitude above sea
 	level and so add the geoid separation value for the lat/long
 	region before doing the conversion.
	(tsmGeocentricToLatLong): added a new function to perform the
	transformation from geocentric coordinates to (lat,long,alt).

	* TsTileSpecUtils.c (tspCalcGeoidSeparation): converted the float
 	params to doubles to prevent rounding problems when casting
 	doubles into floats.
	(tspCalcUTMZone): ditto


Mon May  4 18:17:10 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUTM.c (tsmLatLongToGeocentric): added a function to convert
	from a (lat,long,altitude) coordinate into geocentric coordinates.

Fri May  1 11:09:26 1998  Nathaniel Bletter  <bletter@Silver.AI.SRI.COM>

	* tsmArg.c (tsmGetArgPointer): allows multiple instances of same
	 	arguement by marking used ones.


Fri May  1 21:42:31 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUrlToFile.c (tsmOpenStream): added the tsmOpenStream function
	which can take an http or localdisk url, or a local filesystem
	filename, and open it with a desired access mode, e.g. "r",
	returning a FILE * stream.
	(tsmCloseStream): close a stream opened by tsmOpenStream.
	(tsmStreamToFile): documented the function and made it external
	(tsmStreamToBuffer): ditto
	(tsmStreamToStdout): ditto

Mon Apr 13 13:33:55 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection_dpss.c (tsmConnect_dpss): remove the DPSS bug
	workaround for issHandle->max_open_desc not being set
	correctly. This field has been removed from the latest 2.5 release
	(and hence fixes the aforementioned bug).

	* TsTileSpecDecs.x: added tspLatLongProjection, tspWGS84, and
	tspDegrees to tspSymbol.

	* TsTileSpecUtils.c: made changes to tspSymbolStrings to reflect
	the above additions to tspSymbol

Fri Apr 10 20:54:15 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c: don't constrain the RAW/LRBT OI data to be only 3
 	or 1 comps per pixel and 1 byte per pixel. Likewise, don't
 	constrain RAW/LRBT DEM data to be only 4 bytes per value. E.g. now
	we can specify 2-byte DEM data easily.

	* tsmCreate_LRBT.c (tsmCreateLevelTiles_LRBT): removed
 	tsmDownSample_LRBTGRAY and tsmDownSample_LRBTELEV. Renamed
 	tsmDownSample_LRBTRGB to just tsmDownSample_LRBT and made generic
 	for any number of components and bytes per component. Did the same
 	for tsmCreateLevelTiles_LRBT*.

	* tsmCreate_RAW.c (tsmCreateLevelTiles_RAWELEV): 

	* tsmCreate.h: added tile_width, tile_height, tile_overlap_x, and
 	tile_overlap_y fields to TsmTileParams.

	* tsmCreate.c (tsmInitTileParams): initialise tile_width and
	tile_height to 128 for OIs, and 32 for DEMs; also initialise
	tile_overlap_[x|y] to 0 for OIs and 1 for DEMs.

	* tsmCreate_RAW.c (tsmDownSample_RAW): removed
	tsmDownSample_RAWGRAY and tsmDownSample_RAWELEV. Renamed
	tsmDownSample_RAWRGB to just tsmDownSample_RAW and made generic
	for any number of components and bytes per component. Did the same
	for tsmCreateLevelTiles_RAW*.

	* tsmCreate.h: added a bytes per component field to TsmTileParams

	* tsmCreate.c (tsmInitTileParams): initialse bytespercomp to 1 for
	OIs and 4 for DEMs.

	* tsmImage.h: change name of TSM_PBM enum value to TSM_PPM

	* tsmImage.c (tsmSaveImage): write out pgm files with a .ppm
	filename extension as well as .ppm files. By definition, a .ppm
	file encompasses a .pgm file.


1998-04-09  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTile.c (tsmTileHeaderX): Declare tileHeader as const ptr.
	(tsmTileHeaderY): Ditto.
	(tsmTileHeaderLevel): Ditto.
	(tsmTileHeaderSetId): Ditto.
	(tsmTileHeaderSessionId): Ditto.
	(tsmTileHeaderTileId): Ditto.
	(tsmTileHeaderSize): Ditto.
	(tsmTileHeaderChecksum): Ditto.
	(tsmTileHeaderType): Ditto.
	(tsmTileHeaderConnection): Ditto.

	* tsmExtProts.h: Reflect changes from declarations above.

1998-04-06  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* All files:  Add a TSMMASK qualifier to all TSMTR* macro calls.

Sat Apr  4 14:50:04 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmImage.c (tsmSaveImage): when saving a DEM tile, convert this
	into a greyscale 1-byte-per-pixel buffer before writing.

	* tsmCreate_RAW.c: [new file] contains generic routines to tile up
 	and downsample raw image data.

	* tsmCreate_LRBT.c: [new file] contains routines to tile and
 	downsample raw data in lrbt (rather than lrtb) format. (uses
 	generic routines defined in tsmCreate_RAW.c)

	* tsmCreate_PBM.c: [new file] contains routines to tile and
	downsample PPM and PGM format images. (uses generic routines
	defined in tsmCreate_RAW.c)

	* TsTileSpecDecs.x: moved the definitions of Footprint and
	TsmCoordSystem into here so that rpcgen will generate xdr_
	functions for these (they are referenced by Pyramid).

Mon Mar 30 16:32:26 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmCreate.c (tsmInitTspecParams): added a TsmDataSetType
	parameter so that structure can be initialised with values for a
	particular type of dataset, e.g. OI, DEM, etc.
	(tsmInitTileParams): ditto

	* tsmImage.c (tsmSaveImagePGM): added function to save out image
	tiles in PGM (grayscale) format.
	(tsmSaveImage): use the PGM writing function for PBM if the number
	of components per pixel is one.

1998-03-30  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmConnection.c (tsmDescribeConnection): Cast tsmGet() return
	  value to (char *) when appropriate.

Sat Mar 28 12:00:31 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmChecksum.c (tsmCalcTileStats): [new func] calculate the
	checksum and min/max pixel values for a tile buffer. Currently
	supports 1-byte data (OI) and 4-byte scaled/offset (DEM) data.
	(tsmUpdateTileStats): a connection interface to the above function
	that will take a tile buffer, calculate the checksum and min/max
	values, then add these into the tspec structure as appropriate.

	* tsmCreate_LAS.c (tsmCreateLevelTiles_LAS): update the checksum
	array and min/max pixel values while we generate new tileset.
	(tsmCreateDEMLevelTiles_LAS): ditto

	* TsTileSpecGen.c (tspCreatePyramidUTM): set the PixelTspec minVal
	and maxVal pixel values to -1.0 by default (not calculated).

Wed Mar 25 10:00:47 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmProgressReport): no semicolon at the end of
	the vprintf() statement - but cc didn't complain!

	* tsmLocalDbase.c (tsmAddToLocalDbase): [new func] a connection
	based interface to adding a new entry to a PyramidUrls database.

	* tsmArg.c (tsmDescribeArgs): added information about default
	values to the description of command line args

Tue Mar 24 11:01:46 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTspec_dpss.c (tsmReadTspec_dpss): by default we will try to
	load a DPSS's tspec from the DPSS dataset itself (unless 
	TSM_PARAM_DPSS_TSPEC is FALSE). Then we try the metadata URLs.

	* tsmTspec_local.c (tsmReadTspec_local): if the params structure
	defines a particular tspec format to use, then use it. If none
	specified, then try the new tspec files first, then fallback to
	the old multi-file tspecs if this is not available.

	* tsmTspec_web.c (tsmReadTspec_web): if the params structure
 	defines a particular tspec format to use, then use it. If none
 	specified, then try the new tspec files first, then fallback to
 	the old multi-file tspecs if this is not available.
	(tsmReadTspecNEW_web): added tracing information so that we can
 	tell when new tspecs are being loaded over http
	(tsmReadTspecOLD_web): added tracing information so that we can
 	tell when old tspecs are being loaded over http
	
	* TsTileSpecIn.c (tspReadOldPyramid): added some tracing
	information so that we can tell when old tspec files are used.

	* TsTileSpecParse.c (tspReadTspec): added some tracing information
	so that we can tell when a new tspec file is being parsed.

	* tsmArg.c (tsmParseReadArgs): added 3 new command line options:
 	-readmetadata (only read tspec from metadata URLs), and
 	-readnewtspec (only read new style localdisk/http tspec files).
 	-readoldtspec (only read old style localdisk/http tspec files).
	(tsmDescribeArgs): describe the three new tspec arguments

	* tsmConnectionParams.h: added TSM_PARAM_DPSS_TSPEC and
	TSM_PARAM_NEW_TSPEC defines for the connection params.

	* tsmConnectionParamsInt.h: added fields for the
 	TSM_PARAM_DPSS_TSPEC and TSM_PARAM_NEW_TSPEC settings

	* tsmTspec_dpss.c (tsmReadEmbeddedTspec_dpss): use the DPSS
	function issSendRequestListSynch so that we can easily tell
	whether a tspec file has been loaded to the DPSS set. Now this
	function no longer hangs if there is no tspec file on the DPSS.

Mon Mar 23 12:28:34 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUtils.c (tsmAddFilenameExtension): used to remove previous
	extension by removing all text after the last ".", but this meant
	that "http://host.com/path" changes to "http://host". Now we
	check only for a "." after the last "/" (if present).

	* TsTileSpecGen.c (tspCreatePyramidUTM): added the ability to pass
	in scale and offset values for the tspec

Sun Mar 22 12:58:58 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnection.c (tsmProgressReport): [new func] displays a
	message that will be written over by next message (i.e. uses \r)

	* tsmConnection.h: changed TSM_COPY_PROGRESS_METER to just
	TSM_PROGRESS_METER to make more general.

	* tsmCreate.c (tsmCreateTspec): [new file] contains new routines
 	for generating tile and tspec data using the connection
 	interface. These routines are extensible to allow the future
 	plugging in of support for different source file formats,
 	georeferencing coordinate system, extra parameters, etc.

	* tsmCreate_LAS.c: [new file] renamed from tsmTileGen.c. Generates
 	tile data from EDC's LAS image format. The functions have been
 	updated to work with the new connection interface.

	* tsmCreate.h: [new file] contains structures for generating
	tspecs and tile data

	* tsm.h (TSM_PATH_ONLY): moved the defines TSM_POINT_SAMPLE and
 	TSM_GAUSSIAN_FILTER to tsmCreate.h
	(TSM_PATH_ONLY): moved the defines TSM_NOW, TSM_NEVER, and
	TSM_LATER to tsmTile.h

Fri Mar 20 09:04:41 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmEmulate.c (tsmOpen): removed unused vars
	(tsmClose): ditto

	* tsmImage.c (tsmSaveImageJFIF): removed unused var

	* tsmTspec_dpss.c (tsmReadEmbeddedTspec_dpss): removed unused var

	* TsTileSpecGen.c (tspCreatePyramidUTM): updated a reference to
	tsmUTMToGeo to the new name tsmUTMToLatLong.

	* TsTileSpecOut.c (tspSaveAllSimpleTspecs_fp): removed unused var

	* TsTileSpecIn.c (tspReadOldPyramid): removed unused var

	* tsmUtils.c (tsmShowUrl): removed unused variable
	(tsmAddNewPrepSetIds): removed function
	(tsmCopyPyramidLevelToBinaryStream): removed function

	* tsmAllocTspecs.c (tsmCopySimpleTileSet): removed unused vars
	(tsmCopyPyramid): ditto
	(tsmAllocatePyramid): ditto
	(tsmFillSimpleTileSets): ditto

	* tsmPyramidInfo.c (tsmGrowPyramidInfoServerArray): removed unused
	variable

	* tsmTileGen.c (tsmDownSample_psample): removed unused variable

	* tsmEmulate_dpss.c (tsmGetGeoPyramid_dsm): removed unused variable

	* tsmTile_dpss.c (tsmGetExistingBlockMap): removed unused variable
	(tsmInitDPSSDataset): ditto
	(tsmWriteTile_dpss): ditto

	* tsmTile.c (tsmWriteTile): removed unused variable

	* tsmConnection_dpss.c (tsmConnect_dpss): removed unused variable

	* tsmDatabase.c (tsmFreeGeoSetContents): removed unused variable
	(tsmAddGeoSetToDatabase): ditto
	(tsmRemoveServerFromDatabase): ditto
	(tsmGetDataSet): ditto

Thu Mar 19 10:33:16 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>


	* tsmUtils.c (tsmTranslateEmptyUrlsToNamedUrls): free a urls
	string (if not NULL) before setting it to something else.

	* tsmAllocTspecs.c (tsmFreeGeoPyramid): free any dynamic memory in
 	the GeoPyramidTspec portion of a GeoPyramid.

	* tsmTspec.c (tsmReadTspec): free the temporary Purl that was alloc'd

	* tsmDatabase.c (tsmMakeGeoSet): [new func] allocates a TsmGeoSet
	(tsmFreeGeoSetContents): [new func] frees the strings in a TsmGeoSet
	(tsmFreeGeoSet): [new func] frees a TsmGeoSet
	(tsmPrintGeoSet): [new func] output a TsmGeoSet to a FILE *
	(tsmGetDataSet): [new func] searches a database for a dataset

	* tsmDatabase_local.c (tsmNewDatabaseGeoSet): [new func] allocate
	a new TsmGeoSet entry at the end of a database's array

	* tsmDatabase.h: added a TsmGeoSet structure to hold info on an OI
	and DEM for a region. Also added a TsmPlanet enum.

	* tsmTspec.c (tsmValidateTspec): added some extra validation
	checks and some tracing information.

	* tsmTile_dpss.c (tsmPrepareDPSSDataset): conditionally compile
	the dsiSetReplicated() call based upon whether this macro is
	defined. It is avaliable in DPSS 2.4.4, but not in 2.4.3. (tsmApi
	now compiles without error for the 2.4.3 libraries.)

Tue Mar 17 10:45:38 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUtils.c (tsmShowUrl): [new func] will open a URL using
	netscape, using a currently opened netscape if already running.

	* tsmConnection_local.c (tsmConnect_local): augmented the error
	message for when a connect fails with TSM_PARAM_FALLBACK=FALSE so
	that we know which instance of the dataset was actually tried.

	* tsmTile.c (tsmTileReqAdd): check to see if the tile being
 	requested exists in the dataset. If not, then exit immediately
 	with a TRUE status so we don't trip a complete failure.

	* tsmTspec_web.c (tsmReadTspec_web): split this function into two:
	(tsmReadTspecNEW_web): reads a single-file tspec over http
	(tsmReadTspecOLD_web): reads the old multi-file tspecs over http

	* tsmArg.c (tsmParseReadArgs): added a -dontvalidatetspec option
	(tsmDescribeArgs): ditto

	* tsmAllocTspecs.c (tsmFreeTspec): if requested Pyramid is NULL,
	then return immediately and don't try to free any memory.

	* tsmArg.c (tsmParseInitArgs): [new] renamed from tsmParseArgs to
	give more consistent naming (e.g. tsmParseReadArgs, etc.)

	* tsmUrlToFile.c (tsmHttpUrlToFile): tsmHttpUrlFd returns FALSE on
 	error, but return code check only aborted if return code was < 0.
 	Changed the check to abort if tsmHttpUrlFd returns <= 0.
	(tsmHttpUrlToBuffer): ditto

	* tsmTspec_web.c (tsmReadTspec_web): add a check to see if
	tsmCopyUrlToTmpFile fails - returns error code if this happens.
	(tsmReadCoordTspec_web): ditto
	(tsmReadIdentityTspec_web): ditto
	(tsmReadImageTransformationTspec_web): ditto
	(tsmReadPixelTspec_web): ditto
	(tsmReadProjectionTspec_web): ditto
	(tsmReadPyramidTspec_web): ditto
	(tsmReadSimpleTspec_web): ditto
	(tsmReadTileTspec_web): ditto

Mon Mar 16 10:30:36 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTspec.c (tsmReadTspec): added routine to validate a tspec
	structure once it has been read in. This is not done if the params
	structure is valid and has validate_tspec == FALSE.
	(tsmValidateTspec): added a function to validate a tspec
	structure. This will do various checks to ensure that the fields
	in a structure are valid.

	* tsmConnectionParams.c (tsmSetParam_): added support for the
	TSM_PARAM_VALIDATE_TSPEC setting (TRUE by default).

	* tsmConnectionParamsInt.h: added a validate_tspec field to the
	TsmConnectionParamsStruct

	* tsmConnection_dpss.c (tsmConnect_dpss): augmented the error
 	message when issPrepareSet fails to suggest that a server reboot
 	might help matters.

	* tsmTile.c (tsmFreeTile): added a tsmFreeTile function that will
	free a tile header and a tile buffer in one step.

	* tsmConnection.h: change the TSM_CLOSE_DPSS_ON_DISCONNECT setting
 	to the more meaningful TSM_FINISH_LOAD_ON_DISCONNECT

	* tsmLocalDbase_dpss.c (tsmLoadGeoPyramidDatabase_dsm): return
	urls as x-dpss:// strings, rather than x-dsm://
	(tsmLoadPyramidDatabase_dsm): ditto

	* tsmConnection_dpss.c (tsmConnect_dpss): added tracing
	information for connecting to a DPSS set.

	* tsmConnection.c (tsmConnect): added tracing information to
	tsmConnect.

	* tsmTile_dpss.c (tsmReadNextTile_dpss): increment the trIndex
 	field after each tile is read so that we know how many requests
 	have been fulfilled and can shortcut out of tsmReadNexTile if
 	there are no tiles to be read.

	* tsmTile.c (tsmTileReqAdd): say which dataset the request being
	added is for in the trace output.

	* tsmTile_dpss.c (tsmReadNextTile_dpss): say which dataset the
	tile data is being read from in the trace output, and do this with
	a trace level of 2 so that TV will display the info.

	* tsmEmulate.c (tsmReqTile): initial trace message didn't provide
	variables to match with the printf %d/%p references.

	* tsmArg.c (tsmParseArgs): added support for a -version command
	line option to display tsmApi revision data/number.

	* tsmTspec.c (tsmReadTspec): add a TsmConnectionParams parameter
	so that we could potential pass in some optional parameters in the
	future without breaking the interface.

Sat Mar 14 00:44:52 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmArg.c (tsmParseConnectArgs): parses the command line and does
	a number of tsmSet() calls for certain standard options.

	* tsmConnection.c (tsmDescribeConnection): a function to describe
	a connection to stdout (name, size, format, mode, servers, etc.)

Fri Mar 13 11:40:12 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmEmulate.c (tsmFreePyramid): tsmFreePyramid can be used to
	free a tspec structure return by tsmGetPyramid - this is a big
	No-no now because the underlying connection calls manage all the
	allocation and freeing of tspec structures for you. tsmFreePyramid
	now does nothing (nop) to make sure it doesn't screw things up.

	* tsmAllocTspecs.c (tsmFreeTspec): does what tsmFreePyramid used
 	to do. This is now the way to free a Pyramid structure.
	(tsmAllocTspec): a tsmMakePyramid routine to complement
 	tsmFreeTspec

	* tsmArg.c (tsmDescribeArgs): all option descriptions were being
	printed out to stdout, instead of those specified.

	* TsTileSpecUtils.c (tspCalcGeoidSeparation): wasn't transforming
	lat/long values into correct range for lookup table, causing false
	error messages for valid inputs.

Thu Mar 12 15:42:06 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile_dpss.c (tsmWriteTile_dpss): added function to write out
 	tiles to a DPSS set.
	(tsmPrepareDPSSDataset): initialises a DPSS write, gets the alloc
 	info, generates the block map, etc. This is called on first tile
	write (so that we can defer block allocation until we have a tspec)
	(tsmInitDPSSDataset): do any tsmConnect time initialisations
	(those we can do without the tspec).

	* tsmDPSSLoad.c: deleted file. moved funcs to tsmTile_dpss.c
	
	* tsmTile.c (tsmTileReqAdd): added checks to see if the requested
	tile coordinates and level number exist in the dataset.
	
Wed Mar 11 11:08:45 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTile.c (tsmReadNextTile): Localdisk speed optimisation!!
  	Previously if you started a new tile request list before reading
 	in all of the tiles from an older request list, then the tsmApi
 	would continue to read from the old request list. Now we discard
	the old list as soon as we get a new list and use this new list.
	This didn't happen before because there was an uneccessary
	condition around the code to check for a new read list which
	basically said only switch to a new list if this one is empty or
	invalid. This condition now survives only in the memory of CVS.

	* tsmPurl.c (tsmSetHttpToLocalFile): disabled the http->file
	conversion. This has caused one or two problems in the past with
	not doing the conversion correctly (e.g. there is no standard way
	to know where an arbitrary web directory exists on localdisk). We
	could look into ways to kludge this, but with the new single-file
	tspec, accessing info over http is much faster and so maybe we
	should just say http is http. I'm open to suggestions though...

	* tsmAllocTspecs.c (tsmCopyIdentityTspec): when copying the
	IdentityTspec of a pyramid, if the source type was set the a bug
	caused the name of the pyrmamid to be also set to the source type.

Tue Mar 10 15:00:04 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmChecksum.c (ip_checksum): moved the function checksum() from
 	checksum.c to tsmChecksum.c and renamed it as ip_checksum to help
 	avoid any function name conflicts. It doesn't appear to be used
	anyway.
	(tsmCalcTileChecksum): add a routine to calculate a checksum for
	a single tile under the connection-based API.

	* checksum.c: deleted file.

	* tsmArg.c: [new file] contains routines to help the parsing of
 	command line arguments in tsmApi applications and to allow tsmApi
 	to parse certain command line options itself and act upon these
 	accordingly.

Sun Mar  8 16:45:38 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* test/: removed all files in the test directory. These files are
 	now rather out of date. Also, all example source code is currently
 	available via the web page which means one point of update.

	* tsmUTM.c: renamed tsmGeoToUTM as tsmLatLongToUTM to avoid
	confusion between geodetic and geocentric. 
	renamed tsmUTMToGeo as tsmUTMToLatLong

Fri Mar  6 15:13:32 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmEmulate: [new file] contains all of the functions for the
	emulation layer of the new tsmApi. These provide backward
	compatibility with the old API in way that uses the new interface.
	tsmEmulate_dpss.c: [new file] emulation for old DPSS interface.
	tsmEmulate_local.c: [new file] emulation for old localdisk interface.
	tsmEmulate_web.c: [new file] emulation for old http interface.

	* tsmPyramidInfo.c: [new file] contains the old routines for
 	querying all server information about a dataset.
	tsmPyramidInfo_dpss.c: [new file] query DPSS server config
	tsmPyramidInfo_dpss.c: [new file] query localdisk config
	tsmPyramidInfo_local.c: [new file] query http server config

	* tsmLocalDbase: [new file] contains all of the old routines for
	managing the local database files: PyramidUrls and GeoPyramidUrls.
	tsmLocalDbase_dpss.c: [new file] DSM manipulation functions
	tsmLocalDbase_local.c: [new file] localdisk local dbase functions
	tsmLocalDbase_web.c: [new file] http functions for local databases

	* tsmTopIO_web.c, tsmTopIO_local.c, tsmTopIO_iss.c, tsmTopIO.c,
 	tsmTileIO_web.c, tsmTileIO_local.c, tsmTileIO_iss.c, tsmTileIO.c,
 	tsmStructs.h, tsmProts.h, tsmIntDecs.h, tsmInt.h, tsmDecs.h,
 	locking.h, TsTileSpecProts.h, TsTileSpecGen.h, tsmDecs.c,
 	TsTileSpec.h: have all been removed.
	
	* tsmInternal.h: [new file] this file is used as a single point to
	include all of the required header files for the internal library
	code (tsm.h is of course used by external clients). 

Thu Mar  5 12:01:22 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmAutoStructs.h: goodbye tsmAutoStructs.h and tsmStructs.h
	(yeah, cheer!!). These had to be generated before the main compile
 	in order to reflect changes in the DPSS TileHeader struct. Also,
 	because we used the DPSS TileHeader directly we couldn't add any
 	extra info such as the dataset type. There was also a bug here
	that caused compilation to fail without the DPSS libraries. This
	is all gone now....

	* tsmTile.h, tsmTileInt.h: This is where we now declare the
 	TsmTileHeader structure, with no dependency on the DPSS TileHeader
 	structure. The external definition is opaque (and was before - so
 	we don't break anything). The interal definition has analogs of
	the current DPSS TileHeader fields and an extra dataset type field.

	* tsmTile_dpss.c (tsmReadNextTile_dpss): we now use issReadBlocks
	and read into a DPSS TileHeader structure. Then we map the
	relevant fields from the DPSS header into tsmApi's header. Much
	cleaner (and this mapping used to happen anyway in libTileSvc so
	we don't do any extra work - just hide it inside the library).

1998-03-11  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTileIO.c (tsmGetNextTileHeader): Don't check for invalid
	  trList until after checking for new one.  (From Reddy).

1998-03-05  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmPurl.c (tsmParseUrl): Fix calculation of purl->uri length.

	* tsmJPEG.c: #include "tsmInt.h" for configuration.
	  Optionally define jpeg_create_{,de}compress macros if functions
	  don't exist. (May be needed for IFL 3.2).

	* tsmDatabase.h (TsmCoordSystem): Remove trailing comma.

	* configure.in (TV_CONFIG_WITH_PREFIX, TV_TSMCONFIG, TV_LIBTIFF):
	  Use new m4 macros to replace hairy distributed configuration
	  sequences.
	* acinclude.m4: New file.  Centralize a number of tsm/TV-related
	  configuration definitions.  Points to ../acinclude.m4
	
Thu Feb 26 22:43:53 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmEmulate.c: added support for the x-dpss:// protocol. This can
	be used in the case of either x-dsm:// and x-iss://, i.e. if you
	don't specify a URI section to the URL then it is assumed to be a
	DSM reference, otherwise it refers to the named dataset on the DPSS.

Wed Feb 25 08:17:10 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecDecs.x: removed "test" field from IdentityTspec,
	removed the TIFF file handle fields from SimpleTileSet (now all in
	the connection handle).

	* tsmArray.h: removed the "pyramid" field from the TrItem
 	structure, and the protocol field from the TrLists
 	structure. These are no longer needed as a request list now
 	associated with one specific connection.

Fri Feb  6 11:45:32 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmConnectionParams.c: [new file] extensible hints for connections
	(tsmInitParams): initialise a TsmConntionParams structure
	(tsmSetParam_): set the entry in a TsmConnectionParams structure
	for a particular field. A macro definition, tsmSetParam, is
	provided as the user-level point of entry to the function. Current
	fields include: set id, server combination, and image format.
	(tsmFreeParams): frees up all the memory for a connection param
	(tsmPrintParams): displays the settings in a connecton param

	* tsmConnectionParams.h: [new file] structure and type defintions
	for the connection param facility, including macros to read and
	set the flag field of the connection param.

	* tsmConnection.c: [new file] manage dataset connections
	(tsmConnect): opens a connection to a particular dataset and
	returns a connection handle to use for all further calls. Supports
	Connection Params (see above).
	(tsmDisconnect): routine to clean up once you've finished with a
	connection to a particular dataset.
	(tsmCheckConnectMode): used by all connection I/O functions to
	check the validity of the connection handle and also enforce the
	read/write mode of the connection.
	(tsmReadTspec): reads a tspec file given a file or http URL. This
	is called implicitly by tsmConnect
	(tsmWriteTspec): write the tspec file for a particlar connection
	(tsmSetTspec): insert a copy of a tspec structure into a
	connection structure
	(tsmCopyTspec): copy the tspec structure from one connection into
	another connection's structure
	(tsmSet): set any updatable characteristic of a connection,
	e.g. write tiffs?, JPEG compress quality, etc. 
	(tsmGet): returns the current setting of any connection
	characteristic, e.g. dataset name, image format, read/write mode,
	JPEG compress quality, etc.

	* tsmConnection.h: [new file] contains structure and type
	definitions for handling connections.

	* tsmConnection_dpss.c: [new file] manages DPSS connections
	(tsmConnect_dpss): create a TsmConnection structure for an http
 	dataset. Reads tspec file if available, opens up the DSM and DPSS
	connections, starts reader/writer streams, and supports Connection
 	Params (see above).
	(tsmDisconnect_dpss): disconnects from a DPSS dataset: closes
	connections to the DSM, DPSS, frees tile request list, etc.
	(tsmReadTspec_dpss): read a tspec file for a DPSS dataset.
	(tsmReadEmbeddedTspec_dpss): read a tspec file that is embedded in
	the dataset on a DPSS.
	(tsmGetSetId): works out the set ID for a DPSS pyramid, and
	supports Connection Params (see above).

	* tsmConnection_web.c: [new file] manages connections over http
	(tsmConnect_web): create a TsmConnection structure for an http
 	dataset. Reads tspec file if available, and supports Connection
 	Params (see above).
	(tsmReadTspec_web): read a tspec file over an http link

	* tsmConnection_local.c: [new file] manages local disk connections
	(tsmConnect_local): create a TsmConnection structure for a local
	disk dataset. Reads tspec file if available, and supports
	Connection Params (see above).
	(tsmReadTspec_local): read a local disk tspec file

	* tsmTile.c: [new file] tile I/O routines for connection interface
	(tsmReadTile): reads a single tile from a connection
	(tsmReadNextTile): reads the next tile sent to us for a particular
 	connection (requires building/sending a tile request list)
	(tsmTileReqBegin): being a new tile request list for a connection
	(tsmTileReqAdd): add a new tile request to the request list
	(tsmTileReqEnd): finish the request list and send to server
	(tsmAreTilesTIFF): check if the tiles for a connection are stored
	in TIFF format
	(tsmWriteTile): write a single tile to a dataset

	* tsmTile_dpss.c: [new file] DPSS tile I/O routines for connections
	(tsmSendRequestListToDPSS): send a tile request list to DPSS 
	(tsmReadNextTile_dpss): read the next tile sent from the DPSS
	(tsmWriteTile_dpss): write a single tile to a DPSS

	* tsmTile_local.c: [new file] local disk tile I/O routines
	(tsmReadNextTile_local): read the next tile from local disk
	(tsmReadTIFF): read a tile from a Tagged TIFF format file
	(tsmWriteTile_local): write a single tile to local disk
	(tsmWriteTIFF_local): write a tile to a Tagged TIFF format file
	(tsmAreTilesTIFF_local): check to see if local disk tiles are in
	TIFF format

	* tsmTile_web.c: [new file] routines to perform tile I/O for a
	connection over an http link - currently nothing there.

	* tsmImage.c: [new file] contains image manipulation functions.
	(tsmSaveImage): a routine to write out a tile buffer to a file on
	disk in a number of different formats (specified as a parameter).
	Currently supported formats are: ppm, jfif, gif.
	(tsmSaveImagePPM): a routine to write out a tile
	buffer to a PPM file.
	(tsmSaveImageJFIF): a routine to write out a tile buffer to a
	JPEG/JFIF file.

	* tsmImage.h: [new file] contains definitions for tsmImage.c,
	including an enum for all the available output image format.

Thu Jan  8 09:42:06 1998  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmPurl.c: made creation of http->file uri string more
 	robust. It was writing beyond the end of the allocated memory
 	causing TV to bomb out whenever accessing DPSS datasets.

Fri Dec 19 10:38:00 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmAllocTspecs.c (tsmFreePyramid): free the rectification grid
	Purl if it has been allocated

	* tsmDatabase.c (tsmUpdateDatabaseFromServer): if a pyramid tspec
	has a footprint defined then use that, otherwise try to calculate
	one from the projection matrices that we have.

	* TsTileSpecParse.c (tspParseTspecLine): extended tspec parser to
 	read in [latlong|utm|geo]-footprint fields as well as the
	rectification fields.

	* TsTileSpecOut.c (tspSaveRectificationTspec_fp): new func. writes
	out the rectification information to a tspec file.

	* TsTileSpecDecs.x: add fields to the Pyramid structure:
	rectification, rectificationGrid, and footprint.

	* tsmDatabase.h: added a Footprint structure which can hold a
	footprint in UTM, Lat/Long, or Geocentric coordinates. TsmDataset
	now uses this general structure rather than explicitly listing
	each supported coordinate system.

	* tsmDatabase_local.c (tsmParseDatabaseLine): added parse routine
	to read in a geocentric footprint (geo-footprint). Also, we no
	longer convert UTM to Lat/Long when reading UTM footprint and vice
	versa - only one coordinate system is valid at any point.

Wed Dec 17 17:18:01 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.h: renamed GeoCoord and GeoFootprint to LatLongCoord
	and LatLongFootprint, and introduced two new structures called
	GeoCoord and GeoFootprint for geocentric coordinates (x,y,z).

	* tsmDatabase.c (tsmCalcFootprintFromXform): if we try to add an
	lvcs dataset to the database, then we work out its geocentric
	footprint via the (ix,iy) -> (u,v) -> lvcs -> geocentric transform.

Tue Dec 16 10:40:56 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmPurl.c (tsmParseUrl): improved the check for whether an http
 	or file URL can be converted to a file://localhost URL. If the
 	host and localhost domain names are the same but the machine names
 	are different, then maybe we can access the file over NFS, so we
 	stat the file and set URL to file://localhost if this works. If
	the host and localhost names match exactly, no stat is needed.

	* tsmHost.c (tsmIsLocalHost): now also checks to see if the domain
 	name part of the two hostnames are the same, e.g. so that we can
 	match two hosts such as "lomond.ai.sri.com" and "www.ai.sri.com".
	Return code = 1 (full match), 2 (domain match), 0 (no match).

	* TsTileSpecGen.c (tspCreatePyramidUTM): removed the upper-right
	UTM coord params (redundant with res & pixel dimensions), and
	added a parameter for the source_type;

Mon Dec 15 12:03:53 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDatabase.h: new file. Data structs for dataset database.
	
	* tsmDatabase.c: new file. High-level database maintenance funcs.
	(tsmReadDatabase): new func. parse a database file into a database
 	structure
	(tsmWriteDatabase): new func. write out a database structure to a
 	database file
	(tsmAddDataSetToDatabase): new func. adds all dataset instances to
 	a database if they are not already there
	(tsmRemoveServerSetsFromDatabase): new func. removes all instances
 	from a database that exist on the specified server
	(tsmUpdateDatabaseFromServer): new func. contact the specified
 	server and update the database with all of the instances that
 	the server holds information on.
	(tsmAddServerToDatabase): new func. add a server to a database
	(tsmRemoveServerFromDatabase): new func. remove a server from a
	database
	(tsmCalcFootprintFromXform): new func. calculates the footprint
 	entry of a dataset from a pyramid's tspec structure
	(tsmMakeDataSetInst): new func. allocates a new dataset instance
	(tsmFreeDataSetInst): new func. frees a dataset instance
	(tsmMakeDataSet): new func. allocates a new dataset
	(tsmFreeDataSetContents): new func. frees the contents of a
 	dataset
	(tsmFreeDataSet): new func. frees a dataset
	(tsmFreeServer): new func. frees a server
	(tsmPrintDataSet): new func. outputs formatted dataset contents
	(tsmPrintServer): new func. outputs formatted server contents
	(tsmMakeDatabase): new func. allocates a new database
	(tsmFreeDatabase): new func. frees a database
	(tsmPrintDatabase): new func. outputs a formatted database

	* tsmDatabase_local.c: new file. Routines to read and write local
 	database files.
	(tsmParseDatabaseLine): new func. parses a single line from a
 	database file into a database structure
	(tsmReadDatabase_local): new func. parses an entire local disk
 	database file into a database structure
	(tsmWriteDatabase_local): new func. writes out a database
 	structure to a file on local disk
	(tsmNewDataSetInstance): new func. grow a dataset's instance array
	(tsmDeleteDataSetInstance): new func. delete an entry in a
 	dataset's instance array
	(tsmNewDatabaseDataSet): new func. grow a database's dataset array
	(tsmDeleteDatabaseDataSet): new func. delete an entry in a
 	database's dataset array
	(tsmNewDatabaseServer): new func. grow a database's server array
	(tsmDeleteDatabaseServer): new func. delete an entry in a
 	database's server array

Sat Dec 13 13:08:10 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecOut.c (tspSaveCoordTspec_fp): increased precision with
	which the equatorial and polar radii values are written to tspec
	(they're doubles but were being written out only to float precis.)

	* TsTileSpecUtils.c (tspPrintFloatVector): increased precision with
	which float arrays are written, e.g. the uv-ixiy matrices in the
	tspec were getting rounded off more than they need to be.

	* TsTileSpecParse.c (tspParseTspecLine): changed tspec file parser
 	to use a hash key based upon the first 3 letters of a keyword,
 	then use strcmp's only after that. This is much more efficient
 	than using a list of if/elseif's.
	(tspIsToken): removed function - obsoleted by hashed keyword lookup

	* TsTileSpecUtils.c (tspOpenForWrite): fixed the warning messages
	that were caused by the tspFileStart+1 and tspFileEnd-1 lines.

Fri Dec 12 09:25:52 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDecs.h: added an imageFormat field to the ServerGroup struct

	* tsmTopIO_iss.c (tsmGetPyramidInfo_dsm): fill in the image format
	field of each DPSS ServerGroup.

	* tsmTileIO_web.c (tsmIsTIFFPresent_web): new function. checks to
 	see if a TIFF file exists at the end of an HTTP URL.

	* tsmTileIO.c (tsmIsTIFFPresent): now handles HTTP URLs as well as
	local disk URLs.

	* TsTileSpecUtils.c (tsmLFToSpace): new function. Converts any \n
 	chars in a string to spaces - needed to enforce that any user
 	input strings for the tspec file stay on one line.
  	
	* TsTileSpecOut.c (tspSaveSimpleTspec): using tsmLFToSpace, ensure
 	that the description field stays on one line of the tspec file
	(tspSavePyramidTspec_fp): ditto
	(tspSaveTerraFormRectangularAreaTspec): ditto
	(tspSaveRectangularORGATspec): ditto
	(tspSaveIdentityTspec_fp): ditto, for name, operation-done-by,
 	operation-date, and source-type fields
	
	* TsTileSpecParse.c (tspParseTspecLine): new tspec parse routine
	didn't look for image-hierarchy-* fields. Added these. Also added
	the new source-type field.

Thu Dec 11 13:47:06 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecOut.c (tspSaveIdentityTspec_fp): write out source_type
	field, using "unknown" if not specified.

	* TsTileSpecDecs.x: added a source_type field to IdentityTspec.

Wed Dec 10 15:17:06 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUtils.c (tsmDateString): new function. Returns a date string
	for the current time/date, or for a specific time_t value.

Tue Dec  9 10:03:39 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecParse.c (tspExtractTokenAndData): skip over any
 	initial whitespace before a database/tspec keyword.
	(tspReadLineFromTspec): check that an entire line is empty (spaces
 	or tabs) before discarding it, rather than just checking to see if
 	the first char is a space

	* tsmDecs.h: moved MAX_TSPEC_LINE_LENGTH from TsTileSpecParse.c so
	that the database reading routine can see the value.

Mon Dec  8 14:43:46 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmPurlDefns.x: include the rpc/xdr.h header in the .h file

Thu Dec  4 13:51:04 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO_iss.c (tsmGetPyramid_dsm): check that the set that we
 	open is actually a Pyramid. If not, then return with an error
	(tsmGetGeoPyramid_dsm): check that the set that we open is
 	actually a GeoPyramid. If not, then return with an error

	* tsmTopIO.c (tsmGetPyramid): added tsmISS to the protocol
 	switch. Previously you couldn't call tsmOpen with a DPSS URL, e.g.
  	x-iss://iss-1-atm.sri.magic.net/Pyramids/ntc-1-utm-2scene.128.oi.
	(tsmGetGeoPyramid): added tsmISS to the protocol switch here also.
	(tsmGetPyramidBasePurl): Previously you could not call tsmOpen()
 	with a DSM URL and then just pass a set number as the pyramid name
 	for tsmGetPyramid. This will work now - tsmGetPyramidBasePurl will
 	check to see if the pyramid name is a number, and if so it will
 	create a full x-dsm://host/Pyramids/set-no URL for it.
	(tsmGetGeoPyramid): same again - allow just a set number to
	specify the GeoPyramid if we already know the DSM host to use.

	* tsmTopIO_iss.c (tsmEnsureDSMOpen): new function. Checks to see
 	if both tsmInit_dsm and tsmOpen_dsm have been called, and also to
 	set the dbPurl correctly if necessary.
	(tsmGetPyramid_dsm): use tsmEnsureDSMOpen to make sure that
 	tsmh->issInt has been allocated. This might not be the case if we
 	called tsmOpen() with no URL and then called tsmGetPyramid().
	(tsmGetGeoPyramid_dsm): same again - use tsmEnsureDSMOpen() to
 	ensure that tsm->issInt has been allocated before using it.

1997-12-04  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmIntDecs.h: Include <pthr/trace.h> for tracing.
	* tsmTrace.h.in: Ditto.

	* configure.in: Change checks for pthread.h and pthr/trace.h to
	  reflect split in directories.

Wed Dec  3 15:46:55 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO_local.c (tsmReadNameUrlIds): [Geo]PyramidUrls can now
 	contain empty string locations, i.e. "" as well as " ". Also, if
 	there is more than one location specified on a line, we don't
 	barf. Just take the first one. This allows us to read future
 	[Geo]PyramidUrls files, potentially containing multiple URLs for a
	pyramid. Updated all error reporting to use tsmError. Explicitly
	check for EOF during read and give a more useful error message.
	
	* tsmPurl.c (tsmFilenameToUrl): strip leading spaces from local
	filenames (previously done for URLs, but not for local filenames)
	(tsmParseUrl): strip trailing spaces from URLs (and local
	filenames). Also, skip any spaces between the protocol string and
	the hostname.

Tue Dec  2 11:50:16 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDPSSLoad.c (tsmLoadTspecOnDPSS): finished the tspec to DPSS
 	loading routine. All works fine now with the latest DPSS 2.4.4
 	patches (dated 2 Dec 1997 or later).

	* tsmTopIO_iss.c (tsmReadTspecFromDPSS): finished the tspec from
 	DPSS routine.
	(tsmGetPyramid_dsm): if a DPSS pyramid has no metadata (tspec)
 	URLs associated with it (or if they don't work), then we try to
 	read the tspec file from the DPSS itself.
  	
	* tsmTspecUtils.h: changed name of TSM_TSPEC_BLOCK_KEY inline with
 	the DPSS define name (TSPEC_BLOCK_KEY). Only defined if not
 	already.

Mon Dec  1 10:18:55 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmPurl.c (tsmParseUrl): correctly expand the "/~user" part of a
 	URL. Looks up the passwd file entry for the account to get the
 	full pathname to use, instead of assuming /homedir/user. Needed to
 	do this because the TIOC use /usr/people and not /homedir.
	(tsmFilenameToUrl): moved from tsmTileGen.c. Extended to now
 	handle filenames beginning with "~user/" or "~/", as well as
 	"file://localhost/~user", and correctly expand these cases as
 	described above.

	* tsmDPSSLoad.c (tsmEnsureDPSSOpen): create the dbPurl for a DPSS
 	database as an x-dsm: URL, not an x-iss: URL.

Wed Nov 26 12:16:53 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmIntProts.h: add prototypes for tsmDPSSLoad.c internal funcs

	* tsmAllocTspecs.c (tsmCopyPyramid): robustified pyramid copy
	routine - don't attempt to copy the tspecLevel array if none has
	been allocated.

	* tsmTileIO_iss.c (tsmGetNextTileData_iss): test for whether an
	incoming DPSS tile is raw/jpeg was wrong. Should check for
	specific size, not <= size (because DEMs are smaller than JPEG
	compressed OIs currently).

	* tsmTileIO_local.c (tsmGetTile_local): don't try to look for JPEG
	versions of DEMs if the DEM isn't stored in TIFF format - instead,
	use the .tile format data for DEMs. This is a bug that crept in as
	a result of supporting local OI pyramids containing only JPEG data.

1997-11-26  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmUtils.c (pthr_trace_intArray): Reconstruct to use
	  pthr_trace(). Much safer this way.

	* configure.in (AC_FUNC_ALLOCA): Check for alloca().
	(RPATH): Check more carefully for existence of potential RPATH
	  directories.

	* tsmInt.h: Add initialization to allow use of alloca().

Tue Nov 25 15:35:30 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDPSSLoad.c (tsmUpdateBlockTable): DPSS continuation loads
 	work now!!! Included the relevant db_cursor routines required for
	the DPSS 2.4.4 updates and all works great now.

	* TsTileSpecParse.c (tspParseTspecLine): parsing routine for new
 	tspecs was looking for inverseFocalLength field, instead of
 	inverse-focal-length.

	* tsmTopIO_iss.c (tsmGetGeoPyramid_dsm): as with DPSS pyramids,
 	previously we only took the very first metadata (tspec) URL and
 	tried that - if it failed then you were SOL. Now we try all of the
 	metadata URLs associated with a GeoPyramid until we find one that
 	works. If we have to try another metadata URL then we output a
 	message to state this and show the next URL being tried.
	(tsmGetPyramid_dsm): if we have to try another metadata URL then
 	output a message to state this and the next URL being tried.

	* tsmTileIO_local.c (tsmGetTile_local): if there is not a TIFF
	file in the image format requested, then check to see if there is
	a TIFF in another format and use that one if found (also, set this
	to be the default image format to use thereafter). This means that
	we can now read a pyramid which only has, say, JPEG TIFFs even
	though we tsmSetReadTileFormat( tspLrbtRaster ).

1997-11-25  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in: Check carefully whether to augment search with
	  $prefix/include and $exec_prefix/lib.

	* tsmDPSSLoad.c (tsmGetExistingBlockMap): Reverse check to use
	  DPSS_CONT_LOAD.
	(tsmUpdateBlockTable): Ditto.

	* configure.in (AC_CHECK_FUNCS(iss_db_get_next_block)): Robustify
	  checking for DPSS_CONT_LOAD and reversed sense from
	  NO_DPSS_CONT_LOAD.

1997-11-24  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTopIO_iss.c (tsmReadTspecFromDPSS): Moved from
	  tsmDPSSLoad.c.  Isolates DPSS upload functions completely.

Mon Nov 24 12:43:45 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDPSSLoad.c (tsmUpdateBlockTable): conditionally implement
	function body only if DPSS continuation support available.
	(tsmGetExistingBlockMap): ditto

	* configure.in (NO_DPSS_CONT_LOAD): added check to see if func
 	exists in DPSS includes, and also that it has enough parameters, to
 	enable continuation loads to a DPSS. Set a define in config.h if
 	functionality not available. (iss_db_get_next_block doesn't exist
	in Irix5.3 DPSS libs and the param count changed in a recent 2.4.4
	patch.)

	* TsTileSpecGen.c (tspCreatePyramidUTM): added extra parameter to
	specify UTM zone of mosaic being created. Updated projection.tspec
	calculations to calculate the geoid-sep value correctly (needed to
	convert UTM to Lat/Long).

	* tile-sets.html: removed file. Obsoleted by new web pages.
	* tsm-api.html: removed file. Obsoleted by new web pages.
	* tsm-database.html: removed file. Obsoleted by new web pages.
  	* tsm-sources.html: removed file. Obsoleted by new web pages.

1997-11-21  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* configure.in (AC_ARG_WITH(dpss)): Reconstruct so that we don't
	  need to specify a DPSS version.  Determined automatically.
	(AC_CHECK_FUNCS(issGetInternalVersInfo)): Determine method to
	  obtain library version.
	(AC_CHECK_LIB(jpeg)): Now need to verify existence of jpge library.
	Check that $prefix is a directory before using it.

	* tsmTrace.c (tsmPrintReleaseInfo): Dependent on
	  HAVE_ISSGETINTERNALVERSINFO.

Thu Nov 20 14:28:31 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUTM.c: new file. contains routines to convert between
	lat/long and UTM coordinate systems (and vice versa). Functions in
	question are: tsmGeoToUTM() and tsmUTMToGeo(). Based upon source
	code from the DMAMUSE package.

Thu Nov 20 14:28:31 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* configure.in: removed -lvideo from DPSS 2.4.4 linker line

	* tsmDPSSLoad.c: new file. Put all DPSS loading routines here so
 	that they don't get linked if you don't use them - this caused a
 	problem with the Irix 5.3 DPSS 2.4.3 libs which didn't have some
 	functions compiled in.

Wed Nov 19 10:51:19 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO_iss.c (tsmLoadGeoPyramidToDPSS): new function. Will
	write out a GeoPyramid set to a DPSS.

	* tsmPurl.c (tsmParseUrl): if the URL to parse is stdin/out/err,
	then make the uri field (e.g.) "stdout", not "/stdout". This now
	makes things like tsmPutPyramid() with "stdout" work correctly
	again.

	* tsmTileGen.c (tsmFilenameToUrl): if filename is "stdout",
	"stdin", or "stderr", then don't prepend the current directory to
	make an absolute pathname.

Tue Nov 18 20:27:52 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO_local.c (tsmWriteNameUrlIds): when writing the
	PyramidUrls and GeoPyramidsUrls databases, use an empty string for
	each location where the directory of the Pyramid/GeoPyramid is the
 	same as the directory of the database file.

Fri Nov 14 09:29:34 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmUtils.c (tsmInverse3x3): if you had really large resolution
 	values (e.g. 16384), then you would loose precision on the inverse
 	of the image tranform matrix. Now we do all internal manipulations
 	using doubles instead of floats to solve the problem.
	(tsmDet3x3): calculate the determinant as a double
	(tsmDet2x2): calculate the determinant as a double

	* TsTileSpecOut.c (tspSaveTspec): tried to write out the
	image-transformation tspec for .val[0]! should be minLevel, not 0,
	with the new offset array stuff. Problem showed up for DEMs only.

Wed Nov 12 17:20:34 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO_iss.c (tsmLoadTspecOnDPSS): new function. Will write
	out a pyramid's tspec file to a DPSS.

1997-11-12  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmUtils.c (tsmElapsedTime): Simplify.

1997-11-11  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (pkginclude_HEADERS): Moved gd*.h sih*.h ezio.h and
	  xv.h to EXTRA_HEADERS.  Thus not installed to include/tsm

	* tsm.h: Remove reference to sih.h

	* tsmDecs.h: Remove reference to sihDecs.h.

Tue Nov 11 09:17:47 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTileIO_iss.c (tsmGetNextTileData_iss): now supports reading
	and decompression of JPEG tiles on a DPSS - N.B. there is no
	compression info in the TileHeader so we currently use the tile
	size as a way of deciding beforehand if the tile data has been
	JPEG compressed - not good, should have compression info in
 	TileHeader.

	* tsmTopIO_iss.c (tsmGetPyramid_dsm): previously we only took the
 	very first metadata (tspec) URL and tried that - if it failed then
 	you were SOL. Now we try all of the metadata URLs associated with
 	a set until we find one that works.
	(tsmGetPyramidInfo_dsm): now also fills in the metadata fields of
 	the PyramidInfo structure.

Fri Nov  7 11:13:17 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmImageUtils.c (tsmRgbBufferToGifFile): added a (char *) cast
	to the rgb_image_to_gif_file() call to stop a warning message.

	* tsmTileGen.c (tsmDem2Tile): routine didn't fill the
 	pyramid->tileTspec structure with any values (just the tspecLevel
 	TileTspecs) and so tsmPutTile got confused - don't know how this
 	managed to work before.
	(tsmImg2Tile): same as for tsmDem2Tile.

	* tsmTileIO_local.c (tsmGetLocalTileFromTIFF): updated the local
	disk version of tsmGetTile to use the new JPEG decompression
	routine (see below) - get's rid of a flip operation on the tile.

	* tsmTileGen.c (tsmDem2Tile): a DEM image is now always written
	out in the old .tile format (TIFF not applicable as VRML will
	eventually be used). 

	* TsTileSpecOut.c (tspSaveTileTspec_fp): total-num-pixels-per-tile
	fields are no longer written out to the tspec file - not necessary
	as can be computed from numPixels and overlap.

	* tsmAllocTspecs.c (tsmFillSimpleTileSets): totalPixels[n] values
 	now calculated explicitly from numPixels{X|Y} + overlap[n] for
	all TileTspecs in a pyramid.

	* tsmJPEG.c: New file (JPEG compress/decompress TV tiles)
	(tsmJPEGCompressTile): JPEG compress an lrbt tile in memory
	(tsmJPEGDecompressTile):  Decompress a JPEG tile to lrbt format

	* tsmTopIO_iss.c (tsmPrepareDPSSPyramid): Prepare a DPSS for writing
 	out tiles to a pyramid - first step in loading tiles to DPSS
	(tsmLoadTileOnDPSS): Write a single tile to a DPSS pyramid 
	(tsmFinishDPSSLoad): Tell the DPSS and DSM that a load has finished
	(tsmGetPyramidSetId): Finds a pyramid's set ID (finds unique
	pyramid name/server group combination).

Tue Nov  4 10:04:53 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* Makefile.am (lib_LIBRARIES): added tsmDecs.c to list of sources

	* tsmDecs.c: New file (API interface to data structures in tsmDecs.h)
 	(tsmSetPyramidInfoName): Copy a name into the PyramidInfo structure.
	(tsmSetPyramidInfoPyramid): Add a Pyramid into the PyramidInfo
 	structure
	(tsmSetPyramidInfoSetId): Sets the set ID for a server group in a
 	PyramidInfo
	(tsmSetPyramidInfoMaster): Sets the master host name for a server
 	group in a PyramidInfo
	(tsmAddPyramidInfoServer): Adds a server host name to a server
 	group in a PyramidInfo
	(tsmAddPyramidInfoMetaData): Adds a metadata location to a server
 	group in a PyramidInfo
	(tsmMakePyramidInfo): Allocate a PyramidInfo structure
	(tsmFreePyramidInfo): Free a PyramidInfo structure
	(tsmSetServerGroupId): Sets the set ID for a server group
	(tsmSetServerGroupMaster): Sets master host name for a server group
	(tsmAddServerGroupServer): Adds a server host name to a server group
	(tsmAddServerGroupMetaData): Adds a metadata URL to a server group
	(tsmGrowPyramidInfoServerArray): Free the contents of a ServerGroup
	(tsmPrintServerGroup): Moved from tsmTopIO.c
	(tsmPrintPyramidInfo): Moved from tsmTopIO.c
	(tsmPrintPyramidInfos): Moved from tsmTopIO.c
	(tsmPrintGeoPyramidInfo): Moved from tsmTopIO.c

Mon Nov  3 11:00:39 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO.c (tsmPrintPyramidInfo): updated routine to display
	metadata locations.

Thu Oct 30 10:32:30 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmDecs.h: updated the definition of ServerGroup to hold an
	array of metadata urls that the DPSS uses to point to tspecs.

	* tsmChecksum.c (tsmSetPyramidChecksum): (new func) takes a
	checksum array and copies it into the lrbt or jpeg checksum array
	of a pyramid.

	* tsmTileGen.c (tsmImg2Tile): added an imgFormat parameter in
	order to specify the generation of lrbt or jpeg tiles (was
	hardcoded to lrbt before)
	(tsmDem2Tile): ditto

Tue Oct 28 16:54:25 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* xv.h: removed trailing comma in enumerator list,
	Conversion. Caused a warning with gcc.
	(RANGE): added previously removed #define - needed by xv24to8.c

	* rgb_image_to_gif.c: declared noqcheck and conv24 to be externs
	(already defined by xv24to8.c). Removed unused variable, cmd.

1997-10-28  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.am (libtsmApi_a_SOURCES): Remove reference to
	  xvmisc2.c.

	* TsTileSpecIn.c (tspReadOldPyramid): Call
	  tsmOffsetArrayCallocRange() with minLevel and maxLevel to
	  allocate tspecLevel.

	* configure.in (AC_C_INLINE): Add call and subsequent test to
	  define HAVE_INLINE.
	(AC_CHECK_LIB(Csup)): Add library at end when needed.

	* gd.c (gdCompareInt): Arguments made compatible with qsort().

	* gd.h (rgb_image_to_gif_file): image is now properly declared as
	  an `unsigned char *'.

	* rgb_image_to_gif.c (rgb_image_to_gif_file): Change image24 to
	  take `byte 8' and change call to Conv24to8() to reflect change
	  in prototype.

	* tsmAllocTspecs.c (tsmMakeSimpleTileSetArray): Call
	  tsmOffsetArrayCallocRange() with minLevel, maxLevel instead of
	  offset and length.
	  (tsmMakeChecksum): Call tsmOffsetArrayMallocRange() with
	  minLevel and maxLevel+1.

	* tsmGenArray.h (tsmOffsetArrayMallocRange): Add call which takes
	  min and max indices instead of offset and length.
	  (tsmOffsetArrayCallocRange): Ditto.

	* tsmInt.h: #include "config.h" moved to start and protected with
	  HAVE_CONFIG_H.

	* tsmTileIO_web.c (tsmGetTile_web): Cast tileBuffer to `char *'
	  for call to tsmHttpUrlToBuffer().

	* tsmUtils.c (tsmCopyPyramidLevelToBinaryStream): tileBuffers and
	  position are `unsigned char *'.

	* xv.h: Prototype functions and remove dependencies on xv and X11.

	* xvmisc2.c: Remove file.  No longer needed.

	* xv24to8.c (Conv24to8): Change arguments so that caller provides
	  pointer to destination image.  Now returns TRUE for success.
	(All functions): Prototype and remove xv dependency.

Wed Oct 22 11:50:07 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTileIO.c (tsmNumBytesPerTile): use pyramid->tileTspec for the
	  calc, not pyramid->tspecLevel.val[pyramid->minLevel].tileTspec

Tue Oct 21 10:25:11 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmChecksum.c (tsmCalcChecksum): rearranged the order of
	  checksum values in the checksum array so that the whole pyramid
	  checksum is given at the end of the array (maxLevel+1).

	* tsmAllocTspecs.c (tsmMakeChecksum): checksum array
	  initialisation was hardcoded to offset being 0. Sorted now.

	* TsTileSpecIn.c (tspReadOldPyramid): Gotcha! Call to
	  tsmOffsetArrayCalloc had incorrect parameters (min/max instead of
	  len/off) - caused no end of havoc later on! All peachy again now.

	* tsmTopIO.c: Added/updated comments for all external functions
	  using Doc++ format to allow automatic generation of API docs.

	* tsmTileIO.c: ditto

	* tsmTileIO_local.c: ditto
	
Fri Oct 17 17:17:49 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* configure.in (AC_PATH_PROG(AR)): Search in /usr/ccs/bin under
	  Solaris.
	(AC_CHECK_FUNC(xdr_int)): Sometimes need to link -lnsl for RPC
	  calls.
	(AC_CHECK_LIB(tiff)): Revamp checking for -ltiff.  May need to
	  add a version test.
	(AC_PATH_XTRA): Remove.
	
	* tsmChecksum.c (tsmChecksumPyramidLevel): Use server number 0
	  throughout.

	* tsmExtProts.h: Reflect changes in tsm{Get,Put}Tile*() arguments.

	* tsmGenArray.h (tsmArrayCalloc): New macro.

	* tsmTileIO.c (tsmGetTile): Now takes mandatory numServer
	  argument.  No longer varargs.
	(tsmPutTile): Now takes mandatory imgFormat argument.  No longer
	  varargs.
	(tsmCheckSumTile): Call tsmGetTile() with numServer argument.
	(tsmGetNextTile): Now takes mandatory numServer argument.
	  Passes on to tsmGetNextTileHeader() and tsmGetNextTileData().
	(tsmGetNextTileHeader): Now takes mandatory numServer argument.
	  No longer varargs.
	(tsmGetNextTileData): Now takes mandatory numServer argument.
	  No longer varargs.

	* tsmTopIO_web.c (tsmLoadGeoPyramidDatabase_web): Remove
	  tmpPathName after use.
	(tsmLoadPyramidDatabase_web): Ditto.
	(tsmGetGeoPyramid_web): Ditto.
	(tsmGetPyramid_web): Ditto.
	(tsmReadCoordTspec_web): Ditto.
	(tsmReadIdentityTspec_web): Ditto.
	(tsmReadImageTransformationTspec_web): Ditto.
	(tsmReadPixelTspec_web): Ditto.
	(tsmReadProjectionTspec_web): Ditto.
	(tsmReadSimpleTspec_web): Ditto.
	(tsmReadTileTspec_web): Ditto.

Wed Oct 15 11:23:50 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecUtils.c (tspCalcGeoidSeparation): converted ffloor()
	  functions to floor() for compatibility with non-SGI platforms
	(tspCalcUTMZone): converted ffloor() function to floor() for
	  compatibility with non-SGI platforms

Fri Oct 10 17:01:24 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* tsmGenArray.h (tsmArrayCalloc): New macro.

	* configure.in (AC_PATH_XTRA): Redo X11 configuration so that
	  should work on systems with non-standard installations.

Fri Oct 10 10:11:41 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmGenArray.h (tsmOffsetArrayCalloc): added a calloc routine for
 	  the offset array support

	* TsTileSpecIn.c (tspReadOldPyramid): changed array allocation
	  from tsmOffsetArrayMalloc to tsmOffsetArrayCalloc - the fields of
	  these structures should be initialised to zero.

	* tsmAllocTspecs.c (tsmMakeSimpleTileSetArray): changed array 
	  allocation from tsmOffsetArrayMalloc to tsmOffsetArrayCalloc - 
	  the fields of these structures should be initialised to zero.

	* TsTileSpecOut.c (tspSaveIdentityTspec_fp): removed "[<lev>]="
	  prefix to each checksum value - not necessary for tspec file,
	  however added this functionality to checksum.c tsmUtils program.

	* tsmAllocTspecs.c (tsmMakeChecksum): len and offset values were
	  not calculated correctly for the tsmChecksumArray - minLevel was
	  used for array length, which resulted in zero-length arrays.

	* tsmChecksum.c (tsmCalcChecksum): updated function to work on a
	  tsmChecksumArray rather than an int list.

	* tsmDecs.h (TSM_GAUSSIAN_FILTER & TSM_POINT_SAMPLE): moved
	  #defines from tsmIntDecs.h to tsmDecs.h to make external

Thu Oct  9 16:35:25 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTileIO.c (tsmPutTile): use the tsmUseNewTileFlag flag to decided
	  to write .tiff or .tiles. Function now only accepts one optional
	  arg - the image format of the tile (default = lrbt)
	(tsmGetTile): no optional argument anymore to specify which image
	  format to read. This is now controlled by the tsmReadTileFormat
	  flag
	(tsmSetUseNewTileFlag): set value of the tsmUseNewTileFlag flag
	(tsmGetUseNewTileFlag): get value of the tsmUseNewTileFlag flag
	(tsmSetReadTileFormat): set the value of tsmReadTileFormat flag
	(tsmGetReadTileFormat): get the value of tsmReadTileFormat flag
	(tsmGetGetTileFlag): get value of the tsmGetTileFlag
	(tsmGetNextTile): removed the imgFormat parameter - now uses the
	  value of tsmReadTileFormat instead
	(tsmGetNextTileHeader): removed the imgFormat parameter - now uses the
	  value of tsmReadTileFormat instead
	(tsmGetNextTileData): removed the imgFormat parameter - now uses the
	  value of tsmReadTileFormat instead

	* tsmTileGen.c (tsmImg2Tile): updated call to tsmPutTile() to
	  remove the parameter defining the tile format to use
	(tsmDem2Tile): updated call to tsmPutTile() to remove the
	  parameter defining the tile format to use

	* tsmUtils.c (tsmCopyPyramidLevelToBinaryStream): updated calls to
	  tsmGetNextTileHeader & tsmGetNextTileData to remove imgformat param

	* tsmIntDecs.h (TSM_TILE_FILE & TSM_TIFF_FILE): #defines removed

Fri Oct  3 15:34:45 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* Release 0.13.

	* tsmTrace.h.in: New file.  Source for tsmTrace.h

	* tsmIntDecs.h: New file.  Contains internal definitions of
	  externally opaque structures.

	* configure.in (PTHR_TRACE): This is now used to substitute into
	  tsmTrace.h from tsmTrace.h.in to indicate whether tsmApi was
	  configured with libpthrutil tracing and reporting functions or
	  not.  This way, tsmTrace.h can be externally visible without
	  containing local configuration information.

	* tsmDecs.h: Move externally opaque structures to tsmIntDecs.h,
	  retaining typedef references here (e.g. TsmHandle).

	* tsmExtProts.h: Add external definition for tsmNumServers().

	* tsmInt.h: Restructure to access "tsmIntDecs.h", which now
	  contains definitions of externally visible, but opaque
	  structures.

	* tsmTopIO.c (tsmNumServers): New function provided to that
	  external routines can query opaque TsmHandle object.

	* tsmTrace.c (tsmError): Provide alternate definition when
	  pthrutil library is not available.
	(tsmStatus): Ditto.

	* tsmUtils.c (tsmCopyPyramidLevelToBinaryStream): Provide tile
	  type arguments to tsmGetNetTile{Header,Data}().

	* update_release.pl: Fix to ensure that release changes are
	  committed before tags are applied.

Wed Oct  1 12:08:26 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* configure.in (TSMLIB): Define as derived from $TSMNAME and use
	  as AC_SUBST() argument.
	(AC_CHECK_FUNCS): Add strtod() and strtol().

	* Makefile.am (TsTileSpecDecs.h): Add rule to automatically create
	  from TsTileSpecDecs.x.
	(TsTileSpecDecs_xdr.c): Ditto.
	(tsmPurlDefns.h): Ditto.
	(tsmPurlDefns_xdr.c): Ditto.

	* tsm.h (pow2): Define macro for integer 2^x.
	(scale2): Define macro for integer x*2^y.

	* tsmGenArray.h (tsmOffsetArray): New macro. Defines an offset
	  array type.
	(tsmOffsetArrayMalloc): New macro. Mallocs memory and offsets
	  array.
	(tsmOffsetArrayDup): New macro. Duplicates tsmOffsetArray.
	(tsmOffsetArrayFree): New macro. Frees tsmOffsetArray.
	(declare_xdr_tsmOffsetArray): New macro. Creates declaration for
	  xdr function to read/write tsmOffsetArray.
	(define_xdr_tsmOffsetArray): New macro. Defines xdr function to
	  read/write tsmOffsetArray.

	(tsmArray): New macro. Defines an array type.
	(tsmArrayMalloc): New macro. Mallocs memory for tsmArray.
	(tsmArrayDup): New macro. Duplicates tsmArray.
	(tsmArrayFree): New macro. Frees tsmArray.
	(declare_xdr_tsmArray): New macro. Creates declaration for
	  xdr function to read/write tsmArray.
	(define_xdr_tsmArray): New macro. Defines xdr function to
	  read/write tsmArray.

	* tsmAllocTspecs.c (tsmFreeIdentityTspecContents): Properly free
	  arrays using tsmArrayFree() and tsmOffsetArrayFree() macros.
	(tsmFreePyramid): Call tsmFreeSimpleTileSetArray() with array
	  pointer argument.
	(tsmCopySimpleTileSet): Use tsmOffsetArrayDup() and
	  tsmArrayDup() to copy arrays.
	(tsmCopyPyramid): Ditto.
	(tsmMakeSimpleTileSetArray): Change arguments to take
	  SimpleTileSetArray pointer and minLevel, maxLevel pair.
	(tsmFreeSimpleTileSetArray): Change arguments to take
	  SimpleTileSetArray pointer.
	(tsmEnlargeSimpleTileSetArray): Change arguments to take
	  SimpleTileSetArray pointer.  Properly manages resizing of
	  tsmOffsetArray.
	(tsmAllocatePyramid): Change function so that arrays are
	  allocated offset against minLevel.  Now takes minLevel and
	  maxLevel arguments instead of numLevels.
	(tsmFillSimpleTileSets): Convert array references to .len and
	  .val instead of .foo_len and .foo_val.
	(tsmMakeChecksum): Change arguments to take tsmChecksumArray
	  pointer and minLevel, maxLevel pair.

	* tsmExtProts.h (tsmAllocatePyramid): Prototype for new arguments.
	(tsmMakeSimpleTileSetArray): Prototype for new arguments.
	(tsmEnlargeSimpleTileSetArray): Prototype for new arguments.
	(tsmFreeSimpleTileSetArray): Prototype for new arguments.
	(tsmMakeChecksum): Prototype for new arguments.

	* TsTileSpecDecs.x: Convert all array references to tsmArray or
	  tsmOffsetArray references.  Replaces rpcgen-generated
	  foo.foo_len references with foo.len.

	* TsTileSpecGen.c (tspCreatePyramidUTM): Change array allocation
	  calls to tsmArray and tsmOffsetArray macros.
	  Use new versions of tsmAllocatePyramid() and tsmMakeChecksum().

	* TsTileSpecIn.c (tspReadPyramids): Convert array references to
	  .len and .val instead of .foo_len and .foo_val.
	(tspReadGeoPyramid): Ditto and use tsmArrayMalloc() for arrays.
	(tspReadMultiImageTileSet): Ditto.
	(tspReadOldPyramid): Ditto.
	(tspReadIdentityTspec1): Ditto.

	* TsTileSpecOut.c (ftoa): Remove function.
	(tspSaveIdentityTspec_fp): Convert array references to .len and
	  .val instead of .foo_len and .foo_val. 
	(tspSavePixelTspec_fp): Ditto and use format arg %g instead of
	  %s of ftoa().
	(tspSaveProjectionTspec_fp): Ditto.
	(tspSaveCoordTspec_fp): Ditto.
	(tspSaveAllSimpleTspecs_fp): Ditto.
	(tspSaveTspec): Ditto.
	(tspSaveMultiImageTspec): Ditto.
	(tspSaveTerraFormRectangularAreaTspec): Ditto.
	(tspSaveGeoPyramidTspec): Ditto.
	(tspSaveRectangularORGATspec): Ditto.
	(tspSaveOldPyramid): Ditto.
	(tspSaveMultiImageTileSet): Ditto.
	(tspSaveGeoPyramid): Ditto.

	* TsTileSpecParse.c (tspTokenEnd): Add function.
	(tspTokenStart): Add function.
	(tspNextToken): Add function.
	(tspNextSymbol): Add function.
	(tspNextInt): Add function.
	(tspNextDouble): Add function.
	(tspExtractNthSymbol): Use first and last symbols to index
	  tspSymbolFromString().
	(tspParseTspecLine): Convert array references to .len and
	  .val instead of .foo_len and .foo_val and ensure that all offset
	  arrays are indexed properly.

	* TsTileSpecUrls.c (tspFreeNameUrlPairs): Convert array references
	  to .len and .val instead of .foo_len and .foo_val.
	(tspReadNameUrlPairs): Ditto.
	(tspMatchName): Ditto.
	(tspNameToUrl): Ditto.
	(tspSaveNameUrlPairs): Ditto.

	* TsTileSpecUtils.c (tspSymbolStrings): Add comments identifying
	  associated tspSymbol for each string.
	(tspReadSymbol): Use first and last symbols to index search.
	(tspReadListOfSymbols): Ditto.

	* tsmChecksum.c (tsmChecksumPyramidLevel): Convert array
	  references to .len and .val instead of .foo_len and .foo_val.
	(tsmCalcChecksum): Ditto and reflect the fact that checksum
	  array is now indexed by pyramid level.

	* tsmPackTspecs.c (geoPyramidPack): Call geoPyramidUnoffset()
	  before encoding xdr_GeoPyramid and geoPyramidOffset() afterwards
	  so that offset arrays are written compatibly with old format.
	(geoPyramidUnpack): Call geoPyramidOffset() after decoding
	  xdr_GeoPyramid so that offset arrays are properly offset.
	(pyramidPack): Call pyramidUnoffset() before encoding
	  xdr_Pyramid and pyramidOffset() afterwards so that offset arrays
	  are written compatibly with old format.
	(pyramidUnpack): Call pyramidOffset() after decoding xdr_Pyramid
	  so that offset arrays are properly offset.
	(nw_TileSetTspec): Call pyramidUnoffset() before encoding
	  xdr_Pyramid and pyramidOffset() afterwards so that offset arrays
	  are written compatibly with old format.
	(nr_TileSetTspec): Call pyramidOffset() after decoding xdr_Pyramid
	  so that offset arrays are properly offset.

	(identityTspecOffset): New function.  Offsets checksum arrays
	  based on minLevel.
	(pyramidOffset): New function.  Offsets tspecLevel and
	  identityTspec based on minLevel.
	(geoPyramidOffset): New function.  Offsets all component
	  Pyramids based on minLevel.

	(identityTspecUnoffset): New function.  Removes offsets from
	  checksum arrays.
	(pyramidUnoffset): New function.  Removes offsets from
	  tspecLevel and identityTspec.
	(geoPyramidUnoffset): New function.  Removes offsets from all
	  component Pyramids.
	
	* tsmTileGen.c (tsmImg2Tile): Convert array references to .len and
	  .val instead of .foo_len and .foo_val. 
	  Modify call to tsmAllocatePyramid().

	* tsmTileIO.c (tsmNumBytesPerTile): Ensure that calculation is
	  based on tile at minLevel and not level zero.

	* tsmTopIO.c (tsmGetGeoPyramidInfo): Convert array references
	  to .len and .val instead of .foo_len and .foo_val.

	* tsmTileIO_local.c (tsmGetJPEGTileSize): Convert array references
	  to .len and .val instead of .foo_len and .foo_val.
	(tsmGetLocalTileFromTIFF): Ditto.
	(tsmGetTileJFIF_local): Ditto.
	(tsmIsTIFFPresent_local): Ditto.
	(tsmPutLocalTileToTIFF): Ditto.

	* tsmTopIO_web.c (tsmGetPyramid_web): Convert array references
	  to .len and .val instead of .foo_len and .foo_val and use
	  tsmMakeSimpleTileSetArray() to allocate tilesets.

	* tsmTspecUtils.c (fprint_IdentityTspec): Convert array references
	  to .len and .val instead of .foo_len and .foo_val.
	(fprint_CoordTspec): Ditto.
	(fprint_PixelTspec): Ditto.
	(fprint_Pyramid): Ditto.
	(fprint_MultiImageTileSet): Ditto.
	(fprint_NameUrlPairs): Ditto.
	(fprint_GeoPyramidTspec): Ditto.
	(fprint_GeoPyramid): Ditto.
	(check_IdentityTspec_for_strings): Ditto.
	(check_Pyramid_for_strings): Ditto.
	(check_MultiImageTileSet_for_strings): Ditto.
	(check_NameUrlPairs_for_strings): Ditto.
	(check_GeoPyramidTspec_for_strings): Ditto.
	(check_GeoPyramid_for_strings): Ditto.

	* tsmUtils.c (tsmCopyPyramidLevelToBinaryStream): Convert array
	  references to .len and .val instead of .foo_len and .foo_val.

	* test/simple.c (testGeoPyramid): Convert array references to .len
	  and .val instead of .foo_len and .foo_val.

Tue Sep 30 15:24:55 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* TsTileSpecParse.c (tspReadTspec): pyramid->pathName was taken as
	  the tspec filename, not the directory name - fixed now.

	* ezio.c (ezio_init_inimg): updated all error reporting to use
	  tsmError

	* tsmTileGen.c (tsmDownSample_gaussian): removed duplicate error
	  messages from Brian's downsampling code

Thu Sep 25 13:55:29 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTileGen.c (tsmDownSample_gaussian): read to uninitialised
	  memory on first line of image being downsampled - fixed now.
	  This should cure the random noise on top line of output images.

	* TsTileSpecUtils.c (tspAppendFileNameToPathName): not enough
	  memory allocated for the string! Should be length of pathname +
	  length of filename + 2. (Not + 1 - we have the '\0' and
	  potentially the '/' to allocate for.)

	* tsmPurl.c (tsmCopyPurl): the port field was not copied - caused
	  problems when freeing a copied Purl. The port field is now copied.

	* TsTileSpecOut.c (tspSaveTspec): fixed an array bounds write
	  fault caused through tspOpenForWrite writing beyond string size.
	  This is actually fixed in tspAppendFileNameToPathName (as above),
	  but the fix here also ensures the client's parameter is not
	  unexpectedly changed.

	* tsmTopIO_web.c (tsmGetPyramid_web): added support for reading of
	  the new single-file tspec format over http. Currently done by
	  copying remote file to local disk and reading from there.

	* TsTileSpecParse.c (tspIsFileAValidTspec): takes a local filename
	  and tests to see if the file is a valid tspec file - i.e. can be
	  parsed without error.

Tue Sep 23 10:44:42 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTileGen.c (tsmDownSample_psample): function to downsample a
	  source image by point sampling, i.e. taking every 2nd pixel.
	(tsmDownSample_gaussian): function renamed from tsmDownSample -
	  performs a gaussian filtered downsampling of a source image.
	(tsmDownSample): function to downsample image with argument added
	  to control filtering: TSM_GAUSSIAN_FILTER or TSM_POINT_SAMPLE.

Mon Sep 22 12:50:42 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmTopIO.c (tsmLoadGeoPyramidDatabaseIfExist): function to load
	  a GeoPyramidUrls database if it exists, or to return silently with
	  a FALSE return code if it does not exist.
	(tsmSaveGeoPyramidDatabase): routine to write a GeoPyramidUrls
	  file (currently only works for local disk)
	(tsmAddToGeoPyramidDatabase): add a GeoPyramid name to the
	  GeoPyramidUrls database, if not already there. Creates a new
	  database file if one does not already exist

	* tsmTileIO_iss.c (tsmGetNextTileHeader_iss): check for an invalid
	  serverNum should have been a >=, not a >. 
	(tsmGetNextTileData_iss): same update for > to >=

Wed Sep 17 10:55:04 1997  Martin Reddy  <reddy@Lomond.AI.SRI.COM>

	* tsmAllocTspecs.c (tsmCopyPyramid): function to duplicate a
	  pyramid structure, with the option to specify a new base URL
	  for the Purls/pathName. All strings and arrays are also
	  duplicated (deep copy).
	(tsmCopySimpleTileSet): function to do a deep copy for a
	  single SimpleTileSet - used by tsmCopyPyramid above.

Mon Sep 22 15:14:18 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* tsmTileIO_iss.c (tsmGetNextTileData_iss): Fix check of invalid
	  server number.
	(tsmGetNextTileHeader_iss): Ditto.

Mon Sep 15 13:28:33 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* configure.in: Update ARG_WITH(dpss24) target to properly check
	  for threadswrap and spkm libraries.

Wed Sep 10 15:51:46 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* gd.c gd.h: Prototype all functions.

	* tsmAllocTspecs.c (tsmAllocatePyramid): Remove unused variables.

	* tsmTileIO_web.c (tsmGetTile_web): Remove unused variables.

	* tsmTileIO.c (tsmGetTile): Remove unused variables.

	* tsmTopIO_iss.c (tsmMasterHostNames_dsm): Remove unused
	  variables.
	(tsmPrepareForDataSets_iss): Remove unused variables.

	* tsmTopIO.c (tsmGetAllPyramidInfos): Remove unused variables.
	(tsmGetGeoPyramidInfo): Remove unused variables.
	(tsmPrintGeoPyramidInfo): Remove unused variables.

Tue Sep  9 15:48:31 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* configure.in (TSMTILEHEADER_SIZE,TSMAPPREQUEST_SIZE):
	  More reliable, standardized means of extracting these values.

	* tsmAutoStructs.h.in: New file.

Tue Aug 12 11:35:16 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* tsmTopIO_iss.c (tsmClose_dsm): Zero dsmHandle on close.

	* tsmDecs.h (TsmHandle): Remove the #ifdef ISS conditionalization
	  inside the TsmHandle structure.  ISS-specific structure
	  IssInterface created and linked in off of issInt.

	* tsmMakeAutoStructs.c: Deleted.  Functionality moved into
	  configure.in.

Fri Aug  8 17:34:53 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* tsmPurl.c: Skip leading spaces on URL.

Wed Jul 23 12:02:22 1997  Lee Iverson  <leei@Crazypete.AI.SRI.COM>

	* tsmExtProts.h: Remove reference to tsmMemManagerInitialize().
	  No longer needed.

	* TsTileSpec.h: Remove reference to tsmMemManagerInitialize().  No
	  longer needed.

	* tsmMem.c (tsmMemManagerInitialize): Remove so that no longer
	  uses shared memory arena.
	(tsmMemManagerMalloc): Remove SGI-specific reference to usmalloc().
	(tsmMemManagerRealloc): Ditto.
	(tsmMemManagerCalloc): Ditto.
	(tsmMemManagerFree): Remove SGI-specific reference to usfree().

Fri Jun 20 17:45:07 1997  Yvan G. Leclerc  <leclerc@Moose.AI.SRI.COM>

	* tsm...c: Made a number of minor corrections to use DPSS 2.4.3.
	  Also made changes so that clients includeing the tsm.h file
	  no longer see any DPSS data structures nor any DPSS include files.
	  Thus, clients no longer require DPSS include files at all.

Sat Apr 19 20:24:59 1997  Yvan G. Leclerc  <leclerc@Crazypete.AI.SRI.COM>

	* tsmTopIO_iss.c: Finished modifications to use DPSS 2.4.
	  These are currently flagged as #ifdef DPSS24 until all DPSS 2.3
	  systems are eliminated.

	* TsTileSpecUtils.c (tspError): Added check for NULL pathName here
	  and in tspErrorAndClose.

Fri Apr 18 15:24:59 1997  Yvan G. Leclerc  <leclerc@Crazypete.AI.SRI.COM>

	* tsmTopIO.c (tsmGetPyramidInfo): Improved debugging printout.

Mon Mar 17 14:24:58 1997  Yvan G. Leclerc  <leclerc@Crazypete.AI.SRI.COM>

	* tsmTopIO.c (tsmGetPyramidBasePurl): Made minor mods so that tsmh
	  can be NULL when pyramidIdentifier is a URL.  Changes in support
	  of this were made to tsmGetPyramid_local and tsmGetPyramid_web.

Wed Jan 29 10:29:37 1997  Yvan G. Leclerc  <leclerc@Crazypete.AI.SRI.COM>

	* tsmTrace.c (tsmCvsToString): New function that strips the
	  keyword and $'s from a CVS string.
	(tsmApiReleaseOnly): Returns the tsmApi release stripped of CVS stuff.
	(tsmApiReleaseDateOnly): Returns the tsmApi release date stripped
	  of CVS stuff.

	* tsmTileIO.c (tsmGetNextTileHeader): Added level 3 trace when
	  trIndex is out of range.

	* tsmUtils.c (tsmPrintTile): New function to print a tile.

	* tsmTopIO_iss.c (tsmClose_iss): Changed trace to level 1.
	(tsmClose_dsm): Changed trace to level 1.

Wed Jan 15 08:19:22 1997  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile (libtsmApi.a, libtsmApi-DISS.a): Modify rules to reduce
	  library rebuilds.

	* (*.c): More corrections of TSMTRACE args to %p.

Tue Jan 14 17:05:51 1997  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* tsmTopIO.c (tsmGetAllPyramidInfos): Fix TSMTRINC nesting.

Tue Jan 21 16:58:52 1997  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* All Files: Update for libgthread library.

Tue Jan  7 16:49:44 1997  Yvan G. Leclerc  <leclerc@Crazypete.AI.SRI.COM>

	* Added TSMTRINC macro calls to all tsm functions.

Tue Jan  7 10:38:14 1997  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* The beginning of recorded history.