100% found this document useful (1 vote)
247 views169 pages

Datawell Manual Waves4 Operator

This document provides instructions for installing and configuring the Waves4 software for Datawell Waverider buoys. It describes the programs Buoyd and Waved that are used to collect and process data from the buoys. The manual also explains how to configure settings for these programs using the Waves4 configurator and configuration files. Logging functions and how to properly run the programs as background processes are also covered.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
247 views169 pages

Datawell Manual Waves4 Operator

This document provides instructions for installing and configuring the Waves4 software for Datawell Waverider buoys. It describes the programs Buoyd and Waved that are used to collect and process data from the buoys. The manual also explains how to configure settings for these programs using the Waves4 configurator and configuration files. Logging functions and how to properly run the programs as background processes are also covered.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 169

Datawell Waves4 Manual

Software for Datawell Waverider buoys

Operator Manual

For Waves4 version 5.4.0

Service & Sales


Voltastraat 3
1704 RP Heerhugowaard
The Netherlands
T + 31 72 534 5298
v + 31 72 572 6406
www.datawell.nl
30 January, 2019
1
Contents
1 Introduction 5
1.1 Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Buoyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Waved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3 The Waves4 program . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4 The Waves4 configurator . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Technical requirements 8

3 Installation 9
3.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3 Upgrading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4 Configuring 10
4.1 Setting up a network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2 Waves4 configurator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2.1 Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.2 Buoyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.3 Waved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 Buoydrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.1 Log section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.2 Receiver section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.3 Argos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3.4 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3.5 iBuoy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3.6 MkIII iBuoy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3.7 RX-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.8 RX-C serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.9 RX-C Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.10 SBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.11 MkIII SBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.12 MkIII SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.4 Wavedrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.4.1 Buoyd section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4.2 Campaign section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.5 Waves4rc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.5.1 Waved section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.5.2 Units section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5 Logging 67
5.1 Buoyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.1.1 Program log files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.1.2 SBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1.3 Argos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.1.4 iBuoy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2 Waved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

2
5.2.1 CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6 Running 76
6.1 Starting a background program . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2 Buoyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2.1 Starting as daemon (Linux only) . . . . . . . . . . . . . . . . . . . . . . 76
6.3 Waved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.3.1 Starting as daemon (Linux only) . . . . . . . . . . . . . . . . . . . . . . 76
6.4 The Waves4 program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

7 Troubleshooting 77

A Wire communication protocol 78


A.1 General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.1.1 Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.1.2 Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
A.1.3 File system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.2 Buoyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
A.2.1 Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
A.2.2 Receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
A.3 Waved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
A.3.1 Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
A.3.2 Campaign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

B Release notes 105


B.1 Version 5.4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
B.2 5.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
B.3 5.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
B.4 4.18.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
B.5 4.16.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
B.6 4.14.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
B.7 4.12.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
B.8 4.10.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
B.9 4.8.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
B.10 4.6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
B.11 4.4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
B.12 4.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
B.13 4.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
B.14 4.0.0-beta4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
B.15 4.0.0-beta2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

C Changelog 109
C.1 Version 5.4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
C.2 Version 5.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
C.3 Version 5.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
C.4 Version 4.18.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
C.5 Version 4.16.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
C.6 Version 4.14.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
C.7 Version 4.12.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
C.8 Version 4.10.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
C.9 Version 4.8.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
C.10 Version 4.6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

3
C.11 Version 4.4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
C.12 Version 4.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
C.13 Version 4.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
C.14 Version 4.0.0-beta4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
C.15 Version 4.0.0-beta3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
C.16 Version 4.0.0-beta2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
C.17 Initial version 4.0.0-beta1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Bibliography 114

Glossary 115

D Libraries used 119


D.1 Boost Software License - Version 1.0 . . . . . . . . . . . . . . . . . . . . . . . . 120
D.2 Bzip License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
D.3 Curl License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
D.4 D-Bus license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
D.5 FFI License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
D.6 Fontconfig License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
D.7 Freetype License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
D.8 GCC runtime license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
D.9 GNU General Public License, version 3 . . . . . . . . . . . . . . . . . . . . . . 133
D.10 JasPer license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
D.11 Jpeg License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
D.12 GNU Lesser General Public License, version 2.1 . . . . . . . . . . . . . . . . . 145
D.13 GNU Library General Public License, version 2.0 . . . . . . . . . . . . . . . . . 152
D.14 GNU Lesser General Public License, version 3 . . . . . . . . . . . . . . . . . . 158
D.15 Libpng license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
D.16 Libssh2 license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
D.17 Mingw-w64 license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
D.18 MIT license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
D.19 OpenSSL license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
D.20 Pcre license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
D.21 Pixman license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
D.22 Tiff license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
D.23 Zlib license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

4
1 Introduction
This is the Operator Manual for the Waves4 suite. The Operator Manual describes the parts of the
suite aimed at operators, like installation, configuration, maintenance and trouble shooting. The
manual also contains information regarding the custom protocols used in the suite.
The software suite consists of the following programs:

Buoyd Which receives and logs of the raw data received from the buoys.

Waved Which acts as a proxy server and gets the data from one or more buoyd receiver pro-
grams. The proxy processes the data and makes the data available for one or more Waves4
programs.

The Waves4 configurator This program is used to configure buoyd and waved during their exe-
cution.

The Waves4 program The user program to watch and monitor the received buoyd data. The
program also allows the user to (re)process the received data.

Normally the user does not use nor configure buoyd, waved, or the Waves4 configurator. The
user normally only uses the Waves4 program and is not aware of the other programs.

1.1 Programs
After the short introduction to the shipped programs, they are discussed more verbose in the sec-
tions below.

1.1.1 Buoyd
This program receives the data from a receiver, this program can receive all data send by the var-
ious Datawell buoys over the various links. So unlike the W@ves21 program, which had various
receiver programs1 this suite has one program to receive all kinds of buoy data. An overview of
the planned support can be found in table 1.1 below.
The program will normally run as background process2 . This means the software doesn’t need
to have a user logged into the system to work.
The software can receive the following buoys in alphabetic order:

HVA file This receiver module reads data from an HVA file and sends that at a rate of 1.28 Hz.
This module is intended for demonstration purposes and internal testing.

HXV file This receiver module reads data from an HXV file and sends that at a rate of 1.28 Hz.
This module is intended for demonstration purposes and internal testing.

RX-C over Ethernet This receiver module receives the data from an RX-C receiver via a TCP/IP
connection.

RX-C over a serial-port This receiver module receives the data from an RX-C receiver via the
serial port. The difference between the Ethernet and the serial port is the difference in the
configuration file, the data transmitted is the same.

RX-D This receiver module receives the data from an RX-D receiver via the serial port.
1
The programs are rfBuoy, iBuoy, GSM B UOY and O B UOY
2
Called a service under Windows, and daemon under Linux

5
SBD This receiver module receives the data from an e-mail server. The data is transmitted via the
Iridium satellite system.

Argos This receiver module receives the data from an e-mail server. The data is transmitted via
the Argos satellite system.

iBuoy This receiver module receives the data from the Internet.

This version of buoyd only supports the HF link, future versions will allow the other commu-
nication options; O RBCOMM and GSM and the Datawell DWR MkIII. Table 1.1 shows the support
matrix of various buoy types and their receivers.

Table 1.1: Support matrix

RX-C (ethernet)
RX-C (serial)

OrbComm
Warec
Diwar

RX-D

iBuoy

Argos
Direc

GSM

SBD
XX
XX Receiver
XXX
Buoy XXX
X
Wavec - X - - - - - - - - -
DWR I - - X X X X - - - - -
DWR II - - X X X X - - - - -
WR /FL X - - - - - - - - - -
WR-SG - - - P P P ? ? P ? P
DWR MkIII - - - P P P ? ? P ? P
DWR-G - - - P P P ? ? P ? P
DWR4 - - - - P P ? ? P P P
Legend:

- Not applicable, the combination is impossible.

X Not supported in the Waves4 suite and support won’t be added.

V Support ready in the Waves4 suite.

P Partially supported in the Waves4 suite, full support will be added.

F Support in the Waves4 suite is planned for the future.

? Not yet determined how this combination will be implemented in the Waves4 suite.

1.1.2 Waved
This is a new program which is not available with the W@ves21 and SeaSaw21 program. Like
buoyd, waved runs as a background process. Waved collects the data from (multiple) buoyd
programs and stores the data in a generic XML file. Also the user software, the Waves4 program,
retrieves the measured and processed wave data from this program.

1.1.3 The Waves4 program


This program is the replacement for the W@ves21 and SeaSaw21 programs, the functionality of
both these programs is integrated in the Waves4 program. Depending on the acquired modules of

6
the package not all features might be available. The usage of the Waves4 program is not described
in this Operator Manual, refer to the accompanied User Manual for its usage.

1.1.4 The Waves4 configurator


This program is used to configure buoyd and waved during their execution. The program is in-
troduced in version 4.10.0 of the Waves4 suite and initially will be used to configure the SBD,
Argos, and iBuoy receivers of buoyd. Future versions of the program will be able to offer more
configuration options.

7
2 Technical requirements
In general follow your OS recommendations, for the installation of the entire suite about 200 MB
is needed. On Linux systems the installer is much smaller since it uses the system libraries, which
will be installed if not already available.
The Waves4 suite uses UDP broadcast messages to automatically detect the various programs
on the network. For optimal usage of the suite these UDP broadcast messages should be allowed.
By default ports 2998 and 2999 are used, but these can be configured.
The software is tested on the following platforms:

• Windows

– Windows 7 32-bit version.


– Windows 7 AMD64 version.
– Windows 8 32-bit version.
– Windows 8 AMD64 version.
– Windows 10 32-bit version.
– Windows 10 AMD64 version.

• Linux

– Debian Stretch i386 architecture.


– Debian Stretch AMD64 architecture.
– Ubuntu Xenial Xerus i386 architecture.
– Ubuntu Xenial Xerus AMD64 architecture.
– Ubuntu Bionic Beaver i386 architecture.
– Ubuntu Bionic Beaver AMD64 architecture.

We also expect the software to run on the following Windows platforms:

• Windows Server 2008.

If you wish to install the Waves4 suite on a Linux system, which is not listed above please
contact our sales department.

8
3 Installation
The software runs on both the Windows and Linux platform and it is also possible to have the
different programs running on different platforms. E.g. buoyd and waved on a Linux server while
the users use the Waves4 program on the Windows platform.

3.1 Windows
The software is delivered as an installation program on the installation USB flash drive. When
the USB flash drive is put in the USB port the autorun feature will start a webbrowser with the
installation page.

3.2 Linux
The installation on Linux requires to add the Datawell repository to the list of known repositories.
This is described in [Dat13b]. Then the packages will be shown in the list of new packages.

3.3 Upgrading
When upgrading the Waves4 suite all packages on all machines may need to be kept in sync.
Whether or not that is required will be listed in the release notes. In general Datawell will try to
avoid the mandatory upgrade of all parts, but when communication protocols change this might
be required.

9
4 Configuring
All programs, except the Waves4 configurator are configured with an XML configuration file. This
file can be given as startup parameter for the program, if not given it looks for the file in its default
locations. If the file is given as startup parameter and that file cannot be found it will also look at
the default locations. The default locations are:

• Buoyd

– Linux
* /etc/datawell/buoydrc
– Windows
* %ProgramData%/Datawell/buoydrc
• Waved

– Linux
* /etc/datawell/wavedrc
– Windows
* %ProgramData%/Datawell/wavedrc

The %ProgramData% usually is the directory C:/ProgramData.


The following sections describe the contents of the setting files in more detail. For the first
version of the Waves4 suite the settings files need to be configured manually1 . After changing the
settings the program needs to be restarted to use the new settings.
When setting up a network with several buoys, planning is required. It is a also adviced to plan
ahead when starting with a small network so it can be expanded in the future. Therefore before
showing the details of the configuration files some hints on the planning are given.

4.1 Setting up a network


In general the Waves4 suite has two operation modi; automatic finding connections with the help
op UDP broadcast messages and manually by specifying all settings. The former mode is preferred
since it allows you to change settings in one place. But if for some reason UDP broadcast messages
do not work on the network, the manual mode can be used as a fallback.
When setting up a network some terms will be used:

receiver A receiver is a physical receiver – like the RX-C – or a non-physical receiver – like a
SBD e-mail message – . The id of a receiver shares the same name space as the ids of the
campaigns and every id should be unique throughout the network.

campaign A receiver receives one or more campaigns at any given time. A RX-C receiver re-
ceives one (over time the one it receives can change). A SBD receiver may receive multiple
campaigns.
The id of a campaign must be unique throughout the network. For receivers with only one
campaign it is the id of the receiver.

buoyd A running instance of buoyd. On the network all buoyd programs need to have an unique
id.
1
The settings in the Waves4 program do not need to be done if the defaults are good enough.

10
The uniqueness of the campaign ids is required so the automatic connection can find the proper
campaign. When using manual connections the ids aren’t used for the connection, but are still used
for other identification purposes.
When UDP broadcasts work on the network it is possible to get a list of campaigns on the
network by using the telnet connection. So before adding a new campaign to the network you can
get an overview of the campaigns already used on the network.

4.2 Waves4 configurator


Starting with version 4.18.0 the Waves4 configurator is able to fully configure both buoyd and
waved.
The initial window of the Waves4 configurator is shown in figure 4.1. At the left-hand side it
shows a tree with the buoyd instances found. The right-hand side will show information regarding
the selected item in the tree. (Initially no item is selected.)

Figure 4.1: The main window of the Waves4 configurator after starting the application.

The chapter is divided in the following parts:

§4.2.1 Describes the settings of the configurator.

§4.2.2 Describes the configurator interface part for buoyd.

§4.2.3 Describes the configurator interface part for waved.

11
4.2.1 Settings
The settings dialogue as shown in figure 4.2, holds the configuration parameters of the Waves4
configurator.

Figure 4.2: The settings dialogue of the Waves4 configurator.

The available settings are:

Buoyd port This is the port number buoyd uses for UDP broadcast messages.

Waved port This is the port number waved uses for UDP broadcast messages.

Display details Configures the amount of details shown in the Waves4 configurator. By default
only the fields, which are used for normal configuration, are shown. In certain cases it might
be required to also modify not so commonly modified fields. By increasing the amount of
details these settings become visible.

Automatically issue a ‘save config’ command This setting is only used in the iBuoy receiver.
When an iBuoy setting is modified it is only modified in the RAM of the buoy. After the
buoy is powered down or reset the settings are loaded from the EEPROM. In order to make
the change permanent it needs to be saved to the EEPROM. This command can be issued
manually or automatically. By default settings are stored automatically; by clearing this
check box the settings will no longer be automatically saved.

4.2.2 Buoyd
Starting with version 4.18.0 the Waves4 configurator offers support for configuring buoyd. The
support is complete; this means it is no longer required to manually modify the buoydrc file.
When the Waves4 configurator is started with a new buoydrc file it is advisable to change
the display details in the settings to ‘Advanced’. Figure 4.3 shows the window after selecting the
buoyd server named ‘buoyd’.
When editing the fields in the window some fields may require buoyd to restart. Unlike the
receiver fields this restart is not done automatically, but requires a manual restart. Fields requiring
a restart have a note in their description. It is safe to wait with a restart until all fields in this
window are set to their final value:
The window shows the following fields:

ID This shows the ID of buoyd on the network. The ID must be unique on the network.
Note after changing this field buoyd must be restarted before the changes take effect.

12
Figure 4.3: The main window of the Waves4 configurator after selecting the buoyd server with
‘advanced’ display details.

Communication port This port hosts a TCP and UDP server. This port is used by waved to
connect to buoyd.
If you are running multiple instances of buoyd with one instance of waved on the same
network, make sure they all use the same port. (When using the same port it is not possible
to run multiple copies of buoyd on the same system.)
Warning make sure the firewall settings on the server where buoyd is running allows incom-
ing TCP and UDP traffic on the selected port.
Note after changing this field buoyd must be restarted before the changes take effect.

Server storage root This directory is the base directory to store the received data and log files.
Warning the path is the path on the server where buoyd is running, if the Waves4 configurator
runs on a different machine, make sure to select the proper path.
Note after changing this field buoyd must be restarted before the changes take effect.

Password This field contains the password required for configuring the settings of buoyd. The
display of the password always looks the same and cannot be used to determine whether or
not a password is set.
Note it is recommended to use the same password for waved and all buoyd instances on the
network.

13
Log severity This field determines the minimum severity of the log messages to be printed. Mes-
sages with a lower severity are not outputted.

Restart required The checkbox shows whether one or more settings, that require a restart, have
been modified.

Restart Restarts the server. Shortly after the button has been pressed the ‘Restart required’ check-
box should be cleared.

When changing the display details to ‘All’ the following extra fields appear:

Log domains This allows to manage the log domains for buoyd as described in §4.3.1.1.

Stop This directly stops the buoyd server.


Warning after stopping the server it needs to be manually restarted in order to use buoyd
again.

Right-clicking on the buoyd server in the tree shows a menu, allowing to create new receivers
for the buoyd server. This shows the wizard as shown in figure 4.4.

Figure 4.4: The add receiver wizard.

The dialogue has the following fields:

ID The ID of a the new receiver. The ID must be unique for all buoyd instances on the network.

Transmission port The TCP used by waved to connect the receiver.


Warning make sure the firewall settings on the server where buoyd is running allows incom-
ing TCP traffic on the selected port.

After entering these two field press the ‘Forward’ button. This asks more information regard-
ing the type of buoy, receiver, and file format used. When for a specific question only one valid
option is available the question will be skipped. After the selection is done the overview of the
choices as shown in figure 4.5 is shown.
Pressing ‘OK’ creates a disabled receiver with the selected basic settings. After the receiver
is created it needs to be configured further. After configuring the receiver needs to be enabled to
start its data acquisition.

14
Figure 4.5: The add receiver wizard’s selection overview.

4.2.2.1 SBD
The window, after expanding the tree and selecting the SBD receiver, is shown in figure 4.6. On
the right-hand side fields are visible. The fields correspond to the fields in the SBD receiver’s
configuration, as described in §4.3.10. Not all fields available in the configuration file are visible.
The ones not visible are fields that normally do not need to be configured, §4.2.1 describes how to
show these fields when they need to be configured.
Clicking on one of the ‘Edit’-buttons either toggles the flag or shows a dialogue to give a new
value. After editing the value it will be directly updated in buoyd. When the configuration is pro-
tected by a password (see §4.3) it will prompt for a password. This password will be remembered
for the rest of the session. Therefore it is recommended to use the same password for all buoyd
instances.
Right-clicking on the SBD receiver in the tree shows a menu, allowing to create new cam-
paigns for the SBD receiver. This shows a dialogue prompting for a campaign name and an IMEI
number, see figure 4.7.
After adding the campaign it will be visible in the tree. After selecting the new campaign its
settings become visible as shown in figure 4.8.
It shows the configuration of all messages available for that type of buoy. The messages are
described in the DWTP specifications [Dat13a]. Initially the Waves4 configurator will not know
the settings and set them to NaN values. Double clicking on a row in the settings shows a dialogue
which allows you to modify the settings for that specific message. This dialogue is shown in
figure 4.9.
In the dialogue the transmission interval and offset can be selected. The meaning of the offset
and interval are described in more detail in the DWTP specifications [Dat13a, §4.19.1 Communi-
cation option message configuration (0xFE1)]. Sending NaN values to the buoy is not allowed.
Starting with version 4.0.14 of the Waves4 configurator it is also possible to right-click on a
message and get the same functionality as for the iBuoy receiver. The functionality is described in
§4.2.2.3.1. Note whether or not this feature can return information depends on the buoy’s firmware
version.

15
Figure 4.6: The main window of the Waves4 configurator after selecting the SBD receiver.

Figure 4.7: The add campaign window.

16
Figure 4.8: The main window of the Waves4 configurator after selecting the ‘test’ campaign of the
SBD receiver.

Figure 4.9: The settings dialogue of a message in the Waves4 configurator.

17
4.2.2.2 Argos
Starting with version 4.12.0 the Waves4 configurator offers the same capabilities for the Argos
campaigns as for the SBD campaigns2 . The workings of the Argos configuration are analogue to
the workings the SBD configuration and not described in detail. The fields of the Argos campaign’s
configuration are described in §4.3.3.

4.2.2.3 iBuoy
Starting with version 4.14.0 the Waves4 configurator offers support for iBuoy campaigns3 . iBuoy
campaigns differ from both SBD and Argos campaigns. The fields of a campaign are shown in
figure 4.10.

Figure 4.10: The fields of an iBuoy campaign in the Waves4 configurator.

Unlike the fields of the campaigns of other receivers, these fields have two extra buttons: The
download button to retrieve the settings of the field, and the task manager button to review the
status of the communication with the buoy. The edit button also behaves differently from the edit
button of the other fields.
2
Argos support has been added to the entire Waves4 suite starting with version 4.12.0.
3
iBuoy support has been added to the entire Waves4 suite starting with version 4.14.0.

18
iBuoy offers a direct two-way communication between the buoy and buoyd, therefore Datawell
created its own communication protocol [Dat16a] on top of a TCP/IP connection. When pressing
the download button the request for the fields contents will be sent to buoyd where it is stored as a
task. The status of a task can be reviewed in the task manager. When the buoy connects to buoyd
it first transmits the DWTP data buffered by the buoy, then buoyd will execute its pending tasks.
Once a task is processed the settings of buoyd are updated depending on the task and the changes
are also visible in the Waves4 configurator.
The same also happens when a field is modified with the ‘edit’ button; the field’s contents will
not be updated until the task has been executed properly.
Tasks are executed when the buoy connects to buoyd. It is likely there is no operator around
when this happens. Therefore the status of the execution is stored in the task manager and needs
to be manually removed after reviewing the status. The task manager button shows the status of
the task manager. Pressing the button opens the task manager.

Figure 4.11: The task dialogue.

When a new campaign is created the settings are unknown and tasks to download the setting
from the buoy are created automatically. The task dialogue as shown in figure 4.11 displays the
status of the tasks for a certain field. This dialogue allows to look at more details of a task, or
delete a task once it has been completed.
When the ‘Display details’ in the settings are increased several action buttons will be shown.
Depending on the level the following buttons are shown:
Advanced This shows the buttons to interact with the files on the buoy’s logger.
Get file list When pressing this button it requests the buoy to transmit the list of files stored
on the logger. §4.2.2.3.1 explains the usage in more detail.
Get file piece This button shows a dialogue, which allows the user to retreive a file or a part
of a file from the buoy’s logger. §4.2.2.3.1 explains the usage in more detail.
All This shows the buttons to issue very specific commands, which should only be used by ex-
perts.
Reset When this button is used the buoy will reset itself after the communication with
buoyd has finished.
Save config §4.2.1 describes the ‘Automatically issue a ‘save config’ command’ checkbox.
When this checkbox is not checked it is possible to manually issue the save config
command.
Recall config §4.2.1 describes the ‘Automatically issue a ‘save config’ command’ check-
box. When this checkbox is not checked it is possible revert the buoy’s settings to an
earlier state, by restoring the settings saved in the buoy’s EEPROM.

19
4.2.2.3.1 Retrieve data from the buoy’s logger
iBuoy has two ways to retrieve data from the buoy’s logger:

1. Requesting files or parts of files.

2. Requesting DWTP packets.

When requesting files the ‘Display details’ in the settings must be set to ‘Advanced’, or ‘All’.
This shows the ‘Get file list’ and ‘Get file piece’ button. When retrieving a file its exact name on
the logger must be known. When pressing the ‘Get file list’ button buoyd will ask the buoy to send
the list of files available on the logger.

Figure 4.12: The properties dialogue of the get file list task.

Once the task has been executed successfully the files on the logger are known and can be seen
in the properties of the ‘get file list’ task. This is shown in figure 4.12. When the task is not deleted
the list of files on the logger can directly be used in the ‘get file piece’ dialogue. The dialogue is
shown in figure 4.13.

Figure 4.13: The get file piece dialogue.


.

In the dialogue, the drop-down entry lists the files on the logger, known by the Waves4 config-
urator. The other fields to enter are the offset of the first byte to retrieve and the number of bytes
to retrieve. The number of bytes to retrieve is limited to 65534. If more bytes of a file are wanted,
multiple retrieve commands can be issued. §5.1.4.3 explains the offset and count in more detail.
It also explains where the received data is stored.

20
It is also possible to retrieve a specific DWTP packet. Select a message in the list of messages.
Right-click on the message. A dialogue will be shown, allowing the user to select the date and
time of the wanted message. If the message with the wanted timestamp exists it will be send and
processed by waved. If the message does not exist, the buoy will look ahead for a message with a
greater timestamp and if one if found close to the wanted time, that message is sent instead. This
is useful for the GPS message since its exact timestamp is unknown.

4.2.3 Waved
Starting with version 4.16.0 the Waves4 configurator offers support for configuring waved. The
support is complete; this means it is no longer required to manually modify the wavedrc file.
When the Waves4 configurator is started with a new wavedrc file it is advisable to change the
display details in the settings to ‘Advanced’. Figure 4.14 shows the window after selecting the
waved server named ‘waved’.

Figure 4.14: The main window of the Waves4 configurator after selecting the waved server with
‘advanced’ display details.

When editing the fields in the window some fields may require waved to restart. Unlike the
campaign and receiver fields this restart is not done automatically, but requires a manual restart.
Fields requiring a restart have a note in their description. It is safe to wait with a restart until all
fields in this window are set to their final value:
The window shows the following fields:
ID This shows the ID of waved on the network. The ID must be unique on the network. Note
normally only one instance of waved should be run, in which case the ID is always unique.

