AmigaGPT is a text and image generation program that runs on the classic
AmigaOS. Utilising the power of the OpenAI's GPT-3 and GPT-4 architectures,
this program brings state-of-the-art language modeling to your Amiga computer.
Features:
- Generates text based on input prompts
- Generates images based on input prompts
- UI customisation
- Full conversation history
- Text-to-speech
Requirements:
- OCS/ECS/AGA Amiga
- Motorola 68020 or higher CPU or PPC for AmigaOS 4
- AmigaOS 3.9 and AmigaOS 3.X (included in Amiga Forever) supported but
3.2 or higher required for best experience. AmigaOS 4.1 version also included.
- AmiSSL 5.9 or higher (http://aminet.net/util/libs/AmiSSL-5.9-OS3.lha)
- Internet access using a TCP/IP stack such as Roadshow
(http://roadshow.apc-tcp.de/index-en.php)
- An active OpenAI API key
- For speech on AmigaOS 3, any version of narrator.device
- For speech on AmigaOS 4, Flite Device
(http://aminet.net/package/mus/misc/flite_device)
- For OpenAI speech, AHI is required
(http://aminet.net/package/driver/audio/ahiusr_4.18)
Installation:
1. Install AmiSSL and a TCP/IP stack if not already done so
2. Unpack the archive to a directory of your choice.
3. Run the Installer script included in the package.
4. Follow the prompts to complete the installation.
Optional steps to enable speech functionality:
AmigaGPT supports reading the output aloud. How AmigaGPT does this depends
on whether you are using AmigaOS 3 or 4.
AmigaOS 3:
Speech on AmigaOS 3 requires a file called `narrator.device` which cannot be
included with AmigaGPT because it is still under copyright. Therefore, you
must copy this file legally from yourWorkbench disks so that AmigaGPT will be
able to synthesise speech. There are 2 versions of `narrator.device`
supported, v34 and v37.
v34 is the original version that came with Workbench 1.x. v37 was an updated
version included with Workbench 2.0.x. It has more features and sounds more
natural, however it does sound quite different which is why AmigaGPT supports
you installing both versions and your choice of version to be used can be
selected in the Speech menu in the app.
Regardless of which version of `narrator.device` you choose to install
(or both), AmigaGPT requires that you install the free third party
`translator.library` v43. This works with both versions of `narrator.device`.
Installing `translator.library` v43:
Since `translator.library` v43 is not available as a standalone install, you
will need to install v42 and then patch it to v43.
* Download http://aminet.net/util/libs/translator42.lha and extract the
archive to any convenient location on your Amiga such as `RAM:`
* Navigate to that directory and double click the `Install` program
* Run the installer using all the default settings
* Download http://aminet.net/util/libs/Tran43pch.lha and once again extract it
to a location of your choice
* Navigate to that directory and double click the `Install` program
* Run the installer using all the default settings
* Reboot your Amiga - It will not work until the system is restarted
Installing `narrator.device` v34:
* Insert your Workbench 1.x disk and copy `df0:devs/narrator.device` to
`{AmigaGPTProgramDirectory}/devs/speech/34`
Installing `narrator.device` v37
* Insert your Workbench 2.0.x (you cannot use 2.1 because the speech libraries
were removed after version 2.0.4) disk and copy `df0:devs/narrator.device` to
`{AmigaGPTProgramDirectory}/devs/speech/37`
Installing AHI:
* If your OS does not come with AHI installed, you can get it from
https://aminet.net/package/driver/audio/ahiusr_4.18
AmigaOS 4:
Speech on AmigaOS 4 is done with the help of Flite Device.
- Download Flite Device from http://aminet.net/package/mus/misc/flite_device
- Extract the archive and run the installer
Launching AmigaGPT:
* Launch the application by double-clicking the AmigaGPT icon
* You may also launch the app in the command line but before you do, run the
command `STACK 20000` to give the program 20kb of stack since the default
stack size for apps launched from the shell is 4kb and this is not enough for
AmigaGPT and will cause random crashes due to stack overflow. This is not
required when you launch the app by double clicking the icon since the stack
size is saved in the icon.
Usage:
When launched, AmigaGPT presents you with a choice of opening the app in a new
screen or opening in Workbench. If you open in a new screen you have the
ability to create a screen for the app to open in. AmigaGPT supports anything
from 320x200 all the way up to 4k resolution if using a video card for RTG.
Bear in mind text will appear very tiny in resolutions above 1080p so you may
want to increase the font size settings from the View menu when the app opens.
When launching for the first time you will need to enter your OpenAI API key
before you can start chatting. If you haven't already done so, create an
OpenAI account and navigate to https://platform.openai.com/account/api-keys to
generate an API key for use with AmigaGPT.
*Chat*
When the app has opened, you are presented with a text input box. You can type
any prompt into this box and press "Send" to see the GPT-4 model's response.
The generated text appears in the box above the input. You can choose to have
this text read aloud using the "Speech" menu option. You can also select which
model for OpenAI to use in the "OpenAI" menu option.
To the left of the chat box is a conversation list which you can use to go to
another saved conversation. New conversations can be created with the "New
chat" button and conversations can be removed with the "Delete chat" button.
There are 2 main modes of operation: Chat and Image Generation. You can switch
between them via the tabs in the top left corner.
*Image Generation*
To generate images, simply select your desired image generation model from the
"OpenAI" menu then type your prompt in the text box then hit the "Create Image"
button. When it has been downloaded to your Amiga, you are then able to open
the image to your desired scale, or save a copy of the file to a new location
on your Amiga. Do note however that AmigaGPT will automatially save all your
generated images until you delete them. This is just in case you would like to
create a copy elsewhere.
*General*
In the "Edit" menu, you'll find basic text editing commands like Cut, Copy,
Paste and Clear. The "View" menu allows you to change the font used in the
chat and the UI.
The "Project" menu includes an "About" option, which displays information
about the program.
Developing:
Source code hosted at https://github.com/sacredbanana/AmigaGPT
You can either compile the code natively or with the Docker container.
------
Native
------
*Building the AmigaOS 3 app*
If you would like to build this project from source you will need Bebbo's
amiga-gcc toolchain here https://github.com/bebbo/amiga-gcc
Once installed, get the required other SDK's (AmiSSL, Translator, json-c)
from https://github.com/sacredbanana/AmigaSDK-gcc and put these in your Amiga
dev environment created in the above step.
*Building the AmigaOS 4 app*
Get this toolchain set up https://github.com/sba1/adtools
Once installed, get the required other SDK's (AmiSSL, Translator, json-c)
from https://github.com/sacredbanana/AmigaSDK-gcc and put these in your Amiga
dev environment created in the above step.
------
Docker
------
You may use an all-in-one Docker image that is able to compile both the
AmigaOS 3 and AmigaOS 4 versions of the app.
Just install Docker on your machine and run the `build_os3.sh` or
`build_os4.sh` scripts depending on which version of the app you want to
build. If you want to perform a clean build, you can set the environment
variable `CLEAN=1` for example you can run `CLEAN=1 ./build_os3.sh`.
The build app will be saved to the `/out` directory.
Contributing:
We welcome contributions to AmigaGPT! If you have a bug to report, a
feature to suggest, or a change you'd like to make to the code, please open
a new issue or submit a pull request.
Contributors:
Code:
- Cameron Armstrong (sacredbanana/Nightfox)
https://github.com/sacredbanana/
Art:
- Mauricio Sandoval - Icon design
Special Thanks:
- Bebbo for creating the Amiga GCC toolchain https://github.com/bebbo
- OpenAI for making this all possible https://openai.com
- EAB and everyone in it for answering my questions https://eab.abime.net/
- Hyperion Entertainment for bringinging us AmigaOS 3.2
https://www.hyperion-entertainment.com
Changelog:
------------------
1.6.3 (2024-09-18)
------------------
- Fixed error receiving chat messages
------------------
1.6.2 (2024-09-01)
------------------
- Increase max OpenAI API key size to 256 characters
------------------
1.6.1 (2024-08-31)
------------------
- Default to speech disabled
- Fix crash when trying to close speech system when it failed to initialise
------------------
1.6.0 (2024-08-10)
------------------
- Add the GPT4o Mini model
- Remove the unused Accent menu item from OS4 version
- Fix bug where some voice menu items in the OS4 version fail to display a
checkmark after you select it
------------------
1.5.1 (2024-06-26)
------------------
- Send button no longer appears after image creation
- Create image button stays disabled after image creation. Select new image to
create a new one
- Updated to latest json-c
------------------
1.5.0 (2024-05-18)
------------------
- Support for OpenAI's 16-bit text to speech voices. Fast internet connection
recommended
- Updated to latest OpenAI chat models (including GPT-4o which will only
work for ChatGPT Plus subscribers for now)
- Removed debug symbols for faster and smaller executable
------------------
1.4.6 (2024-04-13)
------------------
- Send button no longer appears in top left corner after closing a generated
image for Amiga 3.X
------------------
1.4.5 (2024-04-06)
------------------
- Fixes the stack size calculation so it will no longer warn you that the
stack size is too small if it really isn't
------------------
1.4.4 (2024-03-23)
------------------
- Fixes a bug in chat mode in AmigaOS 3.X where the send button stays disabled
after an error occurs
- Change the stack size in the program .info file to the recommended 32768
bytes
- Fix bug where accents were not loaded properly resulting in the speech to
fail
------------------
1.4.3 (2024-02-08)
------------------
- Updated to the latest OpenAI chat models
- Fix crash when config.json doesn't exist
- Fix crash when selecting the root menu items
- Adjust screen colours to enhance visibility
- Improved error handling for connection errors
- Use a stack cookie to set minimum stack size to 32768 bytes (AmigaOS 3.1.4
or higher required)
- Shows a warning if the stack size is smaller than 32768 bytes (AmigaOS 3
only)
- Send button no longer appears in corner of screen on image mode in 3.X after
an error message is dismissed
------------------
1.4.2 (2024-01-31)
------------------
- Replaced clicktabs for AmigaOS 3.X since the version is too old and will
crash. 3.X users can select the mode at startup.
------------------
1.4.1 (2024-01-22)
------------------
- Fixed bug where the prompt textbox remains in a readonly state when
switching from image mode to chat mode
------------------
1.4.0 (2024-01-21)
------------------
- AI image generation! Switch between chat and image generation mode by
clicking the tabs at the top of the screen
- Colour tweaks
- Status bar shows more information and colours
- About screen can now be dismissed with any key press or mouse click
- The OpenAI API key requester now populates with the existing key if it
exists so you can more easily find and fix typos in the key
- Added the ability to set the chat system (new "Chat System" menu item)
- Fix crash when having a conversation consisting of a few messages
------------------
1.3.1 (2023-12-02)
------------------
- Fix pasting into chat input textbox (AmigaOS 3.2 and 4.1 only for now)
- Remove trailing newline from user messages
- Enclose all user lines in asterisks to make bold
- Fix memory leak that was present in downloading responses from OpenAI
------------------
1.3.0 (2023-11-12)
------------------
- Native PPC version for AmigaOS 4.1
- Scrollbar works again
- Improve response handling from OpenAI preventing a crash
- Latest OpenAI models added
------------------
1.2.1 (2023-11-04)
------------------
- Now fully backwards compatible with Cloanto's AmigaOS 3.X (included
in Amiga Forever)
------------------
1.2.0 (2023-10-04)
------------------
- Now fully backwards compatible with AmigaOS 3.9
------------------
1.1.0 (2023-07-22)
------------------
- Now supports characters from Western languages other than English
- Blank responses from OpenAI no longer cause a crash
------------------
1.0.1 (2023-06-24)
------------------
- After setting UI font, the font is now applied fully without needing
to restart the app
----------------
1.0 (2023-06-17)
----------------
- Initial release
License:
--------
AmigaGPT
--------
MIT License
Copyright (c) 2023 Cameron Armstrong
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.
--------------------
THIRD PARTY LICENSES
--------------------
------
json-c
------
Copyright (c) 2009-2012 Eric Haszlakiewicz
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.
----------------------------------------------------------------
Copyright (c) 2004, 2005 Metaparadigm Pte Ltd
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.
-----
Flite
-----
Flite is free software.
We have kept the core code to BSD-like copyright, thus the system is
free to use in commercial products, with commercial extensions. GPL
code is only included as part of the build process and does not
taint any of the run-time code.
Note the PalmOS code uses BSD code that requires acknowledgements in
any distribution documentation.
As a collection it is distributed under the following license. Note
a few files in this distribution have a different but equally free
non-conflicting licence, see below.
Language Technologies Institute
Carnegie Mellon University
Copyright (c) 1999-2008
All Rights Reserved.
Permission is hereby granted, free of charge, to use and distribute
this software and its documentation without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of this work, and to
permit persons to whom this work is furnished to do so, subject to
the following conditions:
1. The code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Any modifications must be clearly marked as such.
3. Original authors' names are not deleted.
4. The authors' names are not used to endorse or promote products
derived from this software without specific prior written
permission.
CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK
DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS 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.
All files within this distribution have the above license except
the following
src/cg/cst_mlpg.h
src/cg/cst_mlpg.c
src/cg/cst_mlsa.h
src/cg/cst_mlsa.c
src/cg/cst_vc.h
src/cg/cst_vc.c
/*********************************************************************/
/* */
/* Nagoya Institute of Technology, Aichi, Japan, */
/* Nara Institute of Science and Technology, Nara, Japan */
/* and */
/* Carnegie Mellon University, Pittsburgh, PA */
/* Copyright (c) 2003-2004 */
/* All Rights Reserved. */
/* */
/* Permission is hereby granted, free of charge, to use and */
/* distribute this software and its documentation without */
/* restriction, including without limitation the rights to use, */
/* copy, modify, merge, publish, distribute, sublicense, and/or */
/* sell copies of this work, and to permit persons to whom this */
/* work is furnished to do so, subject to the following conditions: */
/* */
/* 1. The code must retain the above copyright notice, this list */
/* of conditions and the following disclaimer. */
/* 2. Any modifications must be clearly marked as such. */
/* 3. Original authors' names are not deleted. */
/* */
/* NAGOYA INSTITUTE OF TECHNOLOGY, NARA INSTITUTE OF SCIENCE AND */
/* TECHNOLOGY, CARNEGIE MELLON UNIVERSITY, AND THE CONTRIBUTORS TO */
/* THIS WORK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, */
/* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, */
/* IN NO EVENT SHALL NAGOYA INSTITUTE OF TECHNOLOGY, NARA */
/* INSTITUTE OF SCIENCE AND TECHNOLOGY, CARNEGIE MELLON UNIVERSITY, */
/* NOR THE CONTRIBUTORS 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. */
/* */
/*********************************************************************/
These functions are derived from the versions in festvox/src/vc/ as
modified by Tomoki Toda which in turn contain code derived from
NITECH's HTS system. Their copyright has the same freedoms as
as Flite's but under NAIST, NITECH and/or CMU.
src/audio/au_wince.c
src/utils/cst_file_stdio.c
src/utils/cst_mmap_posix.c
src/utils/cst_mmap_win32.c
src/utils/cst_mmap_none.c
src/utils/cst_file_wince.c
sapi/
are copyright Cepstral, LLC rather than CMU but fall under the same
free licence as the above, except for the owner.
doc/alice
Is the first two chapters of Alice in Wonderland as distributed by the
Gutenburg project and is now in the public domain
src/regex/regexp.c
src/regex/regsub.c
* Copyright (c) 1986 by University of Toronto.
* Written by Henry Spencer. Not derived from licensed software.
*
* Permission is granted to anyone to use this software for any
* purpose on any computer system, and to redistribute it freely,
* subject to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of
* this software, no matter how awful, even if they arise
* from defects in it.
*
* 2. The origin of this software must not be misrepresented, either
* by explicit claim or by omission.
*
* 3. Altered versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
src/speech/rateconv.c
* Copyright (c) 1992, 1995 by Markus Mummert
*
* Redistribution and use of this software, modifcation and inclusion
* into other forms of software are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of this software must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. If this software is redistributed in a modified condition
* it must reveal clearly that it has been modified.
lang/usenglish/us_durz_cart.c
lang/usenglish/us_durz_cart.h
lang/usenglish/us_int_accent_cart.c
lang/usenglish/us_int_accent_cart.h
lang/usenglish/us_int_tone_cart.c
lang/usenglish/us_int_tone_cart.h
lang/usenglish/us_phoneset.c
lang/usenglish/us_f0lr.c
These are directly (or indirectly) compiled/derived from files that are
part of the Festival Speech Synthesis System (1.4.1). Hence they have
a joint copyright CMU/Edinburgh but with the same free licence
configure
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
configure.sub
config.guess
missing
install-sh
mkinstalldirs
Copyright FSF, and under the GPL, these files are only used for
convenient configuration and are not part of the generated binary,
and therefore do not impose any GPL restrctions on the rest of the
system. But as they are standard methods for configuration they
are included.
palm/include/peal.h
palm/include/pealstub.h
palm/arm_flite/pealstub.c
palm/m68k_flite/peal.c
/**********
* Copyright (c) 2004 Greg Parker. 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.
*
* THIS SOFTWARE IS PROVIDED BY GREG PARKER ``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.
**********/
The whole Sun Microsystems math library was ported to Palm
for this but its not actually needed, though the include file is
to allow bits of the system to compile that currently linked in
to the system, so we just have the include file here
palm/include/fdlibm.h
* ====================================================
* 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.
* ====================================================
------------
Flite Device
------------
/* Copyright (c) 2013 Fredrik Wikstrom. 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.
**
** 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.
*/
|