# CERN Library 3.0 Release Notes

This release is the first release of source code which is covered by the new CERN copyright statement. The statement is published in the file COPYRIGH (truncated to 8 bytes) in the distribution packet or in hypertext format.

## More Information

Other pages of interest are:

- Internals and Programmer's Guide
- Working List
- Implementation Specifications
- CERN WWW Software
- Change History

## CERN Library 3.0, Mar 21 1995

Many of the modifications and new features are mentioned under the pre-releases.

- Changed all float to double in order get it consistent with the working floating type in C
- Fixed problems with memory in HTML.c
- Introduced definition of `errno` constants for WIN32, as WinSock doesn't define them using BSD notation

## CERN Library 3.0 Prerelease 3, Mar 10 1995

### New or Changed Features

- All library include files which contains public information for applications are now contained in the single include file WWWLib.h which is the only one necessary PLEASE DON'T USE ANYTHING ELSE!!!
- Changed TRACE messages so that the target is the macro TDEST and not stderr. This means that on platforms that don't support stderr, TRACE messages can be redirected to a local file.
- Due to the PC Port some modules (definition and declaration files) have changed names so that the max length is 8 characters:
  - s?HTFWriter?HTFWrite?g
  - s?HTHistory?HTHist.h?g
  - s?HTEPtoClient?HTEPtoCl?g
  - s?HTDescript?HTDescpt?g
  - s?HTExtParse?HTXParse?g
  - s?HTErrorMsg?HTErrMsg?g
- Move EnableFrom to HTAccess module. This variable determines whether the HTTP header From: should be generated. The default value is off
- Sockets are no longer assumed to be small, non-negative integers, but uses macros. This should ensure portability to Windows NT.
- Introduced socerrno and errno so that WinSock can use its own definition whereas `local' errno can still use the well-known version.
- Introduced `error_stream` as field in HTRequest structure. All information contained in HTTP responses which don't naturally contain a body entity, for example redirection codes (3xx) and client error codes (4xx) will be put down this stream so that it can be put into a debug window.
- HTNewsHost is now a local variable in the HTNews module. Use HTGetNewsHost and HTSetNewsHost to set and get the current value. The news module will be rewritten in the near future as it has many problems.
- The HTTP module understands all HTTP/1.0 return codes and is more solid
- Many portability problems has been solved and optimized. Most system dependent things are now put into tcp module
- Interface to CSO name server made nicer - generates correct HTML

### Bug Fixes

- file:// no more tries ftp:// if host=localhost
- Improved proxy support and fixed bug when reloading a document from a proxy
- Bug fixed in HTGetHostName() which didn't include a dot <.>
- Bug fixed if UserID/passwd was not correct and don't want to retry
- HTErrorAdd and HTErrorSysAdd no always return HT_ERROR
- Fixed bug in HTGetDomainName when no domain name is present at all
- Add output_flush to request structure
- Uses IOCTL as a macro now - not fcntl
- and a lot of other stuff...

## Library 3.0 Prerelease 2, Dec 2 1994

- Introduced memory cleanups from Eric Sink into `HTLibTerminate()`
- Now the client can provocate a call to `HTEventRequestTerminate()` even when the request never enters the eventloop. This is necesary so that the client can cancel busy icons, spinning globes etc.
- Introduced `EVENT_TERM` as return code for the HTEventHandler function
- `HTEventHandler() now` has a double pointer so that the request pointer can be modified from the client
- Fixed bug in `HTSearch()` and `HTLoadRelative()` where wrong return code was returned (BOOL instead of int)
- Introduced BlockingIO field in the request structure to override the the mode registered in the protocol structure. This can be used as an easy way to make blocking I/O

## Library 3.0 Prerelease 1, Nov 26 1994

### New and Changed Features

- Introduced the function HTLibInit() and HTLibTerminate() which MUST be called when the application starts up and terminates.
- Introduced the modules HTThread and HTEvent. HTEvent is the client interface when using multithreaded functionality and HTThread is the internal socket management
- All __STDC__ defines now concentrated to HTUtils.html where it is called _STANDARD_CODE_ so that _cplusplus also handles this
- `new' and `template' not used a names anymore (confuses C++)
- Removed from field in HTRequest structure. This is now handled by the functions HTGetMailAddres and HTSetMailAddress and the flag HTEnableFrom in the HTTP module.
- Changed HTSetMailAddress so that a call with parameter equals NULL or "" clears the contents of the mail-address.
- The number of parameters to Streamstack function is now compatible with the arguments to a stream converter, so that we don't loose any information while putting up the stream stack.
- HTOutputSource variable is removed. You should use WWW_SOURCE in the request structure
- HTGuess stream is a a converter compatible stream so that it actually can be setup as a converter
- The stream methods `abort' and `_free' now returns int instead of void. On success from these methods `_free' returns 0 and `abort' return EOF
- Taken HTEscape and HTUnescape and put them into the HTEscape module. The functionality is the same but now they can be used in utility programs without linking in the whole Library

### Bug Fixes

- Removed bug in WAIS module which caused a lot of core dumps
- Removed bug in format classification from URL suffix in HTGoper when the file was plaintext
- localhost is now recognized again after canonicalization in `HTLoadFile()`
- WAIS SEARCH now produces proper HTML
- Max number of lines in WAIS decreased to 200 as 250 (previous) dumps core
- Bug fixed in `HTGetHostName()` if we must use the getdomainname() function.
- Added some support for SCO
- Handling of gopher items of type ERROR (3) changed so no more core dumps in server