21
Note after changing this field waved must be restarted before the changes take effect.
Communication port This port hosts a TCP and UDP server. This port is used by Waves4 to
connect to waved.
If you want to run multiple instances of waved on the same network, make sure they all use
a different port.
Warning make sure the firewall settings on the server where waved is running allows incom-
ing TCP and UDP traffic on the selected port.
Note after changing this field waved must be restarted before the changes take effect.
Server storage root This directory is the base directory to store the received data and log files.
Warning the path is the path on the server where waved is running, so when the Waves4
configurator runs on a different machine, make sure to select the proper path.
Note after changing this field waved must be restarted before the changes take effect.
Password This field contains the password required for configuring the settings of waved. The
display of the password always looks the same and cannot be used to determine whether or
not a password is set.
Note it is recommended to use the same password for waved and all buoyd instances on the
network.
Log severity This field determines the minimum severity of the log messages to be printed. Mes-
sages with a lower severity are not outputted.
Buoyd communication port The TCP and UDP port used to connect to buoyd. The value used
by buoyd is stored in its buoydrc file as described in §4.3.
Note after changing this field waved must be restarted before the changes take effect.
Restart required The checkbox shows whether one or more settings, that require a restart, have
been modified.
Restart Restarts the server. Shortly after the button has been pressed the ‘Restart required’ check-
box should be cleared.
When changing the display details to ‘All’ the following extra fields appear:
Log domains This allows to manage the log domains for waved as described in §4.3.1.1.
Stop This directly stops the waved server.
Warning after stopping the server it needs to be manually restarted in order to use waved
again.
Right-clicking on the waved server in the tree shows a menu, allowing to create new campaigns
for the waved server. This shows the dialogue as shown in figure 4.15.
The dialogue has the following fields:
Campaign The ID of a campaign as configured in buoyd. Depending on the type of receiver used
in buoyd the campaign name is the same as the receiver or the name is one of the campaigns
of the receiver.
Transmission port The TCP used by Waves4 to connect the campaign.
Warning make sure the firewall settings on the server where waved is running allows incom-
ing TCP traffic on the selected port.
This creates an enabled campaign with the selected settings.

22
Figure 4.15: The add campaign dialogue.

4.2.3.1 Campaign
Configuring the settings of a campaign can normally be done with the display details set to ‘Nor-
mal’. After selecting a campaign of the waved server it shows a window as shown in figure 4.16.

Figure 4.16: The campaign window.

The campaign has the following fields:

Enabled This flag controls whether the campaign is enabled or disabled. When the campaign is
disabled it will not receive new data from buoyd. Waves4 will still be able to receive the
cached data.

CSV Enabled This field determines whether or not there will be CSV output. The format of the
CSV output is described in §5.2.1.

23
When changing the display details to ‘Advanced’ the following extra fields appear:

Use verbose filename Controls the setting of the ‘use verbose filename’ field, as described in
§4.4.2.

CSV Month names as string Controls the setting of the ‘output directory month as string’ field,
as described in §4.4.2.1.

4.3 Buoydrc
The configuration of buoyd is stored in a custom XML format. It is possible to modify this file
manually, but that is not advised. The Waves4 configurator is able to fully modify the file. The
use of the Waves4 configurator for buoyd is described in §4.2.2.
The structure is a XML tree, whose root node is named buoydrc. All nodes are mandatory, but
nodes can have a default or a fixed value. These nodes can simply be defined as <node/> and its
default of fixed value is used.
The nodes in the structure are:

version Fixed value, must be in the range [10..11].


Contains the version number of the configuration. The program uses this information to
determine how to interpret the data. The allowed values will change in the future.

id

• Mandatory field.
• The id of buoyd. This id must be unique for all buoyd instances on the network. An
empty value is not allowed.
• Introduced in version 1 of the configuration format.
• Changing this field using the communication protocol requires buoyd to be restarted.

communication port • Mandatory field.


• If empty, the field defaults to 2999.
• This port is used for communication using UDP. This allows other parts of the Waves4
suite to find this buoyd instance on the network by means of an UDP broadcast mes-
sage.
The port is also used for communication using TCP. This is used to communicate with
waved using the communication interface.
• Introduced in version 1 of the configuration format.
• Changing this field using the communication protocol requires buoyd to be restarted.

storage root

• Mandatory string.
• Introduced in version 1 of the configuration format.
• Behaviour of an empty field changed in version 4.18.0 of the Waves4 suite.
• Changing this field using the communication protocol requires buoyd to be restarted.

This directory is the base directory to store the received data and log files.
If the field is empty a default location is used. The default depends on the operating system:

24
Windows It selects the directory %ProgramData%/Datawell/buoyd/. The %ProgramData%
usually is the directory C:/ProgramData.
Linux It selects the directory /var/lib/datawell/buoyd/.

Note it is advised to specify an absolute path name.


Note it is advised to store the data on a local disk and not a network drive. When the drive
is not available received data might be lost.

password

• Optional string.
• Introduced in version 4 of the configuration format.

This field contains the password required for configuring the settings of buoyd. If the field
is omitted the value is an empty string.
Note It is recommended to use the same password for all buoyd and waved instances on the
network. This makes using Waves4 configurator easier.

log

• Optional section.
• Introduced in version 4 of the configuration format.

This section configures the logger setting of buoyd. If the section is omitted the default
logger settings are used. The details of this section are described in §4.3.1.

receiver Zero or more sections.


This section contains the child nodes as described in §4.3.2.

Listing 4.1: Example of a buoydrc file.


<b u o y d r c >
<v e r s i o n >1</ v e r s i o n >
<i d >L o c a t i o n a l p h a </ i d >
<c o m m u n i c a t i o n p o r t />
<!−− A s t o r e r o o t on a L i n u x s y s t e m . −−>
< s t o r a g e r o o t >/ v a r / l o g / buoyd </ s t o r a g e r o o t >
<!−−
! ! A s t o r e r o o t on a Windows s y s t e m ,
! ! commented o u t s i n c e o n l y one may be g i v e n .
−−>
<!−− < s t o r a g e r o o t >D: \ d a t a \ buoyd </ s t o r a g e r o o t > −−>
<r e c e i v e r >
<!−− A f i l e r e c e i v e r a s e x p l a i n e d i n §4.3.4 . −−>
<i d >L o c a t i o n a l p h a f i l e </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

<!−− A L i n u x s t y l e f i l e n a m e . −−>
<f i l e n a m e >/ mnt / d a t a / e x a m p l e . hxv </ f i l e n a m e >

<b v a b u o y t y p e >WR4</ b v a b u o y t y p e >


< f i l e f o r m a t >BVA</ f i l e f o r m a t >
<t y p e >f i l e </ t y p e >

25
</ r e c e i v e r >

<r e c e i v e r >
<!−−
! ! A RX−D r e c e i v e r a s e x p l a i n e d i n §4.3.4 .
! ! T h i s v e r s i o n i s u s e d on L i n u x u s i n g t h e
!! f i r s t s e r ia l port .
−−>
<i d >L o c a t i o n a l p h a RX−D Linux </ i d >
< t r a n s m i s s i o n p o r t >3001</ t r a n s m i s s i o n p o r t >

< r x d s e r i a l p o r t >/ dev / t t y S 0 </ r x d s e r i a l p o r t >


<b u o y t y p e >DWR MkIII </ b u o y t y p e >
<t y p e >RX−D</ t y p e >
</ r e c e i v e r >

<r e c e i v e r >
<!−−
! ! A RX−D r e c e i v e r a s e x p l a i n e d i n §4.3.7 .
! ! T h i s v e r s i o n i s u s e d on Windows u s i n g t h e
! ! f i r s t s e r i a l port . ( Obviously i t i s not
! ! p o s s i b l e t o mix a L i n u x and Windows
!! configuration in a real configuration f i l e . )
−−>
<i d >L o c a t i o n a l p h a RX−D Windows </ i d >
< t r a n s m i s s i o n p o r t >3002</ t r a n s m i s s i o n p o r t >

< r x d s e r i a l p o r t >COM1</ r x d s e r i a l p o r t >


<b u o y t y p e >DWR MkIII </ b u o y t y p e >
<t y p e >RX−D</ t y p e >
</ r e c e i v e r >

<r e c e i v e r >
<!−−
! ! A RX−C r e c e i v e r , u s i n g t h e s e r i a l p o r t ,
! ! a s e x p l a i n e d i n §4.3.8 .
! ! T h i s v e r s i o n i s u s e d on L i n u x u s i n g
!! the f i r s t s e r i a l port .
−−>
<i d >L o c a t i o n a l p h a RX−C s e r i a l </ i d >
< t r a n s m i s s i o n p o r t >3003</ t r a n s m i s s i o n p o r t >

<!−−
! ! F o r u s a g e on Windows s e l e c t an
! ! a p p r o p r i a t e COM p o r t .
−−>
< r x c s e r i a l p o r t >/ dev / t t y S 0 </ r x c s e r i a l p o r t >
<h x v b u o y t y p e >WR−SG</ h x v b u o y t y p e >
< f i l e f o r m a t >HXV</ f i l e f o r m a t >
<t y p e >RX−C s e r i a l </ t y p e >
</ r e c e i v e r >

26
<r e c e i v e r >
<!−−
! ! A RX−C r e c e i v e r , u s i n g t h e E t h e r n e t p o r t ,
! ! a s e x p l a i n e d i n §4.3.8 .
! ! T h e r e i s no d i f f e r e n c e f o r L i n u x and
! ! Windows f o r t h i s r e c e i v e r .
−−>
<i d >L o c a t i o n a l p h a RX−C E t h e r n e t </ i d >
< t r a n s m i s s i o n p o r t >3004</ t r a n s m i s s i o n p o r t >

<r x c e t h e r n e t h o s t n a m e >
localhost
</ r x c e t h e r n e t h o s t n a m e >
< r x c e t h e r n e t p o r t >1180</ r x c e t h e r n e t p o r t >
<h v a b u o y t y p e >GPS−DWR4</ h v a b u o y t y p e >
<t y p e >RX−C E t h e r n e t </ t y p e >
</ r e c e i v e r >

</ b u o y d r c >

4.3.1 Log section


The log section contains the fields used to configure the logger output of buoyd and waved. The
log section contains the following fields:

severity

• Mandatory field.
• Must contain one of the following values:
fatal For fatal errors.
error For errors.
warning For warnings.
information For information messages.
debug For debug messages.
• Introduced in version 4 of the configuration format.

This field determines the minimum severity of the log messages to be printed. Messages
with a lower severity are not outputted.
When this field is changed using the communication protocol it is recommended to restart
waved. When waved is not restarted the order of setting the log severities may differ from
the normal order. A restart sets the severities in the requested order. The different order is
not harmful, but may set loggers to unexpected severities.
Note Starting with version 4.18.0 of the Waves4 suite this field can also be modified in buoyd
with the communication protocol.

domain

• Zero or more sections.


• Introduced in version 4 of the configuration format.

27
Contains the overrides of the default severity for certain domains. The override can lower
or increase the severity. The details of this section are described in §4.3.1.1.

4.3.1.1 Log domain section


The log domain section contains the field to override the default logger output severity of buoyd or
waved. The rest of the section describes the functionality of buoyd, but waved has identical logger
functionality. The log section contains the following fields:

domain

• Mandatory field.
• Must contain a domain string.
• Introduced in version 4 of the configuration format.

The domain string determines which domain’s severity should be overridden. The available
domains in buoyd can be retrieved from buoyd by running buoyd --log-domains. The
available domains depend on the version of buoyd, during development of the software new
domains can be added or existing domains removed.
The domain path uses the forward slash ‘/’ as path separator, the initial path starts with a
leading forward slash. The asterisk ‘*’ can be used as wildcard for a domain. For example:

/* Selects every domain. This is the same as setting the global severity.
/modules/* Selects every domain under the modules. When this override is set its setting
will also be used when other sub-modules are added.
/modules/logger Selects the ‘logger’ sub-module in modules. Unlike the previous exam-
ple this version will only override the severity for the ‘logger’ sub-domain and won’t
change when more sub-modules are added in the future.

severity

• Mandatory field.
• Must contain one of the following values:
fatal For fatal errors.
error For errors.
warning For warnings.
information For information messages.
debug For debug messages.
• Introduced in version 4 of the configuration format.

This field determines the minimum severity of the log messages to be printed. Messages
with a lower severity are not outputted.
When this field is changed using the communication protocol it is recommended to restart
waved. When waved is not restarted the order of setting the log severities may differ from
the normal order. A restart sets the severities in the requested order. The different order is
not harmful, but may set loggers to unexpected severities.
Note Starting with version 4.18.0 of the Waves4 suite this field can also be modified in buoyd
with the communication protocol.

28
4.3.2 Receiver section
The receiver section contains several fields common to all receivers and depending on the type of
the receiver. A receiver section starts with the following fields:

id
The id of receiver. This id must be unique for all receivers of all buoyd instances on the
network.

transmission port
The port number the receiver starts a TCP network listener. When a program connects to
this network port it will receive all the data being received from the receiver. This is used
by waved to receive the data of a receiver.
Note the notes for the communication port apply here as well.

use verbose filename

• Optional field, if omitted the value is treated as ‘false’.


• Introduced in version 3 of the configuration format.
• Obsoleted in version 10 of the configuration format.

Older versions of buoyd stored the received data and log files without a campaign name and
without a file extension. This option allows to store the files with filenames including the
campaign name and a file extension.
Starting with version 10 of the configuration format the filenames have been modified. This
format is now always used.

type
The last field of the receiver is the type field. That this field is the last field looks a bit odd,
but it is caused by limitations regarding validating XML files. Due to this reasons the field
has a fixed value, so its value may be omitted.
The field has one of the following values:

Argos This is an e-mail based receiver, that gets its data from the Argos satellite system.
The other nodes in the receiver for this type are described in §4.3.3.
file The receiver is not a receiver, but receives its data from a file. This option is mainly used
for demonstration purposes. The other nodes in the receiver for this type are described
in §4.3.4.
iBuoy This is an Internet based receiver, that gets its data from, for example, the Iridium
satellite system. This receiver can only be used for buoys of the 4-series. For the MkIII
buoys use the MkIII iBuoy receiver instead. The other nodes in the receiver for this
type are described in §4.3.5.
MkIII iBuoy This is an Internet based receiver, that gets its data from, for example, the
Iridium satellite system. This receiver can only be used for the MkIII buoys. For
buoys of the 4-series use the iBuoy receiver instead. The other nodes in the receiver
for this type are described in §4.3.6.
MkIII SBD This is an e-mail based receiver, that gets its data from, the Iridium satellite
system. This receiver can only be used for the MkIII buoys. For buoys of the 4-series
use the SBD receiver instead. The other nodes in the receiver for this type are described
in §4.3.11.

29
MkIII SMS This is a SMS based receiver, that gets its data from, the GSM network. This
receiver can only be used for the MkIII buoys. The other nodes in the receiver for this
type are described in §4.3.12.
RX-D The receiver is a RX-D receiver. The other nodes in the receiver for this type are
described in §4.3.7.
RX-C serial This is the RX-C receiver using its serial port. The other nodes in the receiver
for this type are described in §4.3.8.
RX-C Ethernet This is the RX-C receiver using its Ethernet port. The distinction between
the RX-C types is only required due to the different settings. The receivers are the
same. The other nodes in the receiver for this type are described in §4.3.9.
SBD This is an e-mail based receiver, that gets its data from the Iridium satellite system.
The other nodes in the receiver for this type are described in §4.3.10.

4.3.3 Argos
This section was introduced in version 5 of the configuration format.
This receiver receives e-mail messages from the Argos satellite system. The Argos receiver
has the following fields:

enabled

• Mandatory Boolean field.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled no e-mail will be received. Sending configuration e-mail messages is possible
when the receiver is not enabled.
• Introduced in version 5 of the configuration format.

argos email from filter

• Mandatory field.
• Contains the e-mail address the Argos e-mails are received from.
This field must be included, but should normally be left empty. When empty it uses
the default value, which is set correctly for normal deployment.
• If empty, the field defaults to ‘[email protected]’.
• Introduced in version 5 of the configuration format.

argos email subject filter

• Mandatory field.
• Contains the filter of the subject for incoming Argos e-mail messages. When buoyd
looks at the e-mails on the POP3 server it filters them based on the sender and its
subject. E-mails not passing this filter are not retrieved and remain on the server. This
makes it possible to an e-mail account, which is also used for other e-mail. Note
Datawell recommends a dedicated e-mail account for Argos e-mail messages.
This field must be included, but should normally be left empty. When empty it uses
the default value, which is set correctly for normal deployment.
• If empty, the field defaults to: ‘Argos data’.
• Introduced in version 5 of the configuration format.

argos pop3 hostname

30
• Mandatory field.
• Must contain the hostname or IP address of the POP3 server.
• Introduced in version 5 of the configuration format.

argos pop3 port number

• Mandatory field.
• If empty, the field defaults to 110.
• Must contain the port number of the POP3 server.
• Introduced in version 5 of the configuration format.

argos pop3 user name

• Mandatory field.
• Must contain the user name used to log in the POP3 server.
• Introduced in version 5 of the configuration format.

argos pop3 password

• Mandatory field.
• Must contain the password used to log in the POP3 server.
• Introduced in version 5 of the configuration format.

argos pop3 use ssl

• Mandatory Boolean field.


• Contains the flag whether or not to use SSL to connect to the POP3 server. If the field
is set to ‘true’ the argos pop3 port number field probably needs to be adjusted to 995.
• Introduced in version 5 of the configuration format.

campaign

• Zero or more sections.


• This section contains the child nodes as described in §4.3.3.1.
• Introduced in version 5 of the configuration format.

Listing 4.2 contains an example of this receiver. Since the Waves4 configurator is used to
create the campaign sections they are ignored in this example.

Listing 4.2: Example of a Argos receiver.


<r e c e i v e r >
<i d >Argos r e c e i v e r </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >
<e n a b l e d >t r u e </ e n a b l e d >

< a r g o s e m a i l f r o m f i l t e r />
< a r g o s e m a i l s u b j e c t f i l t e r />
<a r g o s p o p 3 h o s t n a m e >y o u r . s e r v e r </ a r g o s p o p 3 h o s t n a m e >
<!−− <a r g o s p o p 3 p o r t n u m b e r /> would do t h e same . −−>
<a r g o s p o p 3 p o r t n u m b e r >110</ a r g o s p o p 3 p o r t n u m b e r >

<a r g o s p o p 3 u s e r n a m e >u s e r name </ a r g o s p o p 3 u s e r n a m e >

31
<a r g o s p o p 3 p a s s w o r d >p a s s w o r d </ a r g o s p o p 3 p a s s w o r d >
<a r g o s p o p 3 u s e s s l >f a l s e </ a r g o s p o p 3 u s e s s l >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >Argos </ t y p e >
</ r e c e i v e r >

4.3.3.1 Campaign
This section was introduced in version 5 of the configuration format.
The section describes a campaign in the Argos receiver.

id

• Mandatory string field.


• The id of the campaign. This id must be unique for all campaigns and receivers.
(Receivers with no explicit campaign field use the receiver id as campaign id.)
• Introduced in version 5 of the configuration format.

argos id

• Mandatory field.
• Must be in the range [0..228 ).
• The Argos ID of the Argos subscription. Every Argos ID can only be used for one
campaign. If multiple campaigns use the same Argos ID the behaviour is undefined.
Note The decimal Argos ID must be used in this field.
• Introduced in version 5 of the configuration format.

buoy type

• Mandatory field.
• The type of the buoy being received, being one of:
– WR4
– DWR4
– GPS-DWR4
• Introduced in version 5 of the configuration format.

4.3.4 File
This receiver appends with the following fields:

filename
The file being ‘received’. This file is read at startup and then transmitted in a loop.

transmission speed factor

• Optional field.
• Must be in the range [1..65536).
• Defaults to 1.
• Introduced in version 2 of the configuration format.

32
The transmission speed is increased by this factor. For normal usage the factor should be
1. The easiest way to achieve this is by omitting the field. For demonstration purposes the
value can be increased.
Note high values might not work properly.

enabled

• Optional Boolean field, if omitted the value is treated as ‘true’.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled the data acquisition will not be started.
• Introduced in version 5 of the configuration format.

The last field added for this receiver type is the file format field. The field has one of the
following values:

HXV The other nodes for this type of receiver are described in §4.3.4.1.

BVA The other nodes for this type of receiver are described in §4.3.4.2.

HVA The other nodes for this type of receiver are described in §4.3.4.3.

The values are again fixed for validation and thus its value may be omitted.

4.3.4.1 HXV
This format appends with the following fields:

hvx buoy type


The type of the buoy being received, being one of:

• WR-SG
• DWR MkIII
• DWR-G

Listing 4.3 contains an example of this receiver.

Listing 4.3: Example of a HXV file receiver on Linux.


<r e c e i v e r >
<i d >HVX f i l e r e c e i v e r on Linux </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

<f i l e n a m e >/ mnt / d a t a / e x a m p l e . hxv </ f i l e n a m e >

<h x v b u o y t y p e >WR−SG</ h x v b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >HXV</ f i l e f o r m a t >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >f i l e </ t y p e >
</ r e c e i v e r >

33
4.3.4.2 BVA
Warning This format has not yet been implemented.
This format appends with the following fields:

bva buoy type


The type of the buoy being received, being one of:

• WR4
• DWR4
• GPS-DWR4

Listing 4.4 contains an example of this receiver.

Listing 4.4: Example of a BVA file receiver on Linux.


<r e c e i v e r >
<i d >BVA f i l e r e c e i v e r on Linux </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

<f i l e n a m e >/ mnt / d a t a / e x a m p l e . bva </ f i l e n a m e >

<b v a b u o y t y p e >WR4</ b v a b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >BVA</ f i l e f o r m a t >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >f i l e </ t y p e >
</ r e c e i v e r >

4.3.4.3 HVA
This format appends with the following fields:

hva buoy type


The type of the buoy being received, being one of:

• WR4
• DWR4
• GPS-DWR4

Listing 4.5 contains an example of this receiver.

Listing 4.5: Example of a HVA file receiver on Windows.


<r e c e i v e r >
<i d >HVA f i l e r e c e i v e r on Windows </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

<f i l e n a m e >C : \ d a t a \ e x a m p l e . hva </ f i l e n a m e >

<h v a b u o y t y p e >WR4</ h v a b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >HVA</ f i l e f o r m a t >

34
<!−− <t y p e /> would a l s o be v a l i d . −−>
<t y p e >f i l e </ t y p e >
</ r e c e i v e r >

4.3.5 iBuoy
This section was introduced in version 6 of the configuration format.
This receiver receives its data via the Internet. The iBuoy receiver has the following fields:

enabled

• Mandatory Boolean field.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled no data will be sent or received
• Introduced in version 6 of the configuration format.

ibuoy port number

• Mandatory field.
• If empty, the field defaults to 1168.
• Must contain the port number which buoyd will use to communicate with the buoy.
The receiver will start a listener process on the selected TCP port. The buoy is con-
figured to connect to the server on this port number. The connection is initiated by
the buoy, this means the server’s firewall needs to allow incoming connections on this
port.
• Introduced in version 6 of the configuration format.

campaign

• Zero or more sections.


• This section contains the child nodes as described in §4.3.5.1.
• Introduced in version 6 of the configuration format.

Listing 4.6 contains an example of this receiver. Since the Waves4 configurator is used to
create the campaign sections they are ignored in this example.

Listing 4.6: Example of an iBuoy receiver.


<r e c e i v e r >
<i d >iBuoy r e c e i v e r </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >
<e n a b l e d >t r u e </ e n a b l e d >

<!−− <i b u o y p o r t n u m b e r /> would do t h e same . −−>


<i b u o y p o r t n u m b e r >1168</ i b u o y p o r t n u m b e r >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >iBuoy </ t y p e >
</ r e c e i v e r >

35
4.3.5.1 Campaign
This section was introduced in version 6 of the configuration format.
The section describes a campaign in the iBuoy receiver. Most fields contain the configuration
of the buoy itself. This information is initially configured using the setup menu on the console,
as described in [Dat15, §18.9 Electronics Unit]. This information can be requested from the buoy
using the Waves4 configurator. After the information has been received buoyd caches the values,
allowing the proper values to be shown in the Waves4 configurator.

id

• Mandatory string field.


• The id of the campaign. This id must be unique for all campaigns and receivers.
(Receivers with no explicit campaign field use the receiver id as campaign id.)
• Introduced in version 6 of the configuration format.

buoy id

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The buoy ID is the ID of the buoy. This ID is configured in the buoy before deploy-
ment.
• Introduced in version 6 of the configuration format.

buoy type

• Mandatory field.
• The type of the buoy being received, being one of:
– WR4
– DWR4
– GPS-DWR4
• Introduced in version 6 of the configuration format.

firmware revision

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The field is managed by the Waves4 configurator. It is used to determine the firmware
version of the buoy. The intention is to use this field to determine the features available
in the buoy.
• Introduced in version 6 of the configuration format.

hatch uid

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The field is managed by buoyd. It is used to determine the hatch UID of the buoy. In
newer versions of the DWR4 this number is the serial number of the hatch.
• Introduced in version 6 of the configuration format.

hull uid

36
• Mandatory string field.
• This field is part of the buoy’s configuration.
• The field is managed by buoyd. It is used to determine the hull UID of the buoy. In
newer versions of the DWR4 this number is the serial number of the hatch.
• Introduced in version 6 of the configuration format.

transmission interval

• Mandatory number field.


• This field is part of the buoy’s configuration.
• Contains the transmission interval field as specified in [Dat16a].
• Introduced in version 6 of the configuration format.

dial string 1

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The primary dial string of the buoy.
• Introduced in version 6 of the configuration format.

dial string 2

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The secondary dial string of the buoy.
• Introduced in version 6 of the configuration format.

hostname 1

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The primary hostname the buoy connects to.
• Introduced in version 6 of the configuration format.

hostname 2

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The secondary hostname the buoy connects to.
• Introduced in version 6 of the configuration format.

port 1

• Mandatory field.
• This field is part of the buoy’s configuration.
• Contains the primary port the buoy connects to.
• Introduced in version 6 of the configuration format.

port 2

• Mandatory field.

37
• This field is part of the buoy’s configuration.
• Contains the secondary port the buoy connects to.
• Introduced in version 6 of the configuration format.

settings

• Zero or one sections.


• This section contains the child nodes as described in §4.3.5.1.1
• Introduced in version 6 of the configuration format.

task

• Zero or more sections.


• This section contains the child nodes as described in §4.3.5.1.2.
• Introduced in version 6 of the configuration format.

4.3.5.1.1 Settings
This section was introduced in version 6 of the configuration format.
Contains the configuration of the campaign in the buoy. The information is used by the Waves4
configurator to extract and modify the data.
At the moment it contains zero or more message sections. The message section contains:

msgid

• Mandatory number field.


• The field contains the msgid of the message. It contains a number that matches with a
hexadecimal value of a msgid as specified in the DWTP protocol [Dat13a].
• Introduced in version 6 of the configuration format.

interval

• Mandatory number field.


• Contains the interval field as specified in the DWTP protocol [Dat13a, §4.19 Buoy
communication messages].
• Introduced in version 6 of the configuration format.

offset

• Mandatory number field.


• Contains the offset field as specified in the DWTP protocol [Dat13a, §4.19 Buoy com-
munication messages].
• Introduced in version 6 of the configuration format.

update

• A mandatory section.
• This section contains the child nodes as described in §4.3.5.1.1.1.
• Introduced in version 6 of the configuration format.

38
4.3.5.1.1.1 Message update
This section was introduced in version 6 of the configuration format.
Contains the information regarding the last update of the configuration of this message.

timestamp

• Mandatory number field.


• Contains the number of seconds since midnight January first 1970. This value is the
same as the UNIX timestamp.
• Introduced in version 6 of the configuration format.

origin

• Mandatory string field.


• The origin of the modification. The value is one of:
user The setting was modified by a user of the software, usually using the Waves4
configurator.
buoy The settings were received from the buoy4 .
• Introduced in version 6 of the configuration format.

4.3.5.1.2 Task
This section was introduced in version 6 of the configuration format.
The section describes the tasks of a campaign of the iBuoy receiver. This section is managed
by buoyd and the Waves4 configurator. Normally the Waves4 configurator creates a task and
buoyd executes the task the next time the buoy connects to buoyd. After the task is completed it
will remain in the list. This allows the user to look at the execution result in Waves4 configurator.
Then the task can be removed with the Waves4 configurator.

id

• Mandatory string field.


• The id of the task. This id must be unique for all tasks for all campaigns.
• Introduced in version 6 of the configuration format.

status

• Mandatory field.
• Must contain one of the following values:
new The task is new and has never been sent to the buoy.
executing The task is currently being executed5 .
error The task has been executed and an error occurred. The software will try to
execute the task again.
malformed The task has been successfully executed, but the data received could not
be handled by the decoder software. This state should normally not occur.
failed The task has been executed and an error occurred. The software will not try to
execute the task again.
succeeded The task has been successfully executed.
4
A future version of waved will be able to receive the information of the buoy and automatically update the settings
in buoyd.
5
This value is normally not stored in the file.

39
• Introduced in version 6 of the configuration format.

creation time

• Mandatory number field.


• Contains the timestamp at which the task was created.
It contains the number of seconds since midnight January first 1970. This value is the
same as the UNIX timestamp.
• Introduced in version 6 of the configuration format.

modification time

• Mandatory number field.


• Contains the timestamp at which the task was last modified.
It contains the number of seconds since midnight January first 1970. This value is the
same as the UNIX timestamp.
• Introduced in version 6 of the configuration format.

counter

• Mandatory number field.


• Contains the the number of times the task has been executed. When a task returns a
non-fatal error the task can be executed again.
• Introduced in version 6 of the configuration format.

action

• Mandatory string field.


• Contains the data of the message to be transmitted. Its data is written as hexadecimal
values in ASCII.
The extact meaning of the contents are described in [Dat16a].
• Introduced in version 6 of the configuration format.

reply

• Mandatory string field.


• Contains the reply of the message received. If no data has been received the field is
empty. Its data is written as hexadecimal values in ASCII.
The extact meaning of the contents are described in [Dat16a].
• Introduced in version 6 of the configuration format.

4.3.6 MkIII iBuoy


This section was introduced in version 8 of the configuration format.
This receiver receives its data via the Internet. The MkIII iBuoy receiver has the following
fields:

enabled

• Mandatory Boolean field.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled no data will be sent or received.

40
• Introduced in version 8 of the configuration format.

mkiii ibuoy port number

• Mandatory field.
• The field is initialised to 1168 upon creation of the receiver.
• Must contain the port number which buoyd will use to communicate with the buoy.
The receiver will start a listener process on the selected TCP port. The buoy is con-
figured to connect to the server on this port number. The connection is initiated by
the buoy, this means the server’s firewall needs to allow incoming connections on this
port.
• Introduced in version 8 of the configuration format.

campaign

• Zero or more sections.


• This section contains the child nodes as described in §4.3.6.1.
• Introduced in version 8 of the configuration format.

Listing 4.7 contains an example of this receiver. Since the Waves4 configurator is used to
create the campaign sections they are ignored in this example.

Listing 4.7: Example of a MkIII iBuoy receiver.


<r e c e i v e r >
<i d >M k I I I iBuoy r e c e i v e r </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >
<e n a b l e d >t r u e </ e n a b l e d >

<m k i i i i b u o y p o r t n u m b e r >1168</ m k i i i i b u o y p o r t n u m b e r >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >iBuoy </ t y p e >
</ r e c e i v e r >

4.3.6.1 Campaign
This section was introduced in version 8 of the configuration format.
The section describes a campaign in the MkIII iBuoy receiver. Most fields contain the con-
figuration of the buoy itself. This information is initially configured using the setup menu on the
console, as described in [Dat16b, §5.17 GSM-internet communication]. This information can be
requested from the buoy using the Waves4 configurator. After the information has been received
buoyd caches the values, allowing the proper values to be shown in the Waves4 configurator.

id

• Mandatory string field.


• The id of the campaign. This id must be unique for all campaigns and receivers.
(Receivers with no explicit campaign field use the receiver id as campaign id.)
• Introduced in version 8 of the configuration format.

buoy id

41
• Mandatory string field.
• This field is part of the buoy’s configuration.
• The buoy ID is the ID of the buoy. This ID is configured in the buoy before deploy-
ment.
• Introduced in version 8 of the configuration format.

buoy type

• Mandatory field.
• The type of the buoy being received, being one of:
– WR-SG
– DWR MkIII
– DWR-G
• Introduced in version 8 of the configuration format.

transmission interval

• Mandatory number field.


• This field is part of the buoy’s configuration.
• Contains the transmission interval field as specified in [Dat16b, §5.17.5 Setting the
session interval].
• Introduced in version 8 of the configuration format.

dial string 1

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The primary dial string of the buoy. It is specified in [Dat16b, §5.17.3 Setting the dial
scripts].
• Introduced in version 8 of the configuration format.

dial string 2

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The secondary dial string of the buoy. It is specified in [Dat16b, §5.17.3 Setting the
dial scripts].
• Introduced in version 8 of the configuration format.

hostname 1

• Mandatory string field.


• This field is part of the buoy’s configuration.
• The primary hostname the buoy connects to. It is specified in [Dat16b, §5.17.4 Setting
the destination addresses and ports].
• Introduced in version 8 of the configuration format.

hostname 2

• Mandatory string field.

42
• This field is part of the buoy’s configuration.
• The secondary hostname the buoy connects to. It is specified in [Dat16b, §5.17.4
Setting the destination addresses and ports].
• Introduced in version 8 of the configuration format.

port 1

• Mandatory field.
• This field is part of the buoy’s configuration.
• Contains the primary port the buoy connects to. It is specified in [Dat16b, §5.17.4
Setting the destination addresses and ports].
• Introduced in version 8 of the configuration format.

port 2

• Mandatory field.
• This field is part of the buoy’s configuration.
• Contains the secondary port the buoy connects to. It is specified in [Dat16b, §5.17.4
Setting the destination addresses and ports].
• Introduced in version 8 of the configuration format.

ns00

• Mandatory Boolean field.


• Determines whether the current full wave spectrum will be received.
• The command is referred to as ‘rns001’ in [Dat16b, §5.17.9 Commands].
• Introduced in version 8 of the configuration format.

csxx

• A set of mandatory Boolean fields.


• It defines 12 fields where the xx is replaced with a value in the range [00, 11]. Every
xx field must have two digits.
• Determines whether a compressed wave spectrum will be received.
• The command is referred to as ‘rcs<n>1’ in [Dat16b, §5.17.9 Commands].
• Introduced in version 8 of the configuration format.

task

• Zero or more sections.


• This section contains the child nodes as described in §4.3.6.1.1.
• Introduced in version 8 of the configuration format.

4.3.6.1.1 Task
This section was introduced in version 8 of the configuration format.
The section describes the tasks of a campaign of the MkIII iBuoy receiver. This section is
managed by buoyd and the Waves4 configurator. Normally the Waves4 configurator creates a task
and buoyd executes the task the next time the buoy connects to buoyd. After the task is completed
it will remain in the list. This allows the user to look at the execution result in Waves4 configurator.
Then the task can be removed with the Waves4 configurator.

43
id

• Mandatory string field.


• The id of the task. This id must be unique for all tasks for all campaigns.
• Introduced in version 8 of the configuration format.

status

• Mandatory field.
• Must contain one of the following values:
new The task is new and has never been sent to the buoy.
executing The task is currently being executed6 .
error The task has been executed and an error occurred. The software will try to
execute the task again.
malformed The task has been successfully executed, but the data received could not
be handled by the decoder software. This state should normally not occur.
failed The task has been executed and an error occurred. The software will not try to
execute the task again.
succeeded The task has been successfully executed.
• Introduced in version 8 of the configuration format.

creation time

• Mandatory number field.


• Contains the timestamp at which the task was created.
It contains the number of seconds since midnight January first 1970. This value is the
same as the UNIX timestamp.
• Introduced in version 8 of the configuration format.

modification time

• Mandatory number field.


• Contains the timestamp at which the task was last modified.
It contains the number of seconds since midnight January first 1970. This value is the
same as the UNIX timestamp.
• Introduced in version 8 of the configuration format.

counter

• Mandatory number field.


• Contains the the number of times the task has been executed. When a task returns an
error the task can be executed again.
• Introduced in version 8 of the configuration format.

action

• Mandatory section.
• Contains action data of the taks. The details of this section are described in §4.3.6.1.1.1
• Introduced in version 8 of the configuration format.
6
This value is normally not stored in the file.

44
reply

• Mandatory string field.


• Contains the reply of the message received. If no data has been received the field is
empty. Its data is written as hexadecimal values in ASCII.
The specifics of the field are not further documented. This field is must not be modified
by the user.
• Introduced in version 8 of the configuration format.

4.3.6.1.1.1 Action
This section was introduced in version 8 of the configuration format.
It contains the information of the task to be executed. This section is not fully specified since
its contents are closely tied to the version of buoyd. This section must not be modified by the user.

id

• Mandatory number field.


• Contains the ID of the action to execute.
• Introduced in version 8 of the configuration format.

command

• Mandatory string field.


• Contains the command to be send. Its data is written as hexadecimal values in ASCII.
• Introduced in version 8 of the configuration format.

value

• Mandatory string field.


• The field can be empty.
• Contains the value of the command send. This field is used to properly process the
reply of the task. The type of data depends on the ID of the action. Its data is written
as hexadecimal values in ASCII.
• Introduced in version 8 of the configuration format.

4.3.7 RX-D
The RX-D cannot be used to receive the 4-series buoys, therefore the file format received is always
the HXV format. This receiver appends with the following fields:

rx d serial port
The name of the serial port to open. The name depends on the platform i.e.:

Linux The name looks like /dev/ttySx where x is the device number, starting from zero.
Windows The name looks like COMx where x is the device number, starting from one.

enabled

• Optional Boolean field, if omitted the value is treated as ‘true’.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled the data acquisition will not be started.

45
• Introduced in version 5 of the configuration format.

buoy type
The type of the buoy being received, being one of:

• WR-SG
• DWR MkIII
• DWR-G

Listing 4.8 contains an example of this receiver.

Listing 4.8: Example of a RX-D receiver on Windows.


<r e c e i v e r >
<i d >RX−D r e c e i v e r on Windows </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

< r x d s e r i a l p o r t >COM1</ r x d s e r i a l p o r t >


<b u o y t y p e >WR−SG</ b u o y t y p e >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >RX−D</ t y p e >
</ r e c e i v e r >

4.3.8 RX-C serial


The RX-C serial can be used to receive the MkIII and 4-series buoys. Other than that it is very
similar to the RX-D receiver. This receiver appends with the following fields:

rx c serial port
The name of the serial port to open. The name depends on the platform i.e.:

Linux The name looks like /dev/ttySx where x is the device number, starting from zero.
Windows The name looks like COMx where x is the device number, starting from one.

enabled

• Optional Boolean field, if omitted the value is treated as ‘true’.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled the data acquisition will not be started.
• Introduced in version 5 of the configuration format.

The last field added for this receiver type is the file format field. The field has one of the
following values:

HXV The other nodes for this type of receiver are described in §4.3.8.1.

HVA The other nodes for this type of receiver are described in §4.3.8.2.

The values are again fixed for validation and thus its value may be omitted.

46
4.3.8.1 HXV
This receiver appends with the following fields:

hvx buoy type


The type of the buoy being received, being one of:

• WR-SG
• DWR MkIII
• DWR-G

Listing 4.9 contains an example of this receiver.

Listing 4.9: Example of a HXV RX-C receiver using the serial port on Linux.
<r e c e i v e r >
<i d >RX−C r e c e i v e r s e r i a l on Linux </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

< r x c s e r i a l p o r t >/ dev / t t y S 0 </ r x c s e r i a l p o r t >

<h x v b u o y t y p e >WR−SG</ h x v b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >HXV</ f i l e f o r m a t >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >RX−C s e r i a l </ t y p e >
</ r e c e i v e r >

4.3.8.2 HVA
This receiver appends with the following fields:

hva buoy type


The type of the buoy being received, being one of:

• WR4
• DWR4
• GPS-DWR4

Listing 4.10 contains an example of this receiver.

Listing 4.10: Example of a HVA RX-C receiver using the serial port on Windows.
<r e c e i v e r >
<i d >RX−C r e c e i v e r s e r i a l on Windows </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

< r x c s e r i a l p o r t >COM1</ r x c s e r i a l p o r t >

<h v a b u o y t y p e >WR4</ h v a b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >HVA</ f i l e f o r m a t >

<!−− <t y p e /> would a l s o be v a l i d . −−>

47
<t y p e >RX−C s e r i a l </ t y p e >
</ r e c e i v e r >

4.3.9 RX-C Ethernet


This receiver is the same receiver as the RX-C serial, the difference is that instead of its serial port
its Ethernet port is used. This receiver appends with the following fields:

rx c ethernet hostname
The hostname or IP address of the RX-C receiver.

rx c ethernet port Defaults to 1180.


The port number on the RX-C receiver to connect to.
Note the default port number is the port number the RX-C receiver is hard-coded to. The
normally only changes when the network administrator changes it by changing the network
configuration.

enabled

• Optional Boolean field, if omitted the value is treated as ‘true’.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled the data acquisition will not be started.
• Introduced in version 5 of the configuration format.

The last field added for this receiver type is the file format field. The field has one of the
following values:

HXV The other nodes for this type of receiver are described in §4.3.9.1.

HVA The other nodes for this type of receiver are described in §4.3.9.2.

The values are again fixed for validation and thus its value may be omitted.

4.3.9.1 HXV
This receiver appends with the following fields:

hvx buoy type


The type of the buoy being received, being one of:

• WR-SG
• DWR MkIII
• DWR-G

Listing 4.11 contains an example of this receiver.

Listing 4.11: Example of a HXV RX-C receiver using the Ethernet port.
<r e c e i v e r >
<i d >RX−C r e c e i v e r u s i n g t h e E t h e r n e t p o r t </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

<r x c e t h e r n e t h o s t n a m e >r </ r x c e t h e r n e t h o s t n a m e >


<!−− < r x c e t h e r n e t p o r t /> would do t h e same . −−>

48
< r x c e t h e r n e t p o r t >1180</ r x c e t h e r n e t p o r t >

<h x v b u o y t y p e >WR−SG</ h x v b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >HXV</ f i l e f o r m a t >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >RX−C E t h e r n e t </ t y p e >
</ r e c e i v e r >

4.3.9.2 HVA
This receiver appends with the following fields:
hva buoy type
The type of the buoy being received, being one of:

• WR4
• DWR4
• GPS-DWR4

Listing 4.12 contains an example of this receiver.

Listing 4.12: Example of a HVA RX-C receiver using the Ethernet port.
<r e c e i v e r >
<i d >RX−C r e c e i v e r u s i n g t h e E t h e r n e t p o r t </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >

<r x c e t h e r n e t h o s t n a m e >r </ r x c e t h e r n e t h o s t n a m e >


<!−− < r x c e t h e r n e t p o r t /> would do t h e same . −−>
< r x c e t h e r n e t p o r t >1180</ r x c e t h e r n e t p o r t >

<h v a b u o y t y p e >WR4</ h v a b u o y t y p e >


<!−− < f i l e f o r m a t /> would a l s o be v a l i d . −−>
< f i l e f o r m a t >HVA</ f i l e f o r m a t >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >RX−C E t h e r n e t </ t y p e >
</ r e c e i v e r >

4.3.10 SBD
This section was introduced in version 4 of the configuration format.
This receiver receives e-mail messages from the Iridium satellite system. The SBD receiver
has the following fields:
enabled

• Mandatory Boolean field.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled no e-mail will be received. Sending configuration e-mail messages is possible
when the receiver is not enabled.

49
• Introduced in version 4 of the configuration format.

sbd email from filter

• Mandatory field.
• Contains the e-mail address the SBD e-mails are received from.
This field must be included, but should normally be left empty. When empty it uses
the default value, which is set correctly for normal deployment.
• If empty, the field defaults to ‘[email protected]’.
• Introduced in version 4 of the configuration format.

sbd email subject filter

• Mandatory field.
• Contains the filter of the subject for incoming SBD e-mail messages. When buoyd
looks at the e-mails on the POP3 server it filters them based on the sender and its
subject. E-mails not passing this filter are not retrieved and remain on the server. This
makes it possible to an e-mail account, which is also used for other e-mail. Note
Datawell recommends a dedicated e-mail account for SBD e-mail messages.
Warning It is not possible to use the same e-mail account for the 4-series and MkIII
buoys.
This field must be included, but should normally be left empty. When empty it uses
the default value, which is set correctly for normal deployment.
• If empty, the field defaults to: ‘SBD Msg From Unit: (d+)’.
• Introduced in version 4 of the configuration format.

sbd pop3 hostname

• Mandatory field.
• Must contain the hostname or IP address of the POP3 server.
• Introduced in version 4 of the configuration format.

sbd pop3 port number

• Mandatory field.
• If empty, the field defaults to 110.
• Must contain the port number of the POP3 server.
• Introduced in version 4 of the configuration format.

sbd pop3 user name

• Mandatory field.
• Must contain the user name used to log in the POP3 server.
• Introduced in version 4 of the configuration format.

sbd pop3 password

• Mandatory field.
• Must contain the password used to log in the POP3 server.
• Introduced in version 4 of the configuration format.

50
sbd pop3 use ssl

• Mandatory Boolean field.


• Contains the flag whether or not to use SSL to connect to the POP3 server. If the field
is set to ‘true’ the sbd pop3 port number field probably needs to be adjusted to 995.
• Introduced in version 4 of the configuration format.

sbd email from

• Mandatory field.
• Contains the e-mail address the SBD e-mails are sent from.
This field is used as sender field for the SBD e-mail messages.
• Introduced in version 4 of the configuration format.

sbd email to

• Mandatory field.
• Contains the e-mail address the SBD e-mails are sent to.
This field must be included, but should normally be left empty. When empty it uses
the default value, which is set correctly for normal deployment.
• If empty, the field defaults to ‘[email protected]’.
• Introduced in version 4 of the configuration format.

sbd email cc

• Mandatory field.
• Contains the e-mail address the SBD e-mails are sent CC’ed to.
This field is available as debugging aid. Normally the field can remain empty. It can be
set to a valid e-mail address so all e-mail messages sent are also sent a CC to another
mailbox.
• Introduced in version 4 of the configuration format.

sbd email subject format

• Mandatory field.
• Contains the formatter for the subject field for the e-mails send from buoyd to the buoy.
The text of the formatter is used as is, except when it encounters a percentage sign
‘%’, then the next character determines what happens:
i The formatter is replaced with the campaign’s IMEI number.
% The formatter is replaced with a single ‘%’.
All other values after the formatter are invalid.
This field must be included, but should normally be left empty. When empty it uses
the default value, which is set correctly for normal deployment.
• If empty, the field defaults to ‘%i’.
• Introduced in version 4 of the configuration format.

sbd smpt hostname

• Mandatory field.
• Must contain the hostname or IP address of the SMTP server.

51
• Introduced in version 4 of the configuration format.

sbd smpt port number

• Mandatory field.
• If empty, the field defaults to 25.
• Must contain the port number of the SMTP server.
• Introduced in version 4 of the configuration format.

sbd smtp use ssl

• Mandatory Boolean field.


• Contains the flag whether or not to use SSL to connect to the SMTP server. If the field
is set to ‘true’ the sbd smtp port number field probably needs to be adjusted to 465.
• Introduced in version 4 of the configuration format.

sbd smtp use authentication

• Mandatory Boolean field.


• Contains the flag whether or not to use authentication to log in to the SMTP server.
When set to true is uses the credentials of the POP3 server in order to log in to the
SMTP server.
• Introduced in version 4 of the configuration format.

campaign

• Zero or more sections.


• This section contains the child nodes as described in §4.3.10.1.
• Introduced in version 4 of the configuration format.

Listing 4.13 contains an example of this receiver. Since the Waves4 configurator is used to
create the campaign sections they are ignored in this example.

Listing 4.13: Example of a SBD receiver.


<r e c e i v e r >
<i d >SBD r e c e i v e r </ i d >
< t r a n s m i s s i o n p o r t >3000</ t r a n s m i s s i o n p o r t >
<e n a b l e d >t r u e </ e n a b l e d >

<s b d e m a i l f r o m f i l t e r />
<s b d e m a i l s u b j e c t f i l t e r />
<s b d p o p 3 h o s t n a m e >y o u r . s e r v e r </ s b d p o p 3 h o s t n a m e >
<!−− <s b d p o p 3 p o r t n u m b e r /> would do t h e same . −−>
<s b d p o p 3 p o r t n u m b e r >110</ s b d p o p 3 p o r t n u m b e r >

<s b d p o p 3 u s e r n a m e >u s e r name </ s b d p o p 3 u s e r n a m e >


<s b d p o p 3 p a s s w o r d >p a s s w o r d </ s b d p o p 3 p a s s w o r d >
<s b d p o p 3 u s e s s l >f a l s e </ s b d p o p 3 u s e s s l >

<s b d e m a i l f r o m >you@email . a d d r e s s </ s b d e m a i l f r o m >


< s b d e m a i l t o />
<s b d e m a i l c c />

52
< s b d e m a i l s u b j e c t f o r m a t />

<s b d s m t p h o s t n a m e >y o u r . s e r v e r </ s b d s m t p h o s t n a m e >


<!−− <s b d s m t p p o r t n u m b e r /> would do t h e same . −−>
<s b d s m t p p o r t n u m b e r >25</ s b d s m t p p o r t n u m b e r >
<s b d s m t p u s e s s l >f a l s e </ s b d s m t p u s e s s l >
<!−− The two l i n e s below s h o u l d be one l i n e . −−>
<s b d smtp use authentication >
f a l s e </ s b d s m t p u s e a u t h e n t i c a t i o n >

<!−− <t y p e /> would a l s o be v a l i d . −−>


<t y p e >SBD</ t y p e >
</ r e c e i v e r >

4.3.10.1 Campaign
This section was introduced in version 4 of the configuration format.
The section describes a campaign in the SBD receiver.

id

• Mandatory string field.


• The id of the campaign. This id must be unique for all campaigns and receivers.
(Receivers with no explicit campaign field use the receiver id as campaign id.)
• Introduced in version 4 of the configuration format.

IMEI

• Mandatory string field.


• The IMEI number of the Iridium modem. Every IMEI number can only be used for
one campaign. If multiple campaigns use the same IMEI number the behaviour is
undefined.
• Introduced in version 4 of the configuration format.

buoy type

• Mandatory field.
• The type of the buoy being received, being one of:
– WR4
– DWR4
– GPS-DWR4
• Introduced in version 4 of the configuration format.

settings

• Zero or one sections.


• This section contains the child nodes as described in §4.3.10.1.1
• Introduced in version 4 of the configuration format.

53
4.3.10.1.1 Settings
This section was introduced in version 4 of the configuration format.
Contains the configuration of the campaign in the buoy. The information is used by the Waves4
configurator to extract and modify the data.
At the moment it contains zero or more message sections. The message section contains:
msgid
• Mandatory number field.
• The field contains the msgid of the message. It contains a number that matches with a
hexadecimal value of a msgid as specified in the DWTP protocol [Dat13a].
• Introduced in version 4 of the configuration format.
interval
• Mandatory number field.
• Contains the interval field as specified in the DWTP protocol [Dat13a, §4.19 Buoy
communication messages].
• Introduced in version 4 of the configuration format.
offset
• Mandatory number field.
• Contains the offset field as specified in the DWTP protocol [Dat13a, §4.19 Buoy com-
munication messages].
• Introduced in version 4 of the configuration format.
update
• A mandatory section.
• This section contains the child nodes as described in §4.3.10.1.1.1.
• Introduced in version 4 of the configuration format.
4.3.10.1.1.1 Message update
This section was introduced in version 4 of the configuration format.
Contains the information regarding the last update of the configuration of this message.
timestamp
• Mandatory number field.
• Contains the number of seconds since midnight January first 1970. This value is the
same as the UNIX timestamp.
• Introduced in version 4 of the configuration format.
origin
• Mandatory string field.
• The origin of the modification. The value is one of:
user The setting was modified by a user of the software, usually using the Waves4
configurator.
buoy The settings were received from the buoy7 .
• Introduced in version 4 of the configuration format.
7
A future version of waved will be able to receive the information of the buoy and automatically update the settings
in buoyd.

54
4.3.11 MkIII SBD
This section was introduced in version 9 of the configuration format.
This receiver receives e-mail messages from the Iridium satellite system. The MkIII SBD
receiver has the following fields:

enabled

• Mandatory Boolean field.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled no e-mail will be received. Sending configuration e-mail messages is possible
when the receiver is not enabled.
• Introduced in version 9 of the configuration format.

mkiii sbd email from filter

• Mandatory field.
• The field is initialised to proper default value upon creation of the receiver. Normally
the field should not be modified.
• Contains the e-mail address the SBD e-mails are received from.
• Introduced in version 9 of the configuration format.

mkiii sbd email subject filter

• Mandatory field.
• The field is initialised to proper default value upon creation of the receiver. Normally
the field should not be modified.
• Contains the filter of the subject for incoming SBD e-mail messages. When buoyd
looks at the e-mails on the POP3 server it filters them based on the sender and its
subject. E-mails not passing this filter are not retrieved and remain on the server. This
makes it possible to an e-mail account, which is also used for other e-mail. Note
Datawell recommends a dedicated e-mail account for SBD e-mail messages.
Warning It is not possible to use the same e-mail account for the MkIII and 4-series
buoys.
• Introduced in version 9 of the configuration format.

mkiii sbd pop3 hostname

• Mandatory field.
• Must contain the hostname or IP address of the POP3 server.
• Introduced in version 9 of the configuration format.

mkiii sbd pop3 port number

• Mandatory field.
• Must contain the port number of the POP3 server.
• Introduced in version 9 of the configuration format.

mkiii sbd pop3 user name

• Mandatory field.
• Must contain the user name used to log in the POP3 server.

55
• Introduced in version 9 of the configuration format.

mkiii sbd pop3 password

• Mandatory field.
• Must contain the password used to log in the POP3 server.
• Introduced in version 9 of the configuration format.

mkiii sbd pop3 use ssl

• Mandatory Boolean field.


• Contains the flag whether or not to use SSL to connect to the POP3 server. If the field
is set to ‘true’ the mkiii sbd pop3 port number field probably needs to be adjusted to
995.
• Introduced in version 9 of the configuration format.

mkiii sbd email from

• Mandatory field.
• Contains the e-mail address the SBD e-mails are sent from.
This field is used as sender field for the SBD e-mail messages.
• Introduced in version 9 of the configuration format.

mkiii sbd email to

• Mandatory field.
• The field is initialised to proper default value upon creation of the receiver. Normally
the field should not be modified.
• Contains the e-mail address the SBD e-mails are sent to.
• Introduced in version 9 of the configuration format.

mkiii sbd email cc

• Mandatory field.
• Contains the e-mail address the SBD e-mails are sent CC’ed to.
This field is available as debugging aid. Normally the field can remain empty. It can be
set to a valid e-mail address so all e-mail messages sent are also sent a CC to another
mailbox.
• Introduced in version 9 of the configuration format.

mkiii sbd email subject format

• Mandatory field.
• The field is initialised to proper default value upon creation of the receiver. Normally
the field should not be modified.
• Contains the formatter for the subject field for the e-mails send from buoyd to the buoy.
The text of the formatter is used as is, except when it encounters a percentage sign
‘%’, then the next character determines what happens:
i The formatter is replaced with the campaign’s IMEI number.
% The formatter is replaced with a single ‘%’.
All other values after the formatter are invalid.

56
• Introduced in version 9 of the configuration format.

mkiii sbd smtp hostname

• Mandatory field.
• Must contain the hostname or IP address of the SMTP server.
• Introduced in version 9 of the configuration format.

mkiii sbd smtp port number

• Mandatory field.
• Must contain the port number of the SMTP server.
• Introduced in version 9 of the configuration format.

mkiii sbd smtp use ssl

• Mandatory Boolean field.


• Contains the flag whether or not to use SSL to connect to the SMTP server. If the field
is set to ‘true’ the mkiii sbd smtp port number field probably needs to be adjusted to
465.
• Introduced in version 9 of the configuration format.

mkiii sbd smtp use authentication

• Mandatory Boolean field.


• Contains the flag whether or not to use authentication to log in to the SMTP server.
When set to true is uses the credentials of the POP3 server in order to log in to the
SMTP server.
• Introduced in version 9 of the configuration format.

campaign

• Zero or more sections.


• This section contains the child nodes as described in §4.3.11.1.
• Introduced in version 9 of the configuration format.

4.3.11.1 Campaign
This section was introduced in version 9 of the configuration format.
The section describes a campaign in the MkIII SBD receiver.
id

• Mandatory string field.


• The id of the campaign. This id must be unique for all campaigns and receivers.
(Receivers with no explicit campaign field use the receiver id as campaign id.)
• Introduced in version 9 of the configuration format.

IMEI

• Mandatory string field.


• The IMEI number of the Iridium modem. Every IMEI number can only be used for
one campaign. If multiple campaigns use the same IMEI number the behaviour is
undefined.

57
• Introduced in version 9 of the configuration format.

buoy type

• Mandatory field.
• The type of the buoy being received, being one of:
– WR-SG
– DWR MkIII
– DWR-G
• Introduced in version 9 of the configuration format.

settings

• Zero or one sections.


• This section contains the child nodes as described in §4.3.11.1.1
• Introduced in version 9 of the configuration format.

4.3.11.1.1 Settings
This section was introduced in version 9 of the configuration format.
Contains the configuration of the campaign in the buoy. The information is used by the Waves4
configurator to extract and modify the data.
At the moment it contains zero or more message sections. The message section contains:

msgid

• Mandatory number field.


• The field contains the msgid of the message. It contains a number that matches with a
hexadecimal value of a msgid as specified in [Dat16b, §5.20.5 SBD messages].
• Introduced in version 9 of the configuration format.

interval

• Mandatory number field.


• Contains the interval field as specified in [Dat16b, §5.20.5 SBD messages].
• Introduced in version 9 of the configuration format.

update

• A mandatory section.
• This section contains the child nodes as described in §4.3.11.1.1.1.
• Introduced in version 9 of the configuration format.

4.3.11.1.1.1 Message update


This section was introduced in version 5 of the configuration format.
Contains the information regarding the last update of the configuration of this message. The
contents of this section are identical to the update secion of the SBD campain and described in
§4.3.10.1.1.1.

58
4.3.12 MkIII SMS
This section was introduced in version 10 of the configuration format.
This receiver receives SMS messages from the GSM network. system. The MkIII SMS re-
ceiver has the following fields:
enabled

• Mandatory Boolean field.


• This flag determines whether the receiver is enabled or not. If the receiver is not
enabled no SMS messages will be received. Sending configuration SMS messages is
possible when the receiver is not enabled.
• Introduced in version 10 of the configuration format.

mkiii sms serial port

• Mandatory string field.


• The name of the serial port to open. The name depends on the platform i.e.:
Linux The name looks like /dev/ttySx where x is the device number, starting from
zero.
Windows The name looks like COMx where x is the device number, starting from
one.
• Introduced in version 10 of the configuration format.

mkiii sms modem

• Mandatory string field.


• The type of modem being used, being one of8 :
– Cinterion EHS6T
• Introduced in version 10 of the configuration format.

campaign

• Zero or more sections.


• This section contains the child nodes as described in §4.3.12.1.
• Introduced in version 10 of the configuration format.

4.3.12.1 Campaign
This section was introduced in version 10 of the configuration format.
The section describes a campaign in the MkIII SMS receiver.
id

• Mandatory string field.


• The id of the campaign. This id must be unique for all campaigns and receivers.
(Receivers with no explicit campaign field use the receiver id as campaign id.)
• Introduced in version 10 of the configuration format.

phone number

• Mandatory string field.


8
At the moment only one modem is supported, other types may be added in the future.

59
• The phone number of the SIM card in the buoy. This is used both to connect to the
buoy and determine the buoy being received. The number must be in international
format.
• Introduced in version 10 of the configuration format.

buoy type

• Mandatory field.
• The type of the buoy being received, being one of:
– WR-SG
– DWR MkIII
– DWR-G
• Introduced in version 10 of the configuration format.

transmission interval

• Mandatory string field.


• Contains the transmission interval field as specified in [Dat16b, §5.18.6 GSM config-
uration and command message].
• Introduced in version 10 of the configuration format.

power mode

• Mandatory string field.


• Contains the power mode field as specified in [Dat16b, §5.18.6 GSM configuration
and command message].
• Introduced in version 10 of the configuration format.

4.4 Wavedrc
The configuration of waved is stored in a custom XML format. It is possible to modify this file
manually, but that is not advised. The Waves4 configurator is able to fully modify the file. The
use of the Waves4 configurator for waved is described in §4.2.3.
The structure is a XML tree, whose root node is named wavedrc. All nodes are mandatory, but
nodes can have a default or a fixed value. These nodes can simply be defined as <node/> and its
default of fixed value is used.
The nodes in the structure are:

version Fixed value, must be 4.


Contains the version number of the configuration. The program uses this information to
determine how to interpret the data. The allowed values will change in the future.

id

• Mandatory field.
• The id of waved. An empty value is not allowed.
• Introduced in version 1 of the configuration format.
• Changing this field using the communication protocol requires waved to be restarted.

communication port

• Mandatory field.

60
• If empty, the field defaults to 2998.
• This port is used for communication using UDP. This allows other parts of the Waves4
suite to find this waved instance on the network by means of an UDP broadcast mes-
sage.
The port is also used for communication using TCP. This is used to communicate with
Waves4 using the communication interface.
• Introduced in version 1 of the configuration format.
• Changing this field using the communication protocol requires waved to be restarted.

storage root

• Mandatory string.
• Introduced in version 1 of the configuration format.
• Behaviour of an empty field changed in version 4 of the configuration format.
• Changing this field using the communication protocol requires waved to be restarted.

This directory is the base directory to store the received data and log files. If the field is
empty a default location is used. The default depends on the operating system:

Windows It selects the directory %ProgramData%/Datawell/waved/. The %ProgramData%


usually is the directory C:/ProgramData.
Linux It selects the directory /var/lib/datawell/waved/.

Note it is advised to specify an absolute path name.


Note it is advised to store the data on a local disk and not a network drive. When the drive
is not available received data might be lost.

password

• Optional string.
• Introduced in version 4 of the configuration format.

This field contains the password required for configuring the settings of waved. If the field
is omitted the value is an empty string.
Note It is recommended to use the same password for all buoyd and waved instances on the
network. This makes using Waves4 configurator easier.

log

• Optional section.
• Introduced in version 4 of the configuration format.

This section configures the logger setting of waved. If the section is omitted the default
logger settings are used. The details of this section are the same as the log section of buoyd
and are described in §4.3.1.

buoyd One section. This section contains the child nodes as described in §4.4.1.

campaign Zero or more sections.


This section contains the child nodes as described in §4.4.2.

61
Listing 4.14: Example of a wavedrc file.
<wavedrc>
<v e r s i o n >2</ v e r s i o n >
<i d >L o c a t i o n a l p h a </ i d >
<p o r t />
<!−− A s t o r e r o o t on a L i n u x s y s t e m . −−>
< s t o r a g e r o o t >/ v a r / l o g / waved </ s t o r a g e r o o t >
<!−−
! ! A s t o r e r o o t on a Windows s y s t e m ,
! ! commented o u t s i n c e o n l y one may be g i v e n .
−−>
<!−− < s t o r a g e r o o t >D: \ d a t a \ waved </ s t o r a g e r o o t > −−>

<buoyd>
<c o m m u n i c a t i o n p o r t />
<s c a n t i m e o u t />
</ buoyd>

<campaign>
<i d >L o c a t i o n a l p h a f i l e </ i d >
< t r a n s m i s s i o n p o r t >4000</ t r a n s m i s s i o n p o r t >
</ campaign>

<campaign>
<i d >L o c a t i o n a l p h a RX−C E t h e r n e t </ i d >
< t r a n s m i s s i o n p o r t >4004</ t r a n s m i s s i o n p o r t >
<csv>
<e n a b l e d >t r u e </ e n a b l e d >
</ csv>
</ campaign>
</ wavedrc>

4.4.1 Buoyd section


This section contains the information for waved to find buoyd on the network. The buoyd section
has the following fields:

communication port Defaults to 2999


The communication port buoyd uses to listen to the network. This is the port configured in
buoydrc as defined in §4.3. By configuring the port here waved knows on which port to look
for buoyd.

scan time Defaults to 1000


This field is not used at the moment.

4.4.2 Campaign section


The campaign section contains several fields for configuring which campaigns to receive. The
campaign section has the following fields:

id

62
The id of campaign to receive. This id is configured in a buoydrc’s campaign as defined in
§4.3.2.

transmission port
The port number the receiver starts a TCP network listener. When a program connects to
this network port it will receive all the data being received from the receiver. This is used
by waved to receive the data of a receiver.
Note the notes for the communication port apply here as well.

enabled

• Optional field, if omitted the value is treated as ‘true’.


• Introduced in version 4 of the configuration format.
• This flag determines whether the campaign is enabled or not. If the campaign is not
enabled the data acquisition will not be active.

use verbose filename

• Optional field, if omitted the value is treated as ‘false’.


• Introduced in version 3 of the configuration format.
• Obsoleted in version 5 of the configuration format.

Older versions of waved stored the received data and log files without a campaign name and
without a file extension. This option allows to store the files with filenames including the
campaign name and a file extension.
Note this does not affect the CSV filenames, they are always stored with an extension.
(Backwards compatibility is the reason to make this field optional.)
The behaviour of the field has been changed in version 4 of the configuration format. Before
version 4.16.0 of the Waves4 suite waved started a new connection with buoyd for every
campaign. Certain receiver types can host multiple campaigns. Waved has been improved to
only make one connection for these campaigns. This means one receiver can have multiple
values for this field. These receivers now always assume the flag has been set to ‘true’. The
affected receivers are:

• Argos
• iBuoy
• SBD

Starting with version 5 of the configuration format the filenames have been modified. This
format is now always used.

csv

• Optional section.
• Introduced in version 2 of the configuration format.

This section configures the CSV output of waved. If the section is omitted the CSV output
is disabled. The details of this section are described in §4.4.2.1.

63
4.4.2.1 CSV
The csv section has the following fields:

enabled

• Mandatory field.
• Must contain a boolean value.
• Introduced in version 2 of the configuration format.

This field determines whether or not there will be CSV output. The format of the CSV
output is described in §5.2.1.

output directory month as string

• Optional field, if omitted the value is treated as ‘false’.


• Must contain a boolean value.
• Introduced in version 2 of the configuration format.

The programs W@ves21 and rfBuoy log their data in directories where the month directories
have the name of the month. In order to keep compatibility with that directory structure it is
possible to use that for the CSV format.
If this option is set to ‘true’ the name of the month in the directory will be set to the name
of the month. If set to ‘false’ the directory name will be the number of the month.

4.5 Waves4rc
The configuration of Waves4 is stored in a custom XML format. This configuration file needs to
be modified in order to add new buoys to the network. The table below describes the fields in the
XML file.
The structure is a XML tree, whose root node is named waves4rc. All nodes are mandatory,
but nodes can have a default or a fixed value. These nodes can simply be defined as <node/> and
its default of fixed value is used.
The nodes in the structure are:

version Fixed value, must be in the range [8..9].


Contains the version number of the configuration. The program uses this information to
determine how to interpret the data. The allowed values will change in the future.

waved One section. This section contains the child nodes as described in §4.5.1.

campaign Zero or more sections.


Starting with version 4.16.0 these sections are no longer used.

units Zero or one section.


This section has been added in version 4.16.20. This section contains the child nodes as
described in §4.5.2.

Listing 4.15: Example of a waves4rc file.


<w a v e s 4 r c >
<v e r s i o n >1</ v e r s i o n >

<waved>
<c o m m u n i c a t i o n p o r t />

64
<s c a n t i m e o u t />
</waved>
</ w a v e s 4 r c >

4.5.1 Waved section


This section contains the information for the Waves4 program to find waved on the network. The
waved section has the following fields:

communication port Defaults to 2998


The communication port waved uses to listen to the network. This is the port configured
in wavedrc as defined in §4.4. By configuring the port here the Waves4 program knows on
which port to look for waved.

hostname Optional
Starting with version 4.16.0 the field is no longer used.

scan time Defaults to 1000


This field is not used at the moment.

4.5.2 Units section


This section contains the units used in the plot widgets The units section contains the following
fields:

direction

• Mandatory field.
• Must contain one of the following values:
rad For using radians as direction unit.
° For using degrees as direction unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display directions.

duration

• Mandatory field.
• Must contain one of the following values:
s For using seconds as duration unit.
h For using hours as duration unit.
day For using days as duration unit.
week For using weeks as duration unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display durations.

energy

• Mandatory field.
• Must contain one of the following values:
J For using joules as energy unit.

65
Wh For using watt-hours as energy unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display amounts of energy.

gps position 9

• Mandatory field.
• Must contain one of the following values:
rad For using radians as gps position unit.
° For using degrees as gps position unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display gps positions.

height 10

• Mandatory field.
• Must contain one of the following values:
m For using metres as height unit.
ft For using feet as height unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display heights.

speed

• Mandatory field.
• Must contain one of the following values:
m/s For using metres per second as speed unit.
knot For using knots as speed unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display speeds.

temperature

• Mandatory field.
• Must contain one of the following values:
K For using kelvins as temperature unit.
°C For using degrees Celsius as temperature unit.
°F For using degrees Fahrenheit as temperature unit.
• Introduced in version 7 of the configuration format.

This field determines the unit used to display temperatures.

9
Note: this unit is not yet used.
10
Note: this unit is not yet used.

66
5 Logging
5.1 Buoyd
5.1.1 Program log files
When buoyd runs as a background process it logs status messages in log files. Note this feature
has been introduced in version 4.10.0 and some older parts of the program may not use the new
logging facility yet.
The files are stored in a directory named:
/storage root/log/%Y/%M
where:

storage root The location where buoyd stores its data. This location is configured in buoyd’s
configuration file, see §4.3.

%Y The year the log entry is created. The value always has the full year, e.g. 2014. The time is
the local time.

%M The month the log entry is created. The value always has two digits, e.g. 03 for March. The
time is the local time.

In this directory there will be a log file for every day of the month. The name of the file is:
%Y-%M-%D.log
where:

%Y The year the log entry is created. The value always has the full year, e.g. 2014. The time is
the local time.

%M The month the log entry is created. The value always has two digits, e.g. 03 for March. The
time is the local time.

%D The day the log entry is created. The value always has two digits. The time is the local time.

Every log entry is stored on a line with the following format:


%Y%M%DT%h%m%s.%f [%L] %T
where:

%Y The year the log entry is created. The value always has the full year, e.g. 2014. The time is
the local time.

%M The month the log entry is created. The value always has two digits, e.g. 03 for March. The
time is the local time.

%D The day the log entry is created. The value always has two digits. The time is the local time.

%h The hour of the day the log entry is created. The value always has two digits. The time is the
local time.

%m The minute of the hour the log entry is created. The value always has two digits. The time
is the local time.

%s The second of the minute the log entry is created. The value always has two digits. The time
is the local time.

67
%f The fraction of the second the log entry is created. The value always has six digits. The time
is the local time.
In most cases the fraction of the seconds are not interesting, but for trouble shooting the can,
at times, be very valuable.

%L The log level of the message:

FATAL A fatal error has occurred, this often causes the program to be terminated or a
subsystem to be disabled.
ERROR An error has occurred, the program can still continue, but if an error persists it
might be wise to contact Datawell.
WARN A warning has been issued, a minor failure occurred.
INFO The program gave a status message intended to get more information about the status
of the program.
DEBUG The program gave extra information to aid finding the cause of a problem in the
program.

%T The ID of the thread of the program which generated the log entry is created. This informa-
tion can normally be ignored and is mainly interesting for Datawell engineers.

5.1.2 SBD
The SBD based receivers log the received e-mail messages. The e-mail messages are stored in a
directory named:
/storage root/%R/%Y/%M
where:
storage root The location where buoyd stores its data. This location is configured in buoyd’s
configuration file, see §4.3.

%R The id of the receiver receiving the e-mail message. This field is the receiver id as configured
in §4.3.2.

%Y The year the data is received. The value always has the full year, e.g. 2014. The time is in
UTC. Note when replaying old data from a file the time may not match with the time of the
data in the file.

%M The month the data is received. The value always has two digits, e.g. 04 for April. The time
is in UTC. Note when replaying old data from a file the time may not match with the time
of the data in the file.
In this directory there will be a file for every e-mail message. The name of the file is:
%R}%Y-%M-%DT%hh%mm%sZ%E where:
%R The id of the receiver receiving the e-mail message. This field is the receiver id as configured
in §4.3.2.

%Y The year the e-mail message was ‘received’. The value always has the full year, e.g. 2014.
The time is the local time.

%M The month the e-mail message was ‘received’. The value always has two digits, e.g. 03 for
March. The time is in UTC.

%D The day the e-mail message was ‘received’. The value always has two digits. The time is in
UTC.

68
%h The hour of the day the e-mail message was ‘received’. The value always has two digits. The
time is in UTC.

%m The minute of the hour the e-mail message was ‘received’. The value always has two digits.
The time is in UTC.

%s The second of the minute the e-mail message was ‘received’. The value always has two digits.
The time is in UTC.

%E The extension of the filename: ‘.sbd’.

Since a timestamp with a one second resolution only allows for one e-mail per second the
‘received’ timestamp has a little twist. When the timestamp of the e-mail matches an existing
e-mail, the timestamp is increased by one second, until a unique name is found.

5.1.3 Argos
The Argos based receivers log the received e-mail messages. The e-mail messages are stored in a
directory named:
/storage root/%R/%Y/%M
where:

storage root The location where buoyd stores its data. This location is configured in buoyd’s
configuration file, see §4.3.

%R The id of the receiver receiving the e-mail message. This field is the receiver id as configured
in §4.3.2.

%Y The year the data is received. The value always has the full year, e.g. 2014. The time is in
UTC. Note when replaying old data from a file the time may not match with the time of the
data in the file.

%M The month the data is received. The value always has two digits, e.g. 04 for April. The time
is in UTC. Note when replaying old data from a file the time may not match with the time
of the data in the file.

In this directory there will be a file for every e-mail message. The name of the file is:
%R}%Y-%M-%DT%hh%mm%sZ%E where:

%R The id of the receiver receiving the e-mail message. This field is the receiver id as configured
in §4.3.2.

%Y The year the e-mail message was ‘received’. The value always has the full year, e.g. 2014.
The time is the local time.

%M The month the e-mail message was ‘received’. The value always has two digits, e.g. 03 for
March. The time is in UTC.

%D The day the e-mail message was ‘received’. The value always has two digits. The time is in
UTC.

%h The hour of the day the e-mail message was ‘received’. The value always has two digits. The
time is in UTC.

%m The minute of the hour the e-mail message was ‘received’. The value always has two digits.
The time is in UTC.

69
%s The second of the minute the e-mail message was ‘received’. The value always has two digits.
The time is in UTC.

%E The extension of the filename: ‘.elm’.

Since a timestamp with a one second resolution only allows for one e-mail per second the
‘received’ timestamp has a little twist. When the timestamp of the e-mail matches an existing
e-mail, the timestamp is increased by one second, until a unique name is found.

5.1.4 iBuoy
iBuoy logs its data in two different file formats:

IBS iBuoy uses this file format to log the entire communication between buoyd and the buoy.
This logger logs its data per session and may or may not belong to a campaign buoyd is
configured for. When the connection is started buoyd does not know which campaign the
data belongs to so the data is logged in the receiver directory. The data logged with this
logger also contains the data stored by the DWTP logger.

DWTP iBuoy uses this file format to log the DWTP data transmitted from the buoy to buoyd. The
logger logs its data per session, but only of campaigns buoyd is configured for.

With the Waves4 configurator it is also possible to retreive files from the buoy’s logger card,
these files will also be processed by buoyd’s logging module.

5.1.4.1 IBS
The iBuoy based receivers log the communication between the buoy and buoyd. The logs are
stored in a directory named:
/storage root/%R/%Y/%M
where:

storage root The location where buoyd stores its data. This location is configured in buoyd’s
configuration file, see §4.3.

%R The id of the receiver receiving the data. This field is the receiver id as configured in §4.3.2.

%Y The year the data is received. The value always has the full year, e.g. 2014. The time is in
UTC. Note when replaying old data from a file the time may not match with the time of the
data in the file.

%M The month the data is received. The value always has two digits, e.g. 04 for April. The time
is in UTC. Note when replaying old data from a file the time may not match with the time
of the data in the file.

In this directory there will be a file for every session. The name of the file is:
%R-%S}%Y-%M-%DT%hh%mm%sZ%E where:

%R The id of the receiver receiving the data. This field is the receiver id as configured in §4.3.2.

%S The id of the receiver’s session. When a buoy connects to buoyd the session gets an ID.
This ID is used to log the data from different buoys. This is required since several buoy can
connect at the same moment. At the moment the buoy connects to buoyd, buoyd does not
know what the ID of the buoy is so it cannot use that ID for the log file.

%Y The year the connection was made. The value always has the full year, e.g. 2014. The time
is the local time.

70
%M The month the connection was made. The value always has two digits, e.g. 03 for March.
The time is in UTC.

%D The day the connection was made. The value always has two digits. The time is in UTC.

%h The hour of the day the connection was made. The value always has two digits. The time is
in UTC.

%m The minute of the hour the connection was made. The value always has two digits. The time
is in UTC.

%s The second of the minute the connection was made. The value always has two digits. The
time is in UTC.

%E The extension of the filename: ‘.ibs’.

The data in the log file has 4 fields per entry:


SENDER TAB SIZE TAB DATA EOL
where:

SENDER The is one of:

< The data is transmitted from the buoy to buoyd.


> The data is transmitted from buoyd to the buoy.

TAB The TAB character, ASCII code 9.

SIZE The size of DATA in bytes.

TAB The TAB character, ASCII code 9.

DATA The data of the message.

EOL The line feed character, ASCII code 10.

5.1.4.2 DWTP
Contains the DWTP data logged by buoyd for an glsiBuoy receiver. The logs are stored in a
directory named:
/storage root/%C/%Y/%M
where:

storage root The location where buoyd stores its data. This location is configured in buoyd’s
configuration file, see §4.3.

%C The id of the campaign receiving the data. This field is the campaign id as configured in
§4.3.5.1.

%Y The year the data is received. The value always has the full year, e.g. 2014. The time is in
UTC. Note when replaying old data from a file the time may not match with the time of the
data in the file.

%M The month the data is received. The value always has two digits, e.g. 04 for April. The time
is in UTC. Note when replaying old data from a file the time may not match with the time
of the data in the file.

In this directory there will be a file for every session. The name of the file is:
%C}%Y-%M-%DT%hh%mm%sZ%E where:

71
%C The id of the campaign receiving the data. This field is the campaign id as configured in
§4.3.5.1.

%Y The year the connection was made. The value always has the full year, e.g. 2014. The time
is the local time.

%M The month the connection was made. The value always has two digits, e.g. 03 for March.
The time is in UTC.

%D The day the connection was made. The value always has two digits. The time is in UTC.

%h The hour of the day the connection was made. The value always has two digits. The time is
in UTC.

%m The minute of the hour the connection was made. The value always has two digits. The time
is in UTC.

%s The second of the minute the connection was made. The value always has two digits. The
time is in UTC.

%E The extension of the filename: ‘.dwtp’.

5.1.4.3 Logger data


Contains the data retreived from the buoy’s logger. The files are stored in a directory named:
/storage root/%C
where:
storage root The location where buoyd stores its data. This location is configured in buoyd’s
configuration file, see §4.3.

%C The id of the campaign receiving the data. This field is the campaign id as configured in
§4.3.5.1.
The name of the file, is the name of the file on the logger. The data retreived from the logger,
contains a part of a file. The received data will be stored at the same offset as the original data. If
this results in undefined data in the file, this data will be set to the NUL-character. When the data
received was allready received before the data will be overwritten. During normal operations the
buoy only appends data to files, so they will be overwritten by the same data.
For example when the buoy’s SYSLOG.TXT contains:
01-01-1970 00:00:10 SYS: buoy started
Requested are 8 bytes starting at offset 11. The file retreived will look like:
···········00:00:10
Where · represents the NUL-character. When retreiveing 10 bytes starting at offset 0 the file will
look like:
01-01-1970·00:00:10
When retreiving 29 bytes starting at offset 0 the file will look like:
01-01-1970 00:00:10 SYS: buoy
This allows to retreive a data in multiple small parts and add more data when available. For
example, it is possible to get the entire SYSLOG.TXT at some point. Then only ask for the new
data after a while.

72
5.2 Waved
5.2.1 CSV
When the CSV output for waved is enabled (see §4.4.2.1) the program will create CSV files. The
CSV files are stored in a directory named:
/storage root/campaign/year/month
where:
storage root The location where waved stores its data. This location is configured in waved’s
configuration file, see §4.4.

campaign The name of the campaign, whose data is stored. This value is campaign name as
configured in §4.4.2.

year The year the data is received. The value always has the full year, e.g. 2013. The time is in
UTC. Note when replaying old data from a file the time may not match with the time of the
data in the file.

month The month the data is received. The value always has two digits, e.g. 05 for May. The
time is in UTC. Note when replaying old data from a file the time may not match with the
time of the data in the file.
Only for the month in the directory it can be stored as the name of the month by setting the
‘output directory month as string’ as described in §4.4.2.1.
The data is buffered and will be written every 15 minutes, starting at the full hour mark. After
writing, the files will be closed and can be used by other processes. When a file fails to open, the
data will be buffered until it is possible to write. The retry will happen at the next write interval,
15 minutes later.
The data in the CSV files, is the data transmitted by the buoy. The values of the fields and their
units are the same as in the DWTP-specifications [Dat13a].
• When a field contains a NaN value it is written as ‘NaN’ in the output.

• The comma separator is the tabular character.

• The decimal separator is the full stop character.

5.2.1.1 Displacements
The displacements are stored in a file named:
campaign{id}year-month-day.csv
where:
campaign Is the same as campaign described in §5.2.1.

id The type of CSV file. For the displacments it contains ‘displ’.

month Is the same as month described in §5.2.1.

day The day the data is received. The value always has two digits, e.g. 01. The time is in UTC.
Note when replaying old data from a file the time may not match with the time of the data
in the file.
For example the file named ‘demo{displ}2013-05-01.csv’ contains the displacements of the
first of May 2013 for the campaign ‘demo’.
A new file is created every day. The file contains five columns:

73
1. • This field contains a timestamp. The format is based in the format used for the mes-
sages [Dat13a, §3.2, HF link header]. But it can also contain a fraction of a second, if
that value is not equal to 0.
• The timestamp is the UTC timestamp, when the first vector was received by waved, not
the time the vector was transmitted by the buoy. The time of all other displacements
are based on this value and the sampling frequency in the buoy. Note when replaying
old data from a file the time of the vectors will not be the time the data was initially
was received.
Note when replaying old data at an increased transmission rate, for example by in-
creasing the transmission speed factor in buoyd (see §4.3.4), the timestamp might not
be continuous.

2. This field contains the status of the vector and can be:

0 The vector was received properly.


1 The vector received was damaged, but has been properly repaired.
2 The vector received was damaged, and could not be repaired. There is no indication how
good or bad the vector is, nor how many of the six displacement values are damaged.
3 The data received was invalid. Unlike the cases above where the problem normally is
caused by the transmission through the ether, this problem is caused by a transmission
error between the receiver and buoyd or between buoyd and waved.

3. This field contains the heave displacement, see [Dat13a, §2.1.1 Decoding the real time data
to displacements] for more information.

4. This field contains the northern displacement, see [Dat13a, §2.1.1 Decoding the real time
data to displacements] for more information.

5. This field contains the western displacement, see [Dat13a, §2.1.1 Decoding the real time
data to displacements] for more information.

5.2.1.2 Messages
The displacements are stored in a file named:
campaign{id}year-month.csv
where:

campaign Is the same as campaign described in §5.2.1.

id The type of CSV file. The value is the MsgID of the field [Dat13a, Chapter 4, Defined mes-
sages].

month Is the same as month described in §5.2.1.

For example the file named ‘demo{0xF80}2013-05.csv’ contains the GPS location messages
of May 2013 for the campaign ‘demo’.
A new file is created every month.
In general the fields in the columns are a one on one representation of the messages in the
specifications except:

• The MsgID is not in the data; it can be determined from the filename.

• The CRC-4 checksum is not in the data; when it does not match, there is an error in the
message and the message is not decoded.

74
Next to these generic exceptions some messages have their own exceptions:

Heave spectrum message (0xF20)

• The Smax is omitted.


• The Sek is replaced by Sk . This makes it easier to directly use the power spectral
density.

Primary directional spectrum message (0xF21) Instead of alternating the ‘Direction from’, and
‘Spread’ columns, these columns are stored after each other. First the 100 columns for the
‘Direction from’, then the 100 columns for the ‘Spread’.

Secondary directional spectrum message (0xF22 and 0xF28) Instead of alternating the ‘m2 ’,
‘n2 ’, and ‘K’ columns, these columns are stored after each other. First the 100 columns for
the ‘m2 ’, then the 100 columns for the ‘n2 ’ and finally the 100 columns for the ‘K’.

75
6 Running
This chapter describes how to run the various programs. But before doing so first it will be ex-
plained how to stop and start a background program.

6.1 Starting a background program


The starting of a background program is operating system dependant.
6.1.0.0.1 Linux
On Linux daemons are managed by the ‘root’ user. The most common way to manage daemons is
by using the command line.

starting invoke-rc.d program start

stopping invoke-rc.d program stop

restarting invoke-rc.d program restart

query status invoke-rc.d program status

6.2 Buoyd
This program is normally run as a background process, run buoyd -h to see all options.

6.2.1 Starting as daemon (Linux only)


During the installation of buoyd it is configured to run as a daemon, this means the program will
always run in the background.

6.3 Waved
This program is normally run as a background process, run waved -h to see all options.

6.3.1 Starting as daemon (Linux only)


During the installation of waved it is configured to run as a daemon, this means the program will
always run in the background.

6.4 The Waves4 program


This program has no command line option and can be started from the command line or the menu.

76
7 Troubleshooting
When you run into problems or have further questions, please contact our software department at
[email protected].

77
A Wire communication protocol
This chapter describes the communication protocol used in the Waves4 suite. Versions prior to
version 4.10.0 used an older telnet based protocol. This protocol is not documented and considered
obsolete1 . Version 4.10.0 introduced a new protocol, which is described in this chapter. Waved
started to use this protocol starting with version 4.16.0.

A.1 General
The communication protocol has a few layers:
Protocol The low level message protocol. This protocol describes how the data is transmitted
over the network.
Commands The command level defines the commands available in the communication protocol.
This is allows the interaction between the applications in the Waves4 suite.
File system The file system contains the settings of the application. The commands allow inter-
action with the file system, allowing to remotely modify the settings of an application or
receiver.

A.1.1 Protocol
The protocol is used over a TCP/IP connection and is based on messages. Every message has a
13 byte header followed by its data. The header contains the following fields:
• 4 bytes containing a magic header. The header contains the following 4 bytes: 0x44, 0x57,
0x07, 0xA9. This is used to identify whether the communication partner uses the same
protocol.
This magic header has been introduced in version 4.16.0 of the Waves4 suite. Older versions
of the Waves4 suite do not contain a magic header and their header is 9 instead of 13 bytes.
These versions of the protocol are not compatible.
• 4 bytes containing the size of the rest of the message. The value is a 32 bit unsigned value
stored in network order.
The way to retrieve messages over the network is to receive 4 bytes, decode this to a value
x and then retrieve the next x bytes.
• 1 byte containing the type of message. The possible values are:
A The message contains an action. An action is a request to the communication partner to
do a certain action and return its result. The result can be a simple status value, but can
also return additional information.
R The message contains a reply. A reply is the answer to an action. Thus replies are only
send to reply to an action.
M The message contains a notification. A notification is much like an action, except there
is no reply. This is mainly used to send received data to listeners and status updates.
• 4 bytes containing the id of the message. The value is a 32 bit unsigned value stored in
network order.
The id depends on the type of message:
1
Even though parts of the Waves4 suite still use this protocol.

78
Action The id contains a value specified by the sender. This id should be unique so its
associated reply can be identified.
The easiest way is to use a sequence that increases with every call.
The id 0 is best avoided.
Reply The id contains the value of the action it replies to.
Notification The id is not used and should be 0.

The rest of the message contains the contents of the message. The contents can be binary or
text based.

A.1.2 Commands
The command interface is a text based protocol, where the connecting party sends actions to the
server and the server replies them. The server can also send notifications. The commands work on
a virtual file system allowing the user to query or modify settings.
Every server implements a basic set of commands and offers a basic set of files. The specific
implementations of these servers can extend the number of commands and files.
When interacting with the server there are two operation modi:

guest After connecting to an interface the user is set to guest mode.

operator After issuing the Operator command the session will switch to operator mode.
In this mode there are different file system permissions and also certain commands are only
available in operator mode.

There is a third user, the system user. This user is used by the programs internally and not available
via the command interface.
For the file system interaction there are a few terms defined:

File name A file name is a string, which when looked up in the file system results in a file.

Directory name A file name is a string, which when looked up in the file system results in a
directory.

Path name A path name is a string, which is either a file name or a directory name

File A file is an item in the file system, representing a file. A file can be used to store or retrieve
data.

Directory A directory is an item in the file system, representing a directory. A directory is a


container used to hold other files or directories.

Node A directory is an item in the file system, representing either a file or a directory.

The following sections list the available commands in alphabetic order.

A.1.2.1 Exit
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes no arguments.

Description Lets the server close the connection with the client. Unlike the other commands this
command will not reply its status.

79
A.1.2.2 Get
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

File name
• A mandatory argument containing a string.
• Contains the name of an existing file in the file system. The contents of this file
will be returned.

Description Retrieves the contents of a file in the file system.

Returns The contents of the file.

Errors

• The file does not exist.


• The current user is not allowed to read the contents of the file.

A.1.2.3 Guest
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Only available in operator mode.

Arguments This function takes no arguments.

Description Changes the current user from operator to guest.

A.1.2.4 Keepalive
Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Time-out
• A mandatory argument containing an unsigned number.
• Contains the transmission time-out in seconds before a new keepalive message is
sent. The value 0 means no time-out.

Description When the server has a non-zero keepalive time-out the server makes sure the server
transmits data at a regular interval. When, after time-out seconds, no data is transmitted the
server sends a notification message containing the string ‘ping’. This makes it possible for
the client to detect whether the network connection is still ‘alive’.
Warning The timing of the time-out interval may not use a high-precision timer.

80
A.1.2.5 Ls
Version Introduced in version 4.10.0 of the Waves4 suite. Modified in version 4.16.0 of the
Waves4 suite; the mtime’s timezone was not specified and was local time, it is now specified
as UTC.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Path name
• An optional argument containing a string. If omitted the contents of the root
directory are shown.
• Contains the name of an existing path in the file system.

Description Retrieves information regarding a node.

Returns Depending on the type of node it returns:

• If the path is a file it shows the information of the file.


• If the path is a directory it shows the information of all files and directories in selected
directory.

The information contains a tab separated list of fields for every item:

Type Contains the type of the node. The possible types are:
f The node is a file.
d The node is a directory.
Other types could be added in a future version of the Waves4 suite.
Permission Contains the permission mask of the node. A permission mask consists of 6
characters:
1. Contains a ‘r’ if the system user is allowed to read the node.
Contains a ‘-’ if the system user is not allowed to read the node.
2. Contains a ‘w’ if the system user is allowed to write the node.
Contains a ‘-’ if the system user is not allowed to write the node.
3. Contains a ‘r’ if the operator is allowed to read the node.
Contains a ‘-’ if the operator is not allowed to read the node.
4. Contains a ‘w’ if the operator is allowed to write the node.
Contains a ‘-’ if the operator is not allowed to write the node.
5. Contains a ‘r’ if the guest is allowed to read the node.
Contains a ‘-’ if the guest is not allowed to read the node.
6. Contains a ‘w’ if the guest is allowed to write the node.
Contains a ‘-’ if the guest is not allowed to write the node.
Owner Contains the name of the user owning the file.
Size Contains the size of the node. The value depends on the type:
File Contains the size in bytes.
Directory Contains the number of elements in the directory.
Mtime Contains an UTC timestamp containing the last modification time of a node. The
value is the number of seconds since midnight of January first 1970.
ID Contains the ID – the name – of the node.

81
Errors

• The path does not exist.


• The current user is not allowed to get the information of the path.

A.1.2.6 Operator
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Only available in guest mode.

Arguments This function takes the following arguments:

Password
• An optional argument containing a string. If omitted an empty password is used.
• Contains password required to switch to operator mode.

Description Changes the current user from guest to operator. The name of the operator depends
on the communication server. The main communication ports operator is a different operator
as a receiver’s operator.

Errors

• The supplied password is invalid.

A.1.2.7 Set
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

File name
• A mandatory argument containing a string.
• Contains the name of an existing file in the file system. The contents of this file
will be modified.
It is not possible to create new files with the set command.
Contents
• An optional argument containing a string.
• Contains the new contents of the file. The contents need to be compatible with
the type of the file.
In some cases an empty string is valid content, therefore the argument is optional.

Description Modifies the contents of a file in the file system.

Errors

• The file does not exist.


• The current user is not allowed to write the contents of the file.

82
A.1.2.8 Time
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes no arguments.

Description Returns the time on the server. This command is available for debugging purposes.

Returns The UTC time of the server in two tab separated fields:

1. The number of seconds since midnight of January first 1970. This value is the same as
the UNIX timestamp.
2. A string in the ISO time format. This format is human readable.

A.1.2.9 Tree
Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Path name
• An optional argument containing a string. If omitted the contents of the root
directory are shown.
• Contains the name of an existing path in the file system.

Description Recursively retrieves information regarding a node. The result of the function looks
a lot like the output of the Ls command. The main differences are:

• The nodes are listed recursively.


• The mtime has a higher resolution.
• The ID contains the path of the node.

Returns Depending on the type of node it returns:

• If the path is a file it shows the information of the file.


• If the path is a directory it shows the information of all files and directories in selected
directory.

The information contains a tab separated list of fields for every item:

Type Contains the type of the node. The possible types are:
f The node is a file.
d The node is a directory.
Other types could be added in a future version of the Waves4 suite.
Permission Contains the permission mask of the node. A permission mask consists of 6
characters:
1. Contains a ‘r’ if the system user is allowed to read the node.
Contains a ‘-’ if the system user is not allowed to read the node.
2. Contains a ‘w’ if the system user is allowed to write the node.
Contains a ‘-’ if the system user is not allowed to write the node.

83
3. Contains a ‘r’ if the operator is allowed to read the node.
Contains a ‘-’ if the operator is not allowed to read the node.
4. Contains a ‘w’ if the operator is allowed to write the node.
Contains a ‘-’ if the operator is not allowed to write the node.
5. Contains a ‘r’ if the guest is allowed to read the node.
Contains a ‘-’ if the guest is not allowed to read the node.
6. Contains a ‘w’ if the guest is allowed to write the node.
Contains a ‘-’ if the guest is not allowed to write the node.
Owner Contains the name of the user owning the file.
Size Contains the size of the node. The value depends on the type:
File Contains the size in bytes.
Directory Contains the number of elements in the directory.
Mtime Contains an UTC timestamp containing the last modification time of a node. The
value is the number of microseconds since midnight of January first 1970.
ID Contains the ID – the path and name – of the node.
Errors
• The path does not exist.
• The current user is not allowed to get the information of the path. Note when the
current user is not allowed to get information of child node this node’s children are
omitted and does not result in an error.

A.1.2.10 Whoami
Version Introduced in version 4.10.0 of the Waves4 suite.
Availability Available in operator and guest mode.
Arguments This function takes no arguments.
Description Returns the name of the current user.
Returns Returns the name of the current user. The name is ‘guest’ or the name associated with
the operator of this interface.

A.1.3 File system


The subsections give an overview of the available files and directories in the basic file system. Not
every file and directory are documented, the ones not documented are not part of the interface and
used privately. Their existence can differ without notice.

A.1.3.1 The directory ‘system/version’


This directory stores the version information of the application.
A.1.3.1.1 The file ‘system/version/major’
Version Introduced in version 4.10.0 of the Waves4 suite.
Type Number
Permissions Read only.
Description Holds the major number of the application’s version. For version 4.10.0 it holds the
value 4.

84
A.1.3.1.2 The file ‘system/version/minor’
Version Introduced in version 4.10.0 of the Waves4 suite.

Type Number

Permissions Read only.

Description Holds the minor number of the application’s version. For version 4.10.0 it holds the
value 10.

A.1.3.1.3 The file ‘system/version/patch’


Version Introduced in version 4.10.0 of the Waves4 suite.

Type Number

Permissions Read only.

Description Holds the patch number of the application’s version. For version 4.10.0 it holds the
value 0.

A.1.3.1.4 The file ‘system/version/string


Version Introduced in version 4.10.0 of the Waves4 suite.

Type String

Permissions Read only.

Description Holds the version string of the application’s version. For version 4.10.0 it holds the
value 4.10.0.0.

A.1.3.2 The directory ‘system/protocol’


This directory stores the version information of the protocol used for the communication. This di-
rectory can be used to determine whether two applications in the Waves4 suite are able to function
together. The protocol has a generation number and a level number.
The generation identifies the main functionality of the interface. For two applications to func-
tion together they need to be able to use the same generation number. When the number differs
the applications are incompatible. For example a command can be removed or a file in the file sys-
tem is removed. Note the get command and the protocol directory will remain the same between
generations to make it possible to validate the compatibility.
The level number identifies the current iteration of the interface. When the number increases
new functionality is added, but the interface remains backwards compatible. This means only new
commands and files are added.
A.1.3.2.1 The file ‘system/protocol/generation
Version Introduced in version 4.10.0 of the Waves4 suite.

Type Number

Permissions Read only.

Description Contains the generation number of the protocol.

85
A.1.3.2.2 The file ‘system/protocol/generation version
Version Introduced in version 4.10.0 of the Waves4 suite.

Type String

Permissions Read only.

Description Contains a version string specifying in which version of the Waves4 suite this gen-
eration number is introduced.

A.1.3.2.3 The file ‘system/protocol/level


Version Introduced in version 4.10.0 of the Waves4 suite.

Type Number

Permissions Read only.

Description Contains the generation number’s level number.

A.1.3.2.4 The file ‘system/protocol/level version


Version Introduced in version 4.10.0 of the Waves4 suite.

Type String

Permissions Read only.

Description Contains a version string specifying in which version of the Waves4 suite this level
number is introduced.

A.2 Buoyd
Buoyd has several communication interfaces, expanding the options of the general communication
interface. The extensions to the file system are available for the entire program. This is based on
the values in the configuration file. (See §4.3 for more information regarding the configuration.)

A.2.1 Program
The main program adds the commands are described in the following sections.

A.2.1.1 Application
The command to manipulate the application’s operation status.

Version Introduced in version 4.18.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:

86
restart Restarts the application. Changes to certain configuration fields require
the application to restart. This function allows to restart the application. (This
makes it possible to use the Waves4 configurator to restart the application
instead of using the system’s method to restart a background process.)
stop Stops the application.

Description The command to manipulate the applications operation status.

A.2.1.2 Configuration store


Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator mode.

Arguments This function takes no arguments.

Description Saves the configuration. This allows to store the configuration after it has been al-
tered.

A.2.1.3 Log domain


Version Introduced in version 4.18.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new log domain as described in §A.2.1.3.1.
remove Removes an existing log domain as described in §A.2.1.3.2.

Description The command is used to manipulate log domains of buoyd.

A.2.1.3.1 Create
The subcommand to create log domains in buoyd.

Version Introduced in version 4.18.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

Domain
• The field matches the ‘domain’ field as described in §4.3.1.1.
Severity
• The field matches the ‘severity’ field as described in §4.3.1.1.

Description The subcommand creates a log domain in buoyd. The change is applied directly, but
it does not take the order of setting log domains in account. This means the effective order
of the log domains may differ from the order after restarting the application.

87
A.2.1.3.2 Remove
The subcommand to remove log domains in buoyd.

Version Introduced in version 4.18.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

ID
• The name of the directory in ‘/configuration/log/domains’ to remove. The name
must be an exiting directory name in this directory.

Description The subcommand removes a log domain in buoyd. This does not change the current
log level of the domain. The change takes effect after restarting the application.

A.2.1.4 Receiver
Version Introduced in version 4.18.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This command takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Requests buoyd to create a new receiver as described in §A.2.1.4.1.
support matrix Requests buoyd for its support matrix as described in §A.2.1.4.2.

Description Allows the user to interact with the receiver settings of buoyd.

A.2.1.4.1 Create
Version Introduced in version 4.18.0 of the Waves4 suite.
The command to create receivers.

Availability

• Available in operator mode.

Arguments This function takes the following arguments:

ID
• A mandatory argument containing a string.
• Contains a unique name for the new receiver to create.
Port The transmission port as described in §4.3.2.
Buoy type
• A mandatory argument containing a string.
• Contains the type of buoy being received.
• This field together with ‘Receiver type’ and ‘File format’ must be a supported
combination. See the ‘Remarks’.
Receiver type

88
• A mandatory argument containing a string.
• Contains the type of receiver being used.
• This field together with ‘Buoy type’ and ‘File format’ must be a supported com-
bination. See the ‘Remarks’.
File format
• A mandatory argument containing a string.
• Contains the file format of the data being received.
• This field together with ‘Buoy type’ and ‘Receiver type’ must be a supported
combination. See the ‘Remarks’.

Description The command creates new receiver for the application.

Remarks The combination of ‘Buoy type’, ‘Receiver type’, and ‘File format’ must be a sup-
ported combination. The combination supported by buoyd can be obtained by running
‘buoyd --support-matrix’ from the console. Future versions of buoyd may add new
combinations to the list. (For backwards compatibility with older versions of buoyd there is
no intention to remove combinations from the list.)

A.2.1.4.2 Support matrix


Version Introduced in version 4.18.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes no arguments.

Description Retrieves information regarding the supported ‘Buoy type’, ‘Receiver type’, and
‘File format’ in this version of buoyd.

Returns The list with supported ‘Buoy type’, ‘Receiver type’, and ‘File format’ combinations.
Every combination is on a separate line and every line contains three fields separated with
tabs:

Buoy type The type of buoy.


Receiver type The receiver available for the buoy.
File format The file format available for the buoy receiver combination.

When a buoy can be received with multiple receivers there are multiple lines starting with the
type of the buoy. (The output resembles the output of the command ‘buoyd --support-matrix’.)

A.2.2 Receiver
All receivers have commands available, some are common for all receivers. These are described
in appendix A.2.2.1. The sections after that section describe the command specific for a certain
receiver type.

A.2.2.1 Common
This section describes all commands available for all receivers.

89
A.2.2.1.1 Configuration store
Version Introduced in version 4.12.0 of the Waves4 suite. For the SBD receiver the command
was introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator mode.

Arguments This function takes no arguments.

Description Saves the configuration. This allows to store the configuration after it has been al-
tered.

A.2.2.1.2 Notifications
Version Introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Status
• A mandatory argument containing a string containing ‘enable’ or ‘disable’.
• This indicates whether the notifications should be enabled or disabled.

Description Enables the notifications for the current connection. The notifications are unsolicited
messages send by the receiver. They contain status updates and received data. For configu-
ration the notifications are unwanted, for normal operation – receiving data – it is wanted.
This setting must be set per connection and is initially disabled. This allows the configurator
to connect and modify the settings. Waved needs to enable the notifications in order to
receive data.

A.2.2.1.3 Receiver
Version Introduced in version 4.12.0 of the Waves4 suite. For the SBD receiver the command
was introduced in version 4.10.0 of the Waves4 suite.

Availability Available in operator mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing ‘start’ or ‘stop’.
• This is the operation the receiver should take, starting or stopping the receiver.

Description This command starts or stops receiving data for the receiver. When a receiver has
been stopped it is possible to modify the configuration. After starting the receiver the mod-
ified settings take effect.
Note: The modified settings are not stored permanently. In order to do so use the ‘configu-
ration store’ command appendix A.2.1.2.

A.2.2.2 iBuoy
The iBuoy receiver has its own set of commands. The commands can be issued after connecting
with the receiver.
The commands are described in the following sections.

90
A.2.2.2.1 Campaign
The command to manipulate the campaigns of the receiver.

Version Introduced in version 4.14.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new campaign as described in §A.2.2.2.1.1.

Description The command is used to manipulate campaigns for the iBuoy receiver.

A.2.2.2.1.1 Create
The subcommand to create campaigns for the iBuoy receiver.

Version Introduced in version 4.14.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This sub function takes the following arguments:

Id
• A mandatory argument containing a string.
• Contains a unique name for the new campaign to create.
Buoy type
• A mandatory argument containing ‘DWR4’2 .
• Contains the name of the type of buoy being received. In the current version only
the DWR4 is supported, future releases of the Waves4 suite will support more
buoy types.
Buoy ID
• A mandatory argument containing a string.
• Contains the buoy ID given to the buoy. This ID must be unique.

Description The subcommand creates a new campaign with the default settings.
2
Future versions of the iBuoy receiver will support multiple buoy types, so this field is added for compatibility with
future versions of the software.

91
A.2.2.2.2 Task
The command to manipulate the tasks of the campaigns of the receiver. Tasks are created and
removed by the user. Buoyd will attempt to execute the task given and store its results. Once the
user has seen the result, he or she can then remove the task.

Version Introduced in version 4.14.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new task as described in §A.2.2.2.2.1.
remove Removes an existing task as described in §A.2.2.2.2.2.

Description The command is used to manipulate tasks of the campaigns for the iBuoy receiver.

A.2.2.2.2.1 Create
The subcommand to create tasks for the campaigns of the iBuoy receiver.

Version Introduced in version 4.14.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

Campaign ID
• A mandatory argument containing a string.
• Contains the ID of the campaign for which the task is created.
Action
• A mandatory string argument containing data to send to the buoy. The format of
the data is defined in [Dat16a].

Description The subcommand creates a task for a campaign.

A.2.2.2.2.2 Remove
The subcommand to remove tasks for the campaigns of the iBuoy receiver.

Version Introduced in version 4.14.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

Campaign ID
• A mandatory argument containing a string.
• Contains the ID of the campaign whose task will be removed.

92
Task ID
• A mandatory argument containing a string.
• Contains the ID of the task to remove.

Error codes

EBUSY While the task is being executed, it is not possible to remove the task.

Description The subcommand removes a task for a campaign.

A.2.2.3 MkIII iBuoy


The MkIII iBuoy receiver has its own set of commands. The commands can be issued after
connecting with the receiver.
The commands are described in the following sections.
A.2.2.3.1 Campaign
The command to manipulate the campaigns of the receiver.

Version Introduced in version 4.18.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new campaign as described in §A.2.2.3.1.1.

Description The command is used to manipulate campaigns for the iBuoy receiver.

A.2.2.3.1.1 Create
The subcommand to create campaigns for the MkIII iBuoy receiver.

Version Introduced in version 4.18.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This sub function takes the following arguments:

Id
• A mandatory argument containing a string.
• Contains a unique name for the new campaign to create.
Buoy type
• A mandatory argument containing the type of buoy being received. The following
types are allowed:
– DWR MkIII

93
– DWR-G
– WR-SG
Buoy ID
• A mandatory argument containing a string.
• Contains the buoy ID given to the buoy. This ID must be unique.
Description The subcommand creates a new campaign with the default settings.

A.2.2.3.2 Task
The command to manipulate the tasks of the campaigns of the receiver. Tasks are created and
removed by the user. Buoyd will attempt to execute the task given and store its results. Once the
user has seen the result, he or she can then remove the task.

Version Introduced in version 4.18.0 of the Waves4 suite.


Availability
• Available in operator mode.
Arguments This function takes the following arguments:
Operation
• A mandatory argument containing a string containing:
create Creates a new task as described in §A.2.2.3.2.1.
remove Removes an existing task as described in §A.2.2.3.2.2.
Description The command is used to manipulate tasks of the campaigns for the MkIII iBuoy
receiver.

A.2.2.3.2.1 Create
The subcommand to create tasks for the campaigns of the MkIII iBuoy receiver.

Version Introduced in version 4.18.0 of the Waves4 suite.


Availability
• Available in operator mode.
Arguments This sub function takes the following arguments:
Campaign ID
• A mandatory argument containing a string.
• Contains the ID of the campaign for which the task is created.
Action ID
• A mandatory argument containing a number.
• This is the id field of the section in the buoydrc file as described in §4.3.6.1.1.1.
Command
• A mandatory argument containing a string.
• This is the id field of the section in the buoydrc file as described in §4.3.6.1.1.1.
Value
• A mandatory argument containing a string.
• This is the id field of the section in the buoydrc file as described in §4.3.6.1.1.1.
Description The subcommand creates a task for a campaign.

94
A.2.2.3.2.2 Remove
The subcommand to remove tasks for the campaigns of the MkIII iBuoy receiver.

Version Introduced in version 4.18.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

Campaign ID
• A mandatory argument containing a string.
• Contains the ID of the campaign whose task will be removed.
Task ID
• A mandatory argument containing a string.
• Contains the ID of the task to remove.

Error codes

EBUSY While the task is being executed, it is not possible to remove the task.

Description The subcommand removes a task for a campaign.

A.2.2.4 SBD
The SBD receiver has its own set of commands. The commands can be issued after connecting
with the receiver.
The commands are described in the following sections.
A.2.2.4.1 Campaign
The command to manipulate the campaigns of the receiver.

Version Introduced in version 4.10.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new campaign as described in §A.2.2.4.1.1.
email Sends an e-mail to the buoy associated with the campaign. The function is
descibed in more detail in §A.2.2.4.1.2.

Description The command is used to manipulate campaigns for the SBD receiver.

95
A.2.2.4.1.1 Create
The subcommand to create campaigns for the SBD receiver.

Version Introduced in version 4.10.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This sub function takes the following arguments:

Id
• A mandatory argument containing a string.
• Contains a unique name for the new campaign to create.
Buoy type
• A mandatory argument containing ‘DWR4’3 .
• Contains the name of the type of buoy being received. In the current version only
the DWR4 is supported, future releases of the Waves4 suite will support more
buoy types.
IMEI
• A mandatory argument containing a string.
• Contains the IMEI number of the buoy’s modem. This number must be unique.

Description The subcommand creates a new campaign with the default settings for the messages.

A.2.2.4.1.2 E-mail
The subcommand to send e-mails to a buoy using the SBD communication option.

Version Introduced in version 4.10.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This sub function takes the following arguments:

Id
• A mandatory argument containing a string.
• Contains the name of an existing campaign.
Attachment
• A mandatory argument containing data.
• The field is the last field and may contain the tab character.
• Contains the data to send as attachment to the buoy. The contents of the data are
not part of this protocol.

Description The subcommand sends an e-mail to a buoy that uses the SBD communication op-
tion. The e-mails are used to configure the buoy or retrieve information regarding its con-
figuration.
3
Future versions of the SBD receiver will support multiple buoy types, so this field is added for compatibility with
future versions of the software.

96
A.2.2.5 MkIII SBD
The MkIII SBD receiver has its own set of commands. The commands can be issued after con-
necting with the receiver.
The commands are described in the following sections.
A.2.2.5.1 Campaign
The command to manipulate the campaigns of the receiver.

Version Introduced in version 5.0.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new campaign as described in §A.2.2.5.1.1.
email Sends an e-mail to the buoy associated with the campaign. The function is
descibed in more detail in §A.2.2.5.1.2.

Description The command is used to manipulate campaigns for the MkIII SBD receiver.

A.2.2.5.1.1 Create
The subcommand to create campaigns for the MkIII SBD receiver.

Version Introduced in version 5.0.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This sub function takes the following arguments:

Id
• A mandatory argument containing a string.
• Contains a unique name for the new campaign to create.
Buoy type
• A mandatory argument containing the type of buoy being received. The following
types are allowed:
– DWR MkIII
– DWR-G
– WR-SG
IMEI
• A mandatory argument containing a string.
• Contains the IMEI number of the buoy’s modem. This number must be unique.

Description The subcommand creates a new campaign with the default settings for the messages.

97
A.2.2.5.1.2 E-mail
The subcommand to send e-mails to a buoy using the MkIII SBD communication option.

Version Introduced in version 5.0.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This sub function takes the following arguments:

Id
• A mandatory argument containing a string.
• Contains the name of an existing campaign.
Attachment
• A mandatory argument containing data.
• The field is the last field and may contain the tab character.
• Contains the data to send as attachment to the buoy. The contents of the data are
not part of this protocol.

Description The subcommand sends an e-mail to a buoy that uses the MkIII SBD communication
option. The e-mails are used to configure the buoy or retrieve information regarding its
configuration.

A.2.2.6 MkIII SMS


The MkIII SMS receiver has its own set of commands. The commands can be issued after con-
necting with the receiver.
The commands are described in the following sections.
A.2.2.6.1 Campaign
The command to manipulate the campaigns of the receiver.

Version Introduced in version 5.0.0 of the Waves4 suite.

Availability

• Available in operator mode.


• Available when the receiver has been disabled.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new campaign as described in §A.2.2.6.1.1.
sms Sends a SMS message to the buoy associated with the campaign. The func-
tion is descibed in more detail in §A.2.2.6.1.2.

Description The command is used to manipulate campaigns for the MkIII SMS receiver.

98
A.2.2.6.1.1 Create
The subcommand to create campaigns for the MkIII SMS receiver.

Version Introduced in version 5.0.0 of the Waves4 suite.


Availability
• Available in operator mode.
• Available when the receiver has been disabled.
Arguments This sub function takes the following arguments:
Id
• A mandatory argument containing a string.
• Contains a unique name for the new campaign to create.
Buoy type
• A mandatory argument containing the type of buoy being received. The following
types are allowed:
– DWR MkIII
– DWR-G
– WR-SG
phone number
• A mandatory argument containing a string.
• The phone number of the SIM card in the buoy. The number must be in interna-
tional format. The number must be unique.
Description The subcommand creates a new campaign with the default settings for the buoy
configuration.

A.2.2.6.1.2 SMS
The subcommand to send SMS messages to a buoy using the MkIII SMS communication option.

Version Introduced in version 5.0.0 of the Waves4 suite.


Availability
• Available in operator mode.
• Available when the receiver has been disabled.
Arguments This sub function takes the following arguments:
Id
• A mandatory argument containing a string.
• Contains the name of an existing campaign.
Data
• A mandatory argument containing data.
• The field is the last field and may contain the tab character.
• Contains the data to send as body of the SMS message to the buoy. The contents
of the data are not part of this protocol.
Description The subcommand sends a SMS message to a buoy that uses the MkIII SMS commu-
nication option. The e-mails are used to configure the buoy or retrieve information regarding
its configuration.

99
A.2.2.6.2 Configuration store
This command has been introduced in version 4.10.0 of the Waves4 suite, starting with version
4.12.0 this command became available for all receivers. It is decribed in §A.2.2.1.1.

A.2.2.7 Receiver
This command has been introduced in version 4.10.0 of the Waves4 suite, starting with version
4.12.0 this command became available for all receivers. It is decribed in §A.2.2.1.3.

A.3 Waved
Waved has several communication interfaces, expanding the options of the general communication
interface. The extensions to the file system are available for the entire program. This is based on
the values in the configuration file. (See §4.4 for more information regarding the configuration.)

A.3.1 Program
The main program adds the commands are described in the following sections.

A.3.1.1 Application
The command to manipulate the application’s operation status.

Version Introduced in version 4.16.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
restart Restarts the application. Changes to certain configuration fields require
the application to restart. This function allows to restart the application. (This
makes it possible to use the Waves4 configurator to restart the application
instead of using the system’s method to restart a background process.)
stop Stops the application.

Description The command to manipulate the applications operation status.

A.3.1.2 Campaign create


The command to create campaigns.

Version Introduced in version 4.16.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This function takes the following arguments:

ID
• A mandatory argument containing a string.

100
• Contains a unique name for the new campaign to create.
Port The transmission port as described in §4.4.2.

Description The command creates new campaigns for the application.

A.3.1.3 Configuration store


Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator mode.

Arguments This function takes no arguments.

Description Saves the configuration. This allows to store the configuration after it has been al-
tered.

A.3.1.4 Log domain


Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing:
create Creates a new log domain as described in §A.3.1.4.1.
remove Removes an existing log domain as described in §A.3.1.4.2.

Description The command is used to manipulate log domains of waved.

A.3.1.4.1 Create
The subcommand to create log domains in waved.

Version Introduced in version 4.16.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

Domain
• The field matches the ‘domain’ field as described in §4.3.1.1.
Severity
• The field matches the ‘severity’ field as described in §4.3.1.1.

Description The subcommand creates a log domain in waved. The change is applied directly, but
it does not take the order of setting log domains in account. This means the effective order
of the log domains may differ from the order after restarting the application.

101
A.3.1.4.2 Remove
The subcommand to remove log domains in waved.

Version Introduced in version 4.16.0 of the Waves4 suite.

Availability

• Available in operator mode.

Arguments This sub function takes the following arguments:

ID
• The name of the directory in ‘/configuration/log/domains’ to remove. The name
must be an exiting directory name in this directory.

Description The subcommand removes a log domain in waved. This does not change the current
log level of the domain. The change takes effect after restarting the application.

A.3.2 Campaign
All campaign have commands available. Unlike buoyd’s receivers there is only one type of cam-
paign.

A.3.2.1 Configuration store


Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator mode.

Arguments This function takes no arguments.

Description Saves the configuration. This allows to store the configuration after it has been al-
tered.

A.3.2.2 Cache
Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This command takes the following arguments:

Operation
• A mandatory argument containing a string containing:
version Requests the cache’s format version number as described in §A.3.2.2.1
synchronise Requests the cache to synchronise its data with the file system as
described in §A.3.2.2.2

Description Allows the user to interact with the cached data of the campaign.

102
A.3.2.2.1 Version
The subcommand to request the version number of the cache format of a campaign in waved. Note
the format is the same for all campaigns.

Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This command takes no arguments.

Returns The version number of the cache format.

A.3.2.2.2 Synchronise
The subcommand to request the cache of waved to synchronise its data with the file system. The
current implementation of the cache needs to close files and close the open XML groups. This
command makes sure that process happens and the latest files are linked to the internal FS tree.

Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This command takes the no arguments.

Error codes

EBUSY When another process is already busy writing the cache. The error should be rare.
It is possible to attempt another synchronisation request. Preferably after a short delay.

Remarks The synchronising the of the cache is required for cache format 1. It has not been
determined whether or not it will be required for newer versions of the cache format.

A.3.2.3 Campaign
Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator mode.

Arguments This function takes the following arguments:

Operation
• A mandatory argument containing a string containing ‘start’ or ‘stop’.
• This is the operation the campaign should take, starting or stopping the campaign.

Description This command starts or stops receiving data for the campaign. When a campaign
has been stopped it is possible to modify its configuration. After starting the campaign the
modified settings take effect.
Note: The modified settings are not stored permanently. In order to do so use the ‘configu-
ration store’ command appendix A.3.2.1

103
A.3.2.4 Notifications
Version Introduced in version 4.16.0 of the Waves4 suite.

Availability Available in operator and guest mode.

Arguments This function takes the following arguments:

Status
• A mandatory argument containing a string containing ‘enable’ or ‘disable’.
• This indicates whether the notifications should be enabled or disabled.

Description Enables the notifications for the current connection. The notifications are unsolicited
messages send by the campaign. They contain status updates and received data. For config-
uration the notifications are unwanted, for normal operation – receiving data – it is wanted.
This setting must be set per connection and is initially disabled. This allows the configurator
to connect and modify the settings. The Waves4 program needs to enable the notifications
in order to receive data.

104
B Release notes
This chapter describes the caveats when upgrading to a newer version of the Waves4 suite. When
a version isn’t listed here it means no special care needs to be taken when upgrading to the newer
version.

B.1 Version 5.4.0


• The configuration file of buoyd prior to version 10 are no longer supported.

• The configuration file of waved prior to version 4 are no longer supported.

• The configuration file of the Waves4 program prior to version 8 are no longer supported.
The configuration file of the Waves4 program has been changed. Old files are compatible
with the newer version. After manually upgrading to the newer file format the configuration
can no longer be used with older versions of the Waves4 program.

B.2 5.2.0
• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.

• The configuration file of the Waves4 program has been changed. Old files are compatible
with the newer version. After manually upgrading to the newer file format the configuration
can no longer be used with older versions of the Waves4 program.

B.3 5.0.0
• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.
The version of the buoyd configuration file is version 10. Starting with version 5.4.0 of the
Waves4 suite files prior to version 8 will no longer be supported.
The names of the files logged by buoyd have been changed to a different format. This also
makes the field use verbose filename field in buoydrc obsolete.

• The version of the waved configuration file is version 4. Starting with version 5.4.0 of the
Waves4 suite files prior to version 4 will no longer be supported.
The names of the files logged by waved have been changed to a different format. This also
makes the field use verbose filename field in wavedrc obsolete.

• The configuration file of the Waves4 program has been changed. Old files are compatible
with the newer version. After manually upgrading to the newer file format the configuration
can no longer be used with older versions of the Waves4 program.
The version of the Waves4 program configuration file is version 8. Starting with version
5.4.0 of the Waves4 suite files prior to version 8 will no longer be supported.

105
B.4 4.18.0
• The behaviour of an empty storage root field in buoydrc has changed. The new behaviour
has been described in §4.3.
• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.
• The configuration file of the Waves4 program has been changed. Old files are compatible
with the newer version. After manually upgrading to the newer file format the configuration
can no longer be used with older versions of the Waves4 program.

B.5 4.16.0
• The configuration file of waved has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of waved.
• The wire communication protocol (appendix A) has been changed. The new protocol is
not compatible with the previous version of the protocol. This means all application in the
Waves4 suite need to be upgraded to the same version in order to operate properly.
Since the Waves4 configurator can do the same as bat (and more), there will be no new
version of bat.
• The behaviour of an empty storage root field in wavedrc has changed. The new behaviour
has been described in §4.4.
• The default location of buoydrc and wavedrc has been changed on Windows. The new
location is described in chapter 4.
• The behaviour of the use verbose filename field in wavedrc has changed. The new be-
haviour has been described in §4.4.2.
• The field hostname in the waved section of waves4rc (§4.5.1) is no longer used.
• The section campaign of waves4rc (§4.5) is no longer used.

B.6 4.14.0
• The Power consumption widget in the Waves4 program’s delta energy signals now show the
real average instead of the delta between two measurements. This has been changed since
the delta only works properly when the time between two measurements is identical. If, for
example, there is a one hour gap in the data stream the delta would be higher than expected
even if the power consumption was the same over the entire period.

B.7 4.12.0
• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.
• Buoyd’s communication interface has been modified to support the Argos receiver. These
changes are not compatible with older versions of waved and the Waves4 configurator.
These programs need to be upgraded to the same version of buoyd in order to operate prop-
erly.

106
B.8 4.10.0
• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.

• Buoyd’s communication interface has been modified so its configuration can be modified by
the Waves4 configurator. These changes are not compatible with older versions of waved
and bat. These programs need to be upgraded to the same version of buoyd in order to
operate properly.

B.9 4.8.0
• The configuration file of the Waves4 program has been changed. Older files are automati-
cally upgraded to the new version. After upgrading the files can no longer be used in older
versions of the Waves4 program.

• The dialogue of the operational monitoring widget requires a monitor resolution of at least
1024 × 768.

B.10 4.6.0
• The configuration file of the Waves4 program has been changed. Older files are automati-
cally upgraded to the new version. After upgrading the files can no longer be used in older
versions of the Waves4 program.

• The format of waved’s cache has been modified. When upgrading the contents of the old
cache are ignored. This means when starting Waves4 program after the upgrade is will not
receive history from waved.

• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.

• The configuration file of waved has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of waved.

B.11 4.4.0
• It is now possible to generate CSV files in waved. In order to do so the configuration needs
to be updated.

B.12 4.2.0
• Starting with this version the usage of the Waves4 program is protected by a licence key.
Existing customers of the program should have received a licence key from our sales de-
partment, if not please contact our sales department. The programs waved and buoyd will
still function without a software licence, both now and in the future.

• The configuration file of the Waves4 program has been changed. Older files are automati-
cally upgraded to the new version. After upgrading the files can no longer be used in older
versions of the Waves4 program.

107
• The configuration file of buoyd has been changed. Old files are compatible with the newer
version. After manually upgrading to the newer file format the configuration can no longer
be used with older versions of buoyd.

B.13 4.0.0
All configuration files have been changed again and the old versions can no longer be used.

B.14 4.0.0-beta4
The fileformat of the configuration file of buoyd has been changed. The old configuration can’t be
used for the rxc class receivers.

B.15 4.0.0-beta2
The fileformat of the configuration file of buoyd has been changed. The old format can still be
used but some constructs have been deprecated.
The fileformat of the configuration file of waved has been changed. The old format can still
be used but some constructs have been deprecated.

108
C Changelog
This chapter lists all changes since the initial version of the Waves4 suite starting with the latest.

C.1 Version 5.4.0


General

- Support for Debian Jessie has been removed.


- Support for Ubuntu Trusty Tahr has been removed.

C.2 Version 5.2.0


General

- Support for Ubuntu Bionic Beaver has been added.

The Waves4 program

• The list widgets and the report widget are now able to export their contents to a CSV
file.
• It is now possible to open a file and convert to CSV.
• When opening a file a default set of widgets is shown, depending on the type of file
loaded.

C.3 Version 5.0.0


General

- Support for the MkIII SBD receiver has been added.


- Support for Ubuntu Precise Pangolin has been removed.
- Support for Debian Stretch has been added.
- Support for Windows Vista has been removed.
- The looks of some widgets on Windows have changed.

The Waves4 program

• It is now possible to configure the displayed units for the trend widgets. They are
configured in the settings dialogue (the User Manual §3.1.1).
• The Spectrum (2D) widget has been improved: it now allows to configure the dis-
played signals.
• The Displacements widget has been improved: it now allows to configure the dis-
played signals.

C.4 Version 4.18.0


General

- Support for the MkIII iBuoy receiver has been added.

109
Buoyd

- When the application runs in the foreground the log output is also written to the log
files instead of only to the console.

Waved

- When the application runs in the foreground the log output is also written to the log
files instead of only to the console.

The Waves4 program

- Added a Sea surface temperature parameter list widget.


- Added a wave height quantiles packet widget, this data will be transmitted by a new
firmware version of the DWR4.
- Added a wave height parameter trend widget, this data will be transmitted by a new
firmware version of the DWR4.

Waves4 configurator

- This program can now configure all aspects of buoyd and waved. Thus it is no longer
required to directly edit the configuration files.

C.5 Version 4.16.0


General

- Support for Debian Squeeze has been removed.


- Support for Ubuntu Xenial Xerus has been added.
- Support for Windows 8 has been added.
- Support for Windows 10 has been added.

The Waves4 program

- The GPS position widget has been improved: it shows more positions and can be
zoomed. For the details look at the User Manual §2.2.4.

C.6 Version 4.14.0


General

- Support for Debian Jessie i386 and Debian Jessie AMD64 has been added.

Buoyd

- Fixed a bug, where buoyd was not able to connect to Gmail on the Windows platform.
- Fixed a bug, where buoyd was not able to properly receive all SBD e-mail messages.
- Fixed an issues, where buoyd was not able properly connect to a SMTP server depend-
ing on the hostname of the system buoyd was running on.

Waved

- Fixed a bug, where waved was not able to receive multiple campaigns from an Argos
or SBD receiver.
- Fixed a bug, causing waved not to start on some systems.

110
C.7 Version 4.12.0
General

- Support for Ubuntu Precise Pangolin i386 and Ubuntu Precise Pangolin AMD64 has
been added.
- Support for Ubuntu Trusty Tahr i386 and Ubuntu Trusty Tahr AMD64 has been added.
- Support for Argos has been added.

Waved

- Fixed the displacement format for the CSV output of the MkIII buoys.
- Fixed a bug in the recalculation of the wave statistics. New samples were not correctly
added, causing old samples to be used.
- Fixed a bug in the recalculation of the spectral statistics. New spectra were not cor-
rectly added, causing old spectra to be used.
- Fixed a bug in the recalculation of the spectral statistics when invalid samples were
added. The tracking of invalid samples did not work correctly.
- Fixed the values of the filter delays for the wave statistics.

C.8 Version 4.10.0


General

- Support for Windows XP has been removed.

- Support for Debian Squeeze has been removed.

- Support for SBD has been added.

- An initial version of the Waves4 configurator program has been added.

Buoyd

- The logging for the program itself in now done in log files in the storage directory
when buoyd runs as a background process.

Waved

- The CSV files generated for the MkIII buoys now use the ‘3’ prefix instead of the ‘F’
prefix.

C.9 Version 4.8.0


Waved

- Added support to use the received displacements to recalculate the spectrum, spec-
tral parameters and the upcross statistics. (These values are used in the operational
monitoring widget in the Waves4 program.

The Waves4 program

- Implemented the operational monitoring widget. Usage of the widget requires a li-
cence for the operational module.

111
C.10 Version 4.6.0
General Support for Debian Wheezy i386 and Debian Wheezy AMD64 has been added.

Buoyd

- The RX-D receiver support has been implemented.


- Fixed a crash when trying to open an invalid serial port.

Waved

- The HXV file format has been implemented for the RX-C.
- When the automatic network scan for buoyd fails waved tries to connect to buoyd on
the local host.

The Waves4 program

- Added a new spectral statistics widget.


- Fixed the excessive generation of gaps in the GPS speed in the ACM trend widget.
- When the automatic network scan for waved fails Waves4 tries to connect to waved on
the local host.
- Properly add the Waves4 program to the menu of GNOME.

C.11 Version 4.4.0


Documentation

- Minor improvements to the Operator Manual.

Waved

- Added CSV logging support.

C.12 Version 4.2.0


Buoyd

- The file based receiver has been implemented.

Documentation

- Added a User Manual.

The Waves4 program

- Improved the user interface dialogues.


- The settings of the sheets are now properly saved and restored.
- Fixed a bug which caused bad heave displacements not to be marked.
- Fixed a bug causing the created SVG images to be empty.
- Added support to save PNG images.
- Fixed a bug causing SVG images to not be saved.

112
- When the Waves4 program connects to buoyd and waved has a lot of cached data for
the selected campaign, the Waves4 program did not respond to user actions until all
cached data was processed. This has been fixed, the program remains responsive while
processing the cached data.
- A new power consumption widget has been added.
- Several widgets have extra settings, allowing to select the signals to be shown in the
widget.

C.13 Version 4.0.0


All programmes, including their configuration files, have been rewritten for this release. This
version marks the first official release.

C.14 Version 4.0.0-beta4


Not much changes, mainly switch to the newer libdatawell version.

C.15 Version 4.0.0-beta3


The Waves4 program

- Fix a crash upon starting the Waves4 program.

C.16 Version 4.0.0-beta2


Buoyd

- Modified the config file format.


- Added support for the upcomming DWR-G IV.

Documentation

- Updated the Operator Manual.


- Updated the User Manual.
- Made a documentation package.

C.17 Initial version 4.0.0-beta1

113
Bibliography
[Dat13a] Datawell. Datawell Waverider Transmission Protocol Specifications, 3.1.0 edition, 4
2013.

[Dat13b] Datawell. Linux Installation Guide, 9 2013.

[Dat15] Datawell. Datawell Waverider Manual DWR4, 6 2015.

[Dat16a] Datawell. Datawell Specifications Mk4 iBuoy, 1.0.0 edition, 1 2016.

[Dat16b] Datawell. Datawell Waverider Reference Manual DWR-MkIII DWR-G WR-SG, septem-
ber 1, 2016 edition, 9 2016.

114
Glossary
4-series The family name of all 4-series buoy types. The the moment only the DWR4 is available.

4FSK 4 Frequency Shifting Key.


The HF modulation system used by the HF transmitter and RX-C receiver to receive data
from the 4-series buoys. There are two formats defined for the data transmitted over the
link:

4FSK-A Transmits 3 bytes of packet data and 9 bytes of real-time data.


4FSK-B Transmits 6 bytes of packet data and 5 bytes of real-time data.

4FSK-A 4FSK

4FSK-B 4FSK

ACM Acoustic Current Meter


Acoustic Current Meter

Acoustic Current Meter The Acoustic Current Meter is an option in the DWR4
buoys. When this option is installed the buoy measures the speed and direction of the water
current at the water surface.

Argos An e-mail service using the Argos satellite system.

Argos ID A unique identifier for the Argos unit. Argos uses both 20-bit and 28-bit IDs. The
Waves4 suite supports both IDs.
Note Argos used both decimal and hexadecimal IDs. The decimal ID’s value is not equal to
the hexadecimal ID’s decimal representation. Datawell used the decimal ID in the Waves4
suite.

bat A helper program to find instances of waved on the network. This program has been re-
moved from the Waves4 suite in version 4.16.0. The Waves4 configurator can give the same
information and more.

broadcast A broadcast is a way to transmit a message to multiple computers on the local network.
This is used in the Waves4 suite to find other instances of buoyd and waved on the local
network. The broadcast can only be send over UDP, not over TCP.

buoyd The data acquisition program of the Waves4 suite. The program acquires data from the
RX-C receiver and logs it into HXV files for the MkIII buoys and in HVA files for the
4-series buoys. The program also allows other programs to connect to is and receive a copy
of the acquired data.

BVA Binairy Vector A1 .


The data format of the 4-series buoys stored on the internal logger. The format is quite
similar to the HVA format. The data in the buoy is stored in binary format to save space
on the logger card. The data from the RX-C receiver is ASCII so it can be watched with a
program like telnet. Also an ASCII file is easier to read by a person. The format is described
in [Dat13a].
1
The letter ‘A’ comes from 4FSK-A

115
campaign A campaign or measurement campaign is the measure campaign at a specific location.
When a campaign lasts for several years the measurement might be done by different buoys.
Therefore the data is labelled to campaign and not a specific buoy or receiver.

CSV comma-separated values


A record based file format where every field is separated by a ‘comma’ and every line is
a record. The ‘comma’ separator is not always a comma, often a semi-colon or a tabular
character is used instead.

DWR-G Directional Waverider GPS.


This buoy can measure both the heave displacement and the direction of the waves. Unlike
the DWR MkIII and the WR-SG it uses a GPS module to determine displacements. The
buoy has a diameter of 0.9 m.

DWR4 The 4-series version of the DWR MkIII.

DWR MkIII Directional Waverider Mark III.


This buoy can measure both the heave displacement and the direction of the waves. It uses
a stabilised platform sensor to determine the displacements. The buoy has a diameter of
0.9 m.

DWTP Datawell Waverider Transmission Protocol


The transmission protocol, as specified in [Dat13a], used in the 4-series buoys. The data in
the protocol is stored as HVA and BVA data.

EEPROM Electrically Erasable Programmable Read-Only Memory


A chip containing non-volatile memory. This is used in the buoy to store the buoy’s settings.
The settings will be saved, even if the buoy’s batteries are removed.

GPS-DWR4 The 4-series version of the DWR-G.

HVA Hexadecimal Vector A2 .


The data format of the 4-series buoys stored by a RX-C receiver. The format is described in
[Dat13a].

HXV Hexadecimal Vector


The data format of the MkIII buoy stored by a RX-C receiver. [Dat16b, §5.7 Data format]
describes the format in more detail.

iBuoy A communication service for the Datawell buoys using an Internet connection

IMEI International Mobile Station Equipment Identity


An identifier to identify mobile communication equipment, like mobile phones and SBD
modems.

Iridium A satellite system allowing bidirectional communication.

MkIII DWR MkIII

NaN Not a Number.


A numeric value indicating that the value is invalid. This of often used in computers when
a calulation results in an invalid value, for example 1.0 ÷ 0.0 results in a NaN.
2
The letter ‘A’ comes from 4FSK-A

116
network order Network order is also known as big-endian. It describes how values are transmit-
ted over a network.

PNG Portable Network Graphics


A raster based image format. This image format uses lossless compression and supports
transparency. This format is supported by more tools than the SVG format. Use it to save
plots when portability is required.

POP3 Post Office Protocol version 3


The communication protocol used to receive e-mails from the server of your Internet service
provider into your local e-mail program.

rfBuoy A data acquisition program used by W@ves21 and SeaSaw21.

RX-C A receiver that collects data from a MkIII buoy and sends it to a computer. The early
versions use the serial port to connect to a computer. Later models have an Ethernet port as
well. Even newer models can be used to receive data from a 4-series buoy.

RX-C receiver RX-C

RX-D A receiver that collects data from a MkIII buoy, using a serial port, and sends the data to a
computer.

SBD Iridium Short Burst Data


An e-mail service using Iridium.

SeaSaw21 A program used to show data received from Datawell buoys. This program shows the
operational information of MkIII and older buoys.

signal In the DWR4 the data is sent in packets, every packet contains one or more measurements.
Most packets contain related data, for example spectral parameters. This data can be shown
in a widget, where every measurement is called a signal. The widget can then show the trend
of this signal over a certain period. But it is also possible to see multiple related signals in
one widget, giving a better overview of the sea-state over a period of time.

SMTP Simple Mail Transfer Protocol


The communication protocol used to send e-mails from your local e-mail program to the
server of your Internet service provider.

SVG Scalable Vector Graphics


A vector based image format. A vector based format can be scaled without loss of qual-
ity. This is the preferred image format to save plots, however not all tools can handle this
format.

TCP Transmission Control Protocol


TCP is a network protocol, used to send data between machines using a network. This
network protocol is more advanded as UDP and gives more protection against data-loss
during transmission. All communication in the Waves4 suite, except the broadcast message
uses this protocol.

telnet Telnet is a text-based communication protocol. The programs in the Waves4 suite uses this
protocol to communicate with each other.
Telnet is also the name of a program – available on both Linux and Windows – which allows
the users to use the telnet protocol. It is mainly interesting for debugging purposes.
Starting with version 4.10.0 the telnet interface is replaced with a new network protocol.

117
UDP User Datagram Protocol
UDP is a network protocol, used to send data between machines using a network. This
network protocol is simpler as TCP but lacks error detection and handling. Its main usage
in the Waves4 suite is to broadcast.

W@ves21 A program used to show data received from Datawell buoys. This program shows the
scientific information of MkIII and older buoys.

waved The data processing and distribution program of the Waves4 suite. The program connects
to one or more buoyd programs and gathers all data and make it available for the Waves4
program.

Waves4 Both the name of the Waves4 suite and the Waves4 program.

Waves4 configurator The program is introduced in version 4.10.0 of the Waves4 suite and is
used to configure buoyd and waved.

Waves4 program The program is able to show the data received from a buoy on a computer
system.

Waves4 suite The Waves4 suite is a software suite containing several programs, including buoyd,
waved and the Waves4 program.

widget A widget is a user interface element. It shows information to the user, for example the
current height of the heave or the latest spectrum.

WR-SG Waverider Second Generation.


Successor of the WR/fl, the waverider buoy. The buoy measures the heave displacement but
no directions. It uses a stabilised platform sensor to determine the displacements. The buoy
has a diameter of 0.9 m.

WR4 The 4-series version of the WR-SG.

XML Extensible Markup Language


A format which is easy to parse for computers.

118
D Libraries used
This chapter describes the external libraries used in the suite. The Windows installer ships the
libraries. Most of the libraries are licensed under the LGPL. In order to comply with the license
we will ship the source code of the libraries upon request. Alternatively you can also download
the sources from the websites of the manufacturers of the libraries.
The list below lists the software used and its license and official website, the sections below
list the licenses of the software.

• atk, GNU Library General Public License, version 2.0

• atkmm, GNU Lesser General Public License, version 2.1

• boost, Boost Software License - Version 1.0

• bzip2, Bzip License

• cairo, GNU Lesser General Public License, version 2.1

• cairomm, GNU Library General Public License, version 2.0

• cURL, Curl License

• D-Bus, D-Bus license

• expat, MIT license

• fontconfig, Fontconfig License

• freetype, Freetype License

• gcc runtime, GCC runtime license

• GDK pixbuf, GNU Library General Public License, version 2.0

• gettext runtime libraries, GNU Lesser General Public License, version 2.1

• glib, GNU Library General Public License, version 2.0

• glibmm, GNU Lesser General Public License, version 2.1

• GMP, GNU Lesser General Public License, version 3

• GnuTLS, GNU Lesser General Public License, version 2.1

• gtk, GNU Library General Public License, version 2.0

• gtkmm, GNU Lesser General Public License, version 2.1

• jpeg, Jpeg License

• HarfBuzz, MIT license

• libffi, FFI License

• libgcrypt, GNU Lesser General Public License, version 2.1

• libgpg-error, GNU Lesser General Public License, version 2.1

119
• JasPer, JasPer license

• libiconv, GNU Library General Public License, version 2.0

• Libidn, GNU Lesser General Public License, version 3

• libpng, Libpng license

• libsigc++, GNU Lesser General Public License, version 2.1

• libssh2, Libssh2 license

• libxml2, MIT license

• libxml++, GNU Lesser General Public License, version 2.1

• LZMA, Public domain

• MinGW regex, GNU Lesser General Public License, version 2.1

• mingw-w64, Mingw-w64 license

• Nettle, GNU Lesser General Public License, version 3

• OpenSSL, OpenSSL license

• pango, GNU Library General Public License, version 2.0

• pangomm, GNU Lesser General Public License, version 2.1

• pcre, Pcre license

• pixman, Pixman license

• plmap, GNU Library General Public License, version 2.0

• plplot, GNU Library General Public License, version 2.0

• tiff, Tiff license

• XZ, Public domain

• zlib, Zlib license

• gimp-vchain-broken.svg, by Jakub Steiner, license:


https://creativecommons.org/licenses/by-sa/2.0/

• ne 50m admin 0 countries lakes.sh[px], by Natural Earth, license:


http://www.naturalearthdata.com/about/terms-of-use/

D.1 Boost Software License - Version 1.0


Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization


obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,

120
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

D.2 Bzip License


--------------------------------------------------------------------------

This program, "bzip2", the associated library "libbzip2", and all


documentation, are copyright (C) 1996-2007 Julian R Seward. All
rights reserved.

Redistribution and use in source and binary forms, with or without


modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright


notice, this list of conditions and the following disclaimer.

2. The origin of this software must not be misrepresented; you must


not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.

3. Altered source versions must be plainly marked as such, and must


not be misrepresented as being the original software.

4. The name of the author may not be used to endorse or promote


products derived from this software without specific prior written
permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ‘‘AS IS’’ AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Julian Seward, [email protected]


bzip2/libbzip2 version 1.0.5 of 10 December 2007

--------------------------------------------------------------------------

D.3 Curl License


COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1996 - 2014, Daniel Stenberg, <[email protected]>.

All rights reserved.

Permission to use, copy, modify, and distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright
notice and this permission notice appear in all copies.

121
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of a copyright holder shall not
be used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization of the copyright holder.

D.4 D-Bus license


D-Bus is licensed to you under your choice of the Academic Free
License version 2.1, or the GNU General Public License version 2
(or, at your option any later version).

Both licenses are included here. Some of the standalone binaries are
under the GPL only; in particular, but not limited to,
tools/dbus-cleanup-sockets.c and test/decode-gcov.c. Each source code
file is marked with the proper copyright information - if you find a
file that isn’t marked please bring it to our attention.

The Academic Free License


v. 2.1

This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (

Licensed under the Academic Free License version 2.1

1) Grant of Copyright License. Licensor hereby grants You a


world-wide, royalty-free, non-exclusive, perpetual, sublicenseable
license to do the following:

a) to reproduce the Original Work in copies;

b) to prepare derivative works ("Derivative Works") based upon the Original Work;

c) to distribute copies of the Original Work and Derivative Works to the public;

d) to perform the Original Work publicly; and

e) to display the Original Work publicly.

2) Grant of Patent License. Licensor hereby grants You a world-wide,


royalty-free, non-exclusive, perpetual, sublicenseable license, under
patent claims owned or controlled by the Licensor that are embodied in
the Original Work as furnished by the Licensor, to make, use, sell and
offer for sale the Original Work and Derivative Works.

3) Grant of Source Code License. The term "Source Code" means the
preferred form of the Original Work for making modifications to it and
all available documentation describing how to modify the Original
Work. Licensor hereby agrees to provide a machine-readable copy of the
Source Code of the Original Work along with each copy of the Original
Work that Licensor distributes. Licensor reserves the right to satisfy
this obligation by placing a machine-readable copy of the Source Code
in an information repository reasonably calculated to permit
inexpensive and convenient access by You for as long as Licensor
continues to distribute the Original Work, and by publishing the
address of that information repository in a notice immediately
following the copyright notice that applies to the Original Work.

4) Exclusions From License Grant. Neither the names of Licensor, nor


the names of any contributors to the Original Work, nor any of their
trademarks or service marks, may be used to endorse or promote
products derived from this Original Work without express prior written
permission of the Licensor. Nothing in this License shall be deemed to
grant any rights to trademarks, copyrights, patents, trade secrets or
any other intellectual property of Licensor except as expressly stated
herein. No patent license is granted to make, use, sell or offer to

122
sell embodiments of any patent claims other than the licensed claims
defined in Section 2. No right is granted to the trademarks of
Licensor even if such marks are included in the Original Work. Nothing
in this License shall be interpreted to prohibit Licensor from
licensing under different terms from this License any Original Work
that Licensor otherwise would have a right to license.

5) This section intentionally omitted.

6) Attribution Rights. You must retain, in the Source Code of any


Derivative Works that You create, all copyright, patent or trademark
notices from the Source Code of the Original Work, as well as any
notices of licensing and any descriptive text identified therein as an
"Attribution Notice." You must cause the Source Code for any
Derivative Works that You create to carry a prominent Attribution
Notice reasonably calculated to inform recipients that You have
modified the Original Work.

7) Warranty of Provenance and Disclaimer of Warranty. Licensor


warrants that the copyright in and to the Original Work and the patent
rights granted herein by Licensor are owned by the Licensor or are
sublicensed to You under the terms of this License with the permission
of the contributor(s) of those copyrights and patent rights. Except as
expressly stated in the immediately proceeding sentence, the Original
Work is provided under this License on an "AS IS" BASIS and WITHOUT
WARRANTY, either express or implied, including, without limitation,
the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL
WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential
part of this License. No license to Original Work is granted hereunder
except under this disclaimer.

8) Limitation of Liability. Under no circumstances and under no legal


theory, whether in tort (including negligence), contract, or
otherwise, shall the Licensor be liable to any person for any direct,
indirect, special, incidental, or consequential damages of any
character arising as a result of this License or the use of the
Original Work including, without limitation, damages for loss of
goodwill, work stoppage, computer failure or malfunction, or any and
all other commercial damages or losses. This limitation of liability
shall not apply to liability for death or personal injury resulting
from Licensor’s negligence to the extent applicable law prohibits such
limitation. Some jurisdictions do not allow the exclusion or
limitation of incidental or consequential damages, so this exclusion
and limitation may not apply to You.

9) Acceptance and Termination. If You distribute copies of the


Original Work or a Derivative Work, You must make a reasonable effort
under the circumstances to obtain the express assent of recipients to
the terms of this License. Nothing else but this License (or another
written agreement between Licensor and You) grants You permission to
create Derivative Works based upon the Original Work or to exercise
any of the rights granted in Section 1 herein, and any attempt to do
so except under the terms of this License (or another written
agreement between Licensor and You) is expressly prohibited by
U.S. copyright law, the equivalent laws of other countries, and by
international treaty. Therefore, by exercising any of the rights
granted to You in Section 1 herein, You indicate Your acceptance of
this License and all of its terms and conditions.

10) Termination for Patent Action. This License shall terminate


automatically and You may no longer exercise any of the rights granted
to You by this License as of the date You commence an action,
including a cross-claim or counterclaim, against Licensor or any
licensee alleging that the Original Work infringes a patent. This
termination provision shall not apply for an action alleging patent
infringement by combinations of the Original Work with other software
or hardware.

11) Jurisdiction, Venue and Governing Law. Any action or suit relating
to this License may be brought only in the courts of a jurisdiction
wherein the Licensor resides or in which Licensor conducts its primary
business, and under the laws of that jurisdiction excluding its

123
conflict-of-law provisions. The application of the United Nations
Convention on Contracts for the International Sale of Goods is
expressly excluded. Any use of the Original Work outside the scope of
this License or after its termination shall be subject to the
A§ 101
requirements and penalties of the U.S. Copyright Act, 17 U.S.C. ^
et seq., the equivalent laws of other countries, and international
treaty. This section shall survive the termination of this License.

12) Attorneys Fees. In any action to enforce the terms of this License
or seeking damages relating thereto, the prevailing party shall be
entitled to recover its costs and expenses, including, without
limitation, reasonable attorneys’ fees and costs incurred in
connection with such action, including any appeal of such action. This
section shall survive the termination of this License.

13) Miscellaneous. This License represents the complete agreement


concerning the subject matter hereof. If any provision of this License
is held to be unenforceable, such provision shall be reformed only to
the extent necessary to make it enforceable.

14) Definition of "You" in This License. "You" throughout this


License, whether in upper or lower case, means an individual or a
legal entity exercising rights under, and complying with all of the
terms of, this License. For legal entities, "You" includes any entity
that controls, is controlled by, or is under common control with
you. For purposes of this definition, "control" means (i) the power,
direct or indirect, to cause the direction or management of such
entity, whether by contract or otherwise, or (ii) ownership of fifty
percent (50%) or more of the outstanding shares, or (iii) beneficial
ownership of such entity.

15) Right to Use. You may use the Original Work in all ways not
otherwise restricted or conditioned by this License or by law, and
Licensor promises not to interfere with or be responsible for such
uses by You.

This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights


reserved. Permission is hereby granted to copy and distribute this
license without modification. This license may not be modified without
the express written permission of its copyright owner.

--
END OF ACADEMIC FREE LICENSE. The following is intended to describe the essential
differences between the Academic Free License (AFL) version 1.0 and other
open source licenses:

The Academic Free License is similar to the BSD, MIT, UoI/NCSA and Apache
licenses in many respects but it is intended to solve a few problems with
those licenses.

* The AFL is written so as to make it clear what software is being


licensed (by the inclusion of a statement following the copyright notice
in the software). This way, the license functions better than a template
license. The BSD, MIT and UoI/NCSA licenses apply to unidentified software.

* The AFL contains a complete copyright grant to the software. The BSD
and Apache licenses are vague and incomplete in that respect.

* The AFL contains a complete patent grant to the software. The BSD, MIT,
UoI/NCSA and Apache licenses rely on an implied patent license and contain
no explicit patent grant.

* The AFL makes it clear that no trademark rights are granted to the
licensor’s trademarks. The Apache license contains such a provision, but the
BSD, MIT and UoI/NCSA licenses do not.

* The AFL includes the warranty by the licensor that it either owns the
copyright or that it is distributing the software under a license. None of
the other licenses contain that warranty. All other warranties are disclaimed,
as is the case for the other licenses.

* The AFL is itself copyrighted (with the right granted to copy and distribute

124
without modification). This ensures that the owner of the copyright to the
license will control changes. The Apache license contains a copyright notice,
but the BSD, MIT and UoI/NCSA licenses do not.
--
START OF GNU GENERAL PUBLIC LICENSE
--

GNU GENERAL PUBLIC LICENSE


Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.


51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Everyone is permitted to copy and distribute verbatim copies


of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation’s software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not


price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid


anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether


gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author’s protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors’ reputations.

Finally, any free program is threatened constantly by software


patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone’s free use or not licensed at all.

The precise terms and conditions for copying, distribution and


modification follow.

GNU GENERAL PUBLIC LICENSE


TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains


a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"

125
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not


covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program’s


source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices


stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

c) If the modified program normally reads commands interactively


when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If


identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest


your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program


with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable

126
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three


years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer


to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering


access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program


except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients’ exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

7. If, as a consequence of a court judgment or allegation of patent


infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under


any particular circumstance, the balance of the section is intended to

127
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any


patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to


be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in


certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the Program


specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY


FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING


WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest

128
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest


to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program’s name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This program is free software; you can redistribute it and/or modify


it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,


but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this


when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author


Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than ‘show w’ and ‘show c’; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program


‘Gnomovision’ (which makes passes at compilers) written by James Hacker.

<signature of Ty Coon>, 1 April 1989


Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

D.5 FFI License


libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others.
See source files for details.

Permission is hereby granted, free of charge, to any person obtaining


a copy of this software and associated documentation files (the
‘‘Software’’), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be


included in all copies or substantial portions of the Software.

129
THE SOFTWARE IS PROVIDED ‘‘AS IS’’, WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

D.6 Fontconfig License


fontconfig/COPYING

Copyright © 2001,2003 Keith Packard

Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of Keith Packard not be used in
advertising or publicity pertaining to distribution of the software without
specific, written prior permission. Keith Packard makes no
representations about the suitability of this software for any purpose. It
is provided "as is" without express or implied warranty.

THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,


INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

D.7 Freetype License


The FreeType Project LICENSE
----------------------------

2006-Jan-27

Copyright 1996-2002, 2006 by


David Turner, Robert Wilhelm, and Werner Lemberg

Introduction
============

The FreeType Project is distributed in several archive packages;


some of them may contain, in addition to the FreeType font engine,
various tools and contributions which rely on, or relate to, the
FreeType Project.

This license applies to all files found in such packages, and


which do not fall under their own explicit license. The license
affects thus the FreeType font engine, the test programs,
documentation and makefiles, at the very least.

This license was inspired by the BSD, Artistic, and IJG


(Independent JPEG Group) licenses, which all encourage inclusion
and use of free software in commercial and freeware products
alike. As a consequence, its main points are that:

o We don’t promise that this software works. However, we will be


interested in any kind of bug reports. (‘as is’ distribution)

o You can use this software for whatever you want, in parts or
full form, without having to pay us. (‘royalty-free’ usage)

o You may not pretend that you wrote this software. If you use

130
it, or only parts of it, in a program, you must acknowledge
somewhere in your documentation that you have used the
FreeType code. (‘credits’)

We specifically permit and encourage the inclusion of this


software, with or without modifications, in commercial products.
We disclaim all warranties covering The FreeType Project and
assume no liability related to The FreeType Project.

Finally, many people asked us for a preferred form for a


credit/disclaimer to use in compliance with this license. We thus
encourage you to use the following text:

"""
Portions of this software are copyright © <year> The FreeType
Project (www.freetype.org). All rights reserved.
"""

Please replace <year> with the value from the FreeType version you
actually use.

Legal Terms
===========

0. Definitions
--------------

Throughout this license, the terms ‘package’, ‘FreeType Project’,


and ‘FreeType archive’ refer to the set of files originally
distributed by the authors (David Turner, Robert Wilhelm, and
Werner Lemberg) as the ‘FreeType Project’, be they named as alpha,
beta or final release.

‘You’ refers to the licensee, or person using the project, where


‘using’ is a generic term including compiling the project’s source
code as well as linking it to form a ‘program’ or ‘executable’.
This program is referred to as ‘a program using the FreeType
engine’.

This license applies to all files distributed in the original


FreeType Project, including all source code, binaries and
documentation, unless otherwise stated in the file in its
original, unmodified form as distributed in the original archive.
If you are unsure whether or not a particular file is covered by
this license, you must contact us to verify this.

The FreeType Project is copyright (C) 1996-2000 by David Turner,


Robert Wilhelm, and Werner Lemberg. All rights reserved except as
specified below.

1. No Warranty
--------------

THE FREETYPE PROJECT IS PROVIDED ‘AS IS’ WITHOUT WARRANTY OF ANY


KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
USE, OF THE FREETYPE PROJECT.

2. Redistribution
-----------------

This license grants a worldwide, royalty-free, perpetual and


irrevocable right and license to use, execute, perform, compile,
display, copy, create derivative works of, distribute and
sublicense the FreeType Project (in both source and object code
forms) and derivative works thereof for any purpose; and to
authorize others to exercise some or all of the rights granted
herein, subject to the following conditions:

131
o Redistribution of source code must retain this license file
(‘FTL.TXT’) unaltered; any additions, deletions or changes to
the original files must be clearly indicated in accompanying
documentation. The copyright notices of the unaltered,
original files must be preserved in all copies of source
files.

o Redistribution in binary form must provide a disclaimer that


states that the software is based in part of the work of the
FreeType Team, in the distribution documentation. We also
encourage you to put an URL to the FreeType web page in your
documentation, though this isn’t mandatory.

These conditions apply to any software derived from or based on


the FreeType Project, not just the unmodified files. If you use
our work, you must acknowledge us. However, no fee need be paid
to us.

3. Advertising
--------------

Neither the FreeType authors and contributors nor you shall use
the name of the other for commercial, advertising, or promotional
purposes without specific prior written permission.

We suggest, but do not require, that you use one or more of the
following phrases to refer to this software in your documentation
or advertising materials: ‘FreeType Project’, ‘FreeType Engine’,
‘FreeType library’, or ‘FreeType Distribution’.

As you have not signed this license, you are not required to
accept it. However, as the FreeType Project is copyrighted
material, only this license, or another one contracted with the
authors, grants you the right to use, distribute, and modify it.
Therefore, by using, distributing, or modifying the FreeType
Project, you indicate that you understand and accept all the terms
of this license.

4. Contacts
-----------

There are two mailing lists related to FreeType:

o [email protected]

Discusses general use and applications of FreeType, as well as


future and wanted additions to the library and distribution.
If you are looking for support, start in this list if you
haven’t found anything to help you in the documentation.

o [email protected]

Discusses bugs, as well as engine internals, design issues,


specific licenses, porting, etc.

Our home page can be found at

http://www.freetype.org

--- end of FTL.TXT ---

D.8 GCC runtime license


GCC RUNTIME LIBRARY EXCEPTION

Version 3.1, 31 March 2009

Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this


license document, but changing it is not allowed.

132
This GCC Runtime Library Exception ("Exception") is an additional
permission under section 7 of the GNU General Public License, version
3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
bears a notice placed by the copyright holder of the file stating that
the file is governed by GPLv3 along with this Exception.

When you use GCC to compile a program, GCC may combine portions of
certain GCC header files and runtime libraries with the compiled
program. The purpose of this Exception is to allow compilation of
non-GPL (including proprietary) programs to use, in this way, the
header files and runtime libraries covered by this Exception.

0. Definitions.

A file is an "Independent Module" if it either requires the Runtime


Library for execution after a Compilation Process, or makes use of an
interface provided by the Runtime Library, but is not otherwise based
on the Runtime Library.

"GCC" means a version of the GNU Compiler Collection, with or without


modifications, governed by version 3 (or a specified later version) of
the GNU General Public License (GPL) with the option of using any
subsequent versions published by the FSF.

"GPL-compatible Software" is software whose conditions of propagation,


modification and use would permit combination with GCC in accord with
the license of GCC.

"Target Code" refers to output from any compiler for a real or virtual
target processor architecture, in executable form or suitable for
input to an assembler, loader, linker and/or execution
phase. Notwithstanding that, Target Code does not include data in any
format that is used as a compiler intermediate representation, or used
for producing a compiler intermediate representation.

The "Compilation Process" transforms code entirely represented in


non-intermediate languages designed for human-written code, and/or in
Java Virtual Machine byte code, into Target Code. Thus, for example,
use of source code generators and preprocessors need not be considered
part of the Compilation Process, since the Compilation Process can be
understood as starting with the output of the generators or
preprocessors.

A Compilation Process is "Eligible" if it is done using GCC, alone or


with other GPL-compatible software, or if it is done without using any
work based on GCC. For example, using non-GPL-compatible Software to
optimize any GCC intermediate representations would not qualify as an
Eligible Compilation Process.

1. Grant of Additional Permission.

You have permission to propagate a work of Target Code formed by


combining the Runtime Library with Independent Modules, even if such
propagation would otherwise violate the terms of GPLv3, provided that
all Target Code was generated by Eligible Compilation Processes. You
may then convey such a combination under terms of your choice,
consistent with the licensing of the Independent Modules.

2. No Weakening of GCC Copyleft.

The availability of this Exception does not imply any general


presumption that third-party software is unaffected by the copyleft
requirements of the license of GCC.

D.9 GNU General Public License, version 3


GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>


Everyone is permitted to copy and distribute verbatim copies

133
of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for


software and other kinds of works.

The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not


price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you


these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether


gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.

Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains
that there is no warranty for this free software. For both users’ and
authors’ sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

Some devices are designed to deny users access to install or run


modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users’ freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents.


States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and


modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU General Public License.

"Copyright" also means copyright-like laws that apply to other kinds of


works, such as semiconductor masks.

134
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based


on the Program.

To "propagate" a work means to do anything with it that, without


permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

To "convey" a work means any kind of propagation that enables other


parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays "Appropriate Legal Notices"


to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.

A "Standard Interface" means an interface that either is an official


standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

The "System Libraries" of an executable work include anything, other


than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work’s
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

The Corresponding Source need not include anything that users


can regenerate automatically from other parts of the Corresponding
Source.

The Corresponding Source for a work in source code form is that

135
same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under


the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.

3. Protecting Users’ Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological


measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work’s
users, your or third parties’ legal rights to forbid circumvention of
technological measures.

4. Conveying Verbatim Copies.

You may convey verbatim copies of the Program’s source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to


produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) The work must carry prominent notices stating that it is


released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".

c) You must license the entire work, as a whole, under this


License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7

136
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.

d) If the work has interactive user interfaces, each must display


Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.

A compilation of a covered work with other separate and independent


works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation’s users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

a) Convey the object code in, or embodied in, a physical product


(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.

b) Convey the object code in, or embodied in, a physical product


(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.

c) Convey individual copies of the object code with a copy of the


written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.

d) Convey the object code by offering access from a designated


place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.

e) Convey the object code using peer-to-peer transmission, provided


you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.

A separable portion of the object code, whose source code is excluded


from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any

137
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

"Installation Information" for a User Product means any methods,


procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

The requirement to provide Installation Information does not include a


requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided,


in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

7. Additional Terms.

"Additional permissions" are terms that supplement the terms of this


License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you


add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

a) Disclaiming warranty or limiting liability differently from the


terms of sections 15 and 16 of this License; or

b) Requiring preservation of specified reasonable legal notices or


author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or

138
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

d) Limiting the use for publicity purposes of names of licensors or


authors of the material; or

e) Declining to grant rights under trademark law for use of some


trade names, trademarks, or service marks; or

f) Requiring indemnification of licensors and authors of that


material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.

All other non-permissive additional terms are considered "further


restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the


form of a separately written license, or stated as exceptions;
the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly


provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

However, if you cease all violation of this License, then your


license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is


reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or


run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a

139
covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically


receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an


organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party’s predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

11. Patents.

A "contributor" is a copyright holder who authorizes use under this


License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor’s "contributor version".

A contributor’s "essential patent claims" are all patent claims


owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free


patent license under the contributor’s essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

In the following three paragraphs, a "patent license" is any express


agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

If you convey a covered work, knowingly relying on a patent license,


and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient’s use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or


arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify

140
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

A patent license is "discriminatory" if it does not include within


the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting


any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

12. No Surrender of Others’ Freedom.

If conditions are imposed on you (whether by court order, agreement or


otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have


permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the


Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

If the Program specifies that a proxy can decide which future


versions of the GNU General Public License can be used, that proxy’s
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

Later license versions may give you additional or different


permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

15. Disclaimer of Warranty.

141
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING


WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided


above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest


possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest


to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program’s name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This program is free software: you can redistribute it and/or modify


it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,


but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short


notice like this when it starts in an interactive mode:

<program> Copyright (C) <year> <name of author>


This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate
parts of the General Public License. Of course, your program’s commands
might be different; for a GUI interface, you would use an "about box".

142
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

D.10 JasPer license


JasPer License Version 2.0

Copyright (c) 2001-2006 Michael David Adams


Copyright (c) 1999-2000 Image Power, Inc.
Copyright (c) 1999-2000 The University of British Columbia

All rights reserved.

Permission is hereby granted, free of charge, to any person (the


"User") obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the
following conditions:

1. The above copyright notices and this permission notice (which


includes the disclaimer below) shall be included in all copies or
substantial portions of the Software.

2. The name of a copyright holder shall not be used to endorse or


promote products derived from the Software without specific prior
written permission.

THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS


LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER
THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO
EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE
PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE
THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY.
EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS
BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL
PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS
GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE
ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE
IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL
SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES,
AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL
SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH
THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,
PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH
RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY
EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.

D.11 Jpeg License


The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or

143
fitness for a particular purpose. This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1991-1998, Thomas G. Lane.


All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this


software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library. If you use our work, you ought to
acknowledge us.

Permission is NOT granted for the use of any IJG author’s name or company name
in advertising or publicity relating to this software or products derived from
it. This software may be referred to only as "the Independent JPEG Group’s
software".

We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.

ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,


sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
ansi2knr.c is NOT covered by the above copyright and conditions, but instead
by the usual distribution terms of the Free Software Foundation; principally,
that you must include source code if you redistribute it. (See the file
ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
of any program generated from the IJG code, this does not limit you more than
the foregoing paragraphs do.

The Unix configuration script "configure" was produced with GNU Autoconf.
It is copyright by the Free Software Foundation but is freely distributable.
The same holds for its supporting scripts (config.guess, config.sub,
ltconfig, ltmain.sh). Another support script, install-sh, is copyright
by M.I.T. but is also freely distributable.

It appears that the arithmetic coding option of the JPEG spec is covered by
patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot
legally be used without obtaining one or more licenses. For this reason,
support for arithmetic coding has been removed from the free JPEG software.
(Since arithmetic coding provides only a marginal gain over the unpatented
Huffman mode, it is unlikely that very many implementations will support it.)
So far as we are aware, there are no patent restrictions on the remaining
code.

The IJG distribution formerly included code to read and write GIF files.
To avoid entanglement with the Unisys LZW patent, GIF reading support has
been removed altogether, and the GIF writer has been simplified to produce
"uncompressed GIFs". This technique does not use the LZW algorithm; the
resulting GIF files are larger than usual, but are readable by all standard
GIF decoders.

We are required to state that


"The Graphics Interchange Format(c) is the Copyright property of
CompuServe Incorporated. GIF(sm) is a Service Mark property of
CompuServe Incorporated."

144
D.12 GNU Lesser General Public License, ver-
sion 2.1
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999

Copyright (C) 1991, 1999 Free Software Foundation, Inc.


51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

This license, the Lesser General Public License, applies to some


specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

When we speak of free software, we are referring to freedom of use,


not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

To protect your rights, we need to make restrictions that forbid


distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

For example, if you distribute copies of the library, whether gratis


or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.

We protect your rights with a two-step method: (1) we copyright the


library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

To protect each distributor, we want to make it very clear that


there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author’s reputation will not be affected by problems that might be
introduced by others.

Finally, software patents pose a constant threat to the existence of


any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

Most GNU software, including some libraries, is covered by the


ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and

145
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

When a program is linked with a library, whether statically or using


a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.

We call this license the "Lesser" General Public License because it


does Less to protect the user’s freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.

For example, on rare occasions, there may be a special need to


encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

In other cases, permission to use a particular library in non-free


programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

Although the Lesser General Public License is Less protective of the


users’ freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

The precise terms and conditions for copying, distribution and


modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

GNU LESSER GENERAL PUBLIC LICENSE


TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License Agreement applies to any software library or other


program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

A "library" means a collection of software functions and/or data


prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

The "Library", below, refers to any such software library or work


which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)

"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

146
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.

1. You may copy and distribute verbatim copies of the Library’s


complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) The modified work must itself be a software library.

b) You must cause the files modified to carry prominent notices


stating that you changed the files and the date of any change.

c) You must cause the whole of the work to be licensed at no


charge to all third parties under the terms of this License.

d) If a facility in the modified Library refers to a function or a


table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.

(For example, a function in a library to compute square roots has


a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)

These requirements apply to the modified work as a whole. If


identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest


your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library


with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,

147
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.

Once this change is made in a given copy, it is irreversible for


that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

4. You may copy and distribute the Library (or a portion or


derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

If distribution of object code is made by offering access to copy


from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

5. A program that contains no derivative of any portion of the


Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data


structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

Otherwise, if the work is a derivative of the Library, you may


distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

6. As an exception to the Sections above, you may also combine or


link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer’s own use and reverse
engineering for debugging such modifications.

You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:

a) Accompany the work with the complete corresponding


machine-readable source code for the Library including whatever

148
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)

b) Use a suitable shared library mechanism for linking with the


Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user’s computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.

c) Accompany the work with a written offer, valid for at


least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.

d) If distribution of the work is made by offering access to copy


from a designated place, offer equivalent access to copy the above
specified materials from the same place.

e) Verify that the user has already received a copy of these


materials or that you have already sent this user a copy.

For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

It may happen that this requirement contradicts the license


restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

a) Accompany the combined library with a copy of the same work


based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.

b) Give prominent notice with the combined library of the fact


that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.

8. You may not copy, modify, sublicense, link with, or distribute


the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by

149
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients’ exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

11. If, as a consequence of a court judgment or allegation of patent


infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any


particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any


patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to


be a consequence of the rest of this License.

12. If the distribution and/or use of the Library is restricted in


certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.

13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Library


specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

150
NO WARRANTY

15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO


WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN


WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Libraries

If you develop a new library, and you want it to be of the greatest


possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

To apply these terms, attach the following notices to the library. It is


safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

<one line to give the library’s name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This library is free software; you can redistribute it and/or


modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,


but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the


library ‘Frob’ (a library for tweaking knobs) written by James Random Hacker.

<signature of Ty Coon>, 1 April 1990


Ty Coon, President of Vice

That’s all there is to it!

151
D.13 GNU Library General Public License, ver-
sion 2.0
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1991 Free Software Foundation, Inc.


51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

[This is the first released version of the library GPL. It is


numbered 2 because it goes with version 2 of the ordinary GPL.]

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

This license, the Library General Public License, applies to some


specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, too.

When we speak of free software, we are referring to freedom, not


price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid


anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.

For example, if you distribute copies of the library, whether gratis


or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.

Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.

Also, for each distributor’s protection, we want to make certain


that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors’ reputations.

Finally, any free program is threatened constantly by software


patents. We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone’s
free use or not licensed at all.

Most GNU software, including some libraries, is covered by the ordinary


GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don’t assume that anything in it is
the same as in the ordinary license.

152
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.

Because of this blurred distinction, using the ordinary General


Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.

However, unrestricted linking of non-free programs would deprive the


users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.

The precise terms and conditions for copying, distribution and


modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.

Note that it is possible for a library to be covered by the ordinary


General Public License rather than by this special one.

GNU LIBRARY GENERAL PUBLIC LICENSE


TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License Agreement applies to any software library which


contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".

A "library" means a collection of software functions and/or data


prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

The "Library", below, refers to any such software library or work


which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)

"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

Activities other than copying, distribution and modification are not


covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.

1. You may copy and distribute verbatim copies of the Library’s


complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any

153
warranty; and distribute a copy of this License along with the
Library.

You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) The modified work must itself be a software library.

b) You must cause the files modified to carry prominent notices


stating that you changed the files and the date of any change.

c) You must cause the whole of the work to be licensed at no


charge to all third parties under the terms of this License.

d) If a facility in the modified Library refers to a function or a


table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.

(For example, a function in a library to compute square roots has


a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)

These requirements apply to the modified work as a whole. If


identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest


your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library


with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.

Once this change is made in a given copy, it is irreversible for


that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

4. You may copy and distribute the Library (or a portion or

154
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

If distribution of object code is made by offering access to copy


from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

5. A program that contains no derivative of any portion of the


Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data


structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

Otherwise, if the work is a derivative of the Library, you may


distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

6. As an exception to the Sections above, you may also compile or


link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer’s own use and reverse
engineering for debugging such modifications.

You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:

a) Accompany the work with the complete corresponding


machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)

b) Accompany the work with a written offer, valid for at


least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more

155
than the cost of performing this distribution.

c) If distribution of the work is made by offering access to copy


from a designated place, offer equivalent access to copy the above
specified materials from the same place.

d) Verify that the user has already received a copy of these


materials or that you have already sent this user a copy.

For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

It may happen that this requirement contradicts the license


restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

a) Accompany the combined library with a copy of the same work


based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.

b) Give prominent notice with the combined library of the fact


that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.

8. You may not copy, modify, sublicense, link with, or distribute


the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients’ exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

11. If, as a consequence of a court judgment or allegation of patent


infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent

156
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any


particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any


patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to


be a consequence of the rest of this License.

12. If the distribution and/or use of the Library is restricted in


certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.

13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Library


specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

NO WARRANTY

15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO


WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN


WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF

157
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Libraries

If you develop a new library, and you want it to be of the greatest


possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

To apply these terms, attach the following notices to the library. It is


safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

<one line to give the library’s name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This library is free software; you can redistribute it and/or


modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,


but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the


library ‘Frob’ (a library for tweaking knobs) written by James Random Hacker.

<signature of Ty Coon>, 1 April 1990


Ty Coon, President of Vice

That’s all there is to it!

D.14 GNU Lesser General Public License, ver-


sion 3
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>


Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

This version of the GNU Lesser General Public License incorporates


the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

0. Additional Definitions.

As used herein, "this License" refers to version 3 of the GNU Lesser


General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

158
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

An "Application" is any work that makes use of an interface provided


by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

A "Combined Work" is a work produced by combining or linking an


Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

The "Minimal Corresponding Source" for a Combined Work means the


Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

The "Corresponding Application Code" for a Combined Work means the


object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

1. Exception to Section 3 of the GNU GPL.

You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

2. Conveying Modified Versions.

If you modify a copy of the Library, and, in your modifications, a


facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or

b) under the GNU GPL, with none of the additional permissions of


this License applicable to that copy.

3. Object Code Incorporating Material from Library Header Files.

The object code form of an Application may incorporate material from


a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.

b) Accompany the object code with a copy of the GNU GPL and this license
document.

4. Combined Works.

You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.

b) Accompany the Combined Work with a copy of the GNU GPL and this license

159
document.

c) For a Combined Work that displays copyright notices during


execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.

d) Do one of the following:

0) Convey the Minimal Corresponding Source under the terms of this


License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.

1) Use a suitable shared library mechanism for linking with the


Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user’s computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.

e) Provide Installation Information, but only if you would otherwise


be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)

5. Combined Libraries.

You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.

b) Give prominent notice with the combined library that part of it


is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.

6. Revised Versions of the GNU Lesser General Public License.

The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the


Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

If the Library as you received it specifies that a proxy can decide


whether future versions of the GNU Lesser General Public License shall
apply, that proxy’s public statement of acceptance of any version is
permanent authorization for you to choose that version for the

160
Library.

D.15 Libpng license


The PNG Reference Library is supplied "AS IS". The Contributing Authors
and Group 42, Inc. disclaim all warranties, expressed or implied,
including, without limitation, the warranties of merchantability and of
fitness for any purpose. The Contributing Authors and Group 42, Inc.
assume no liability for direct, indirect, incidental, special, exemplary,
or consequential damages, which may result from the use of the PNG
Reference Library, even if advised of the possibility of such damage.

Permission is hereby granted to use, copy, modify, and distribute this


source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions:

1. The origin of this source code must not be misrepresented.

2. Altered versions must be plainly marked as such and must not


be misrepresented as being the original source.

3. This Copyright notice may not be removed or altered from any


source or altered source distribution.

The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to
supporting the PNG file format in commercial products. If you use this
source code in a product, acknowledgment is not required but would be
appreciated.

D.16 Libssh2 license


/* Copyright (c) 2004-2007 Sara Golemon <[email protected]>
* Copyright (c) 2005,2006 Mikhail Gusarov <[email protected]>
* Copyright (c) 2006-2007 The Written Word, Inc.
* Copyright (c) 2007 Eli Fant <[email protected]>
* Copyright (c) 2009-2014 Daniel Stenberg
* Copyright (C) 2008, 2009 Simon Josefsson
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
*
* Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the copyright holder nor the names
* of any other contributors may be used to endorse or
* promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE

161
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*/

D.17 Mingw-w64 license


MinGW-w64 runtime licensing
***************************

This program or library was built using MinGW-w64 and statically


linked against the MinGW-w64 runtime. Some parts of the runtime
are under licenses which require that the copyright and license
notices are included when distributing the code in binary form.
These notices are listed below.

========================
Overall copyright notice
========================

Copyright (c) 2009, 2010, 2011, 2012, 2013 by the mingw-w64 project

This license has been certified as open source. It has also been designated
as GPL compatible by the Free Software Foundation (FSF).

Redistribution and use in source and binary forms, with or without


modification, are permitted provided that the following conditions are met:

1. Redistributions in source code must retain the accompanying copyright


notice, this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the accompanying
copyright notice, this list of conditions, and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
3. Names of the copyright holders must not be used to endorse or promote
products derived from this software without prior written permission
from the copyright holders.
4. The right to distribute this software or to use it for any purpose does
not give you the right to use Servicemarks (sm) or Trademarks (tm) of
the copyright holders. Use of them is covered by separate agreement
with the copyright holders.
5. If any files are modified, you must cause the modified files to carry
prominent notices stating that you changed the files and the date of
any change.

Disclaimer

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ‘‘AS IS’’ AND ANY EXPRESSED
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

========================================
getopt, getopt_long, and getop_long_only
========================================

Copyright (c) 2002 Todd C. Miller <[email protected]>

Permission to use, copy, modify, and distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES

162
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Sponsored in part by the Defense Advanced Research Projects


Agency (DARPA) and Air Force Research Laboratory, Air Force
Materiel Command, USAF, under agreement number F39502-99-1-0512.

* * * * * * *

Copyright (c) 2000 The NetBSD Foundation, Inc.


All rights reserved.

This code is derived from software contributed to The NetBSD Foundation


by Dieter Baron and Thomas Klausner.

Redistribution and use in source and binary forms, with or without


modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS


‘‘AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

===============================================================
gdtoa: Converting between IEEE floating point numbers and ASCII
===============================================================

The author of this software is David M. Gay.

Copyright (C) 1997, 1998, 1999, 2000, 2001 by Lucent Technologies


All Rights Reserved

Permission to use, copy, modify, and distribute this software and


its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of Lucent or any of its entities
not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,


INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.

* * * * * * *

The author of this software is David M. Gay.

Copyright (C) 2005 by David M. Gay


All Rights Reserved

163
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that the copyright notice and this permission notice and warranty
disclaimer appear in supporting documentation, and that the name of
the author or any of his current or former employers not be used in
advertising or publicity pertaining to distribution of the software
without specific, written prior permission.

THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,


INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
NO EVENT SHALL THE AUTHOR OR ANY OF HIS CURRENT OR FORMER EMPLOYERS BE
LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.

* * * * * * *

The author of this software is David M. Gay.

Copyright (C) 2004 by David M. Gay.


All Rights Reserved
Based on material in the rest of /netlib/fp/gdota.tar.gz,
which is copyright (C) 1998, 2000 by Lucent Technologies.

Permission to use, copy, modify, and distribute this software and


its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of Lucent or any of its entities
not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,


INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.

=========================
Parts of the math library
=========================

Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.

Developed at SunSoft, a Sun Microsystems, Inc. business.


Permission to use, copy, modify, and distribute this
software is freely granted, provided that this notice
is preserved.

* * * * * * *

Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.

Developed at SunPro, a Sun Microsystems, Inc. business.


Permission to use, copy, modify, and distribute this
software is freely granted, provided that this notice
is preserved.

* * * * * * *

FIXME: Cephes math lib


Copyright (C) 1984-1998 Stephen L. Moshier

It sounds vague, but as to be found at

164
<http://lists.debian.org/debian-legal/2004/12/msg00295.html>, it gives an
impression that the author could be willing to give an explicit
permission to distribute those files e.g. under a BSD style license. So
probably there is no problem here, although it could be good to get a
permission from the author and then add a license into the Cephes files
in MinGW runtime. At least on follow-up it is marked that debian sees the
version a-like BSD one. As MinGW.org (where those cephes parts are coming
from) distributes them now over 6 years, it should be fine.

===================================
Headers and IDLs imported from Wine
===================================

Some header and IDL files were imported from the Wine project. These files
are prominent maked in source. Their copyright belongs to contributors and
they are distributed under LGPL license.

Disclaimer

This library is free software; you can redistribute it and/or


modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,


but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

D.18 MIT license


The MIT License

Copyright (c) <year> <copyright holders>

Permission is hereby granted, free of charge, to any person obtaining a copy


of this software and associated documentation files (the "Software"), to
deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

D.19 OpenSSL license


LICENSE ISSUES
==============

The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
the OpenSSL License and the original SSLeay license apply to the toolkit.
See below for the actual license texts. Actually both licenses are BSD-style
Open Source licenses. In case of any license issues related to OpenSSL
please contact [email protected].

OpenSSL License
---------------

/* ====================================================================

165
* Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* [email protected].
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ‘‘AS IS’’ AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* ([email protected]). This product includes software written by Tim
* Hudson ([email protected]).
*
*/

Original SSLeay License


-----------------------

/* Copyright (C) 1995-1998 Eric Young ([email protected])


* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young ([email protected]).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson ([email protected]).
*
* Copyright remains Eric Young’s, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution

166
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* "This product includes cryptographic software written by
* Eric Young ([email protected])"
* The word ’cryptographic’ can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson ([email protected])"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ‘‘AS IS’’ AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/

D.20 Pcre license


Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,


this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright


notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

* Neither the name of the University of Cambridge nor the name of Google
Inc. nor the names of their contributors may be used to endorse or
promote products derived from this software without specific prior
written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

167
D.21 Pixman license
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

D.22 Tiff license


Permission to use, copy, modify, distribute, and sell this software and
its documentation for any purpose is hereby granted without fee, provided
that (i) the above copyright notices and this permission notice appear in
all copies of the software and related documentation, and (ii) the names of
Sam Leffler and Silicon Graphics may not be used in any advertising or
publicity relating to the software without the specific, prior written
permission of Sam Leffler and Silicon Graphics.

THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,


EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR


ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.

D.23 Zlib license


This software is provided ’as-is’, without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,


including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

168

You might also like