# Infinity API

## Welcome!

Thanks for downloading the Infinity API! This document serves as an introduction to the API, and includes details about the licence, project structure and some extra miscellaneous information. We've put a lot of effort in to the API and we hope that it serves you well!
Peace,
Exp Digital Uk, 2007

## Dedication

The Infinity API would not exist without the help and support of several people
First there are our long suffering other halves - Cathy and Jo. You are both absolute stars! Thanks for putting up with all the late nights, missed dinners and for reminding us to eat and sleep!
Secondly a big thank you has to go out to all the staff at FXpansion, and a specific mention for SKot McDonald, who has helped in so many ways that its impossible to list them all. He is a king amongst men.
Thanks also go to all the guys and gals who have supported us and given us kind words of encouragment. There are too many to list all of them but a few deserve specific mention:
Quinn Capen (API beta tester extrordinaire!)
Mully and The Betabugs crew

## Licence conditions

Parties
This License is between EXP Digital UK, the creators of Infinity API, and the end user.
For the purposes of this License an end user is defined as anyone who has any part or all of the Infinity API stored in any memory or other form, even if compressed, fragmented or altered.
Terms of use
Permission is hereby granted, free of charge, to any person obtaining any part of Infinity API and associated documentation files (the "Software"):

1. To use without restriction any part of the software and to copy and alter it.
2. To distribute the source code or any customised part of it, non commercially, so long as
   1. Credit is given explicitly to "Infinity API by EXP Digital" in any documentation and in comments in source code.
   2. This license is included unaltered and that the attention of end users is explicitly drawn to the fact that they are subject to this license by their possession of the parts of Infinity API in the aforementioned distribution. You may freely license your own work distributed alongside Infinity API as you wish.
   3. Original comments in the source code are preserved unaltered.
3. To distribute applications built using any part of Infinity API commercially or otherwise, only if the Infinity API logo is presented, as provided, no less than 24px in height, in the about box or help screen of any graphical user interface using Infinity API and the statement "Infinity API by EXP Digital" is included in any documentation and the help/about screen of the application.
4. To commercially distribute products incorporating Infinity API only if the Infinity API logo is included by the end user on any printed box artwork and printed manuals no smaller that 8mm in printed height and scaled as provided. Please note that a commercial licence is available for a fee that entitles you to opt out of clauses three (3) and four (4) of this licence conditions terms of use.
5. The end user is in no way entitled to any support other than the freely available documentation.

Conditions
All above license terms are granted subject to:

1. The permission to commercially redistribute the Infinity API is explicitly denied.
2. This unaltered licence document is included by the end user in all copies or substantial portions of the Software.
3. The explicit statement by the end user to subsequent end users that they are subject to this license agreement.
4. The fulfillment of all appropriate caveats in the above license terms.
5. 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 or infringement.
6. 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.
7. In the event of any license terms or conditions being breached by the end user they will no longer be entitled to the free use of Infinity API in any way until explicit notice is given in writing from EXP Digital UK.

Unbinding

1. If you find bugs in the Infinity API please notify us via the support forum available at http://www.support.expdigital.co.uk.
2. If you like Infinity API and find it useful please consider donating towards the future development of Infinity API. You can donate via paypal, using the link on our website.

Plain English (the following is not a legally binding declaration of the license terms)

1. You can use Infinity API and the freely available documentation, you can change it and alter it as you see fit for free.
2. You may distribute Infinity API source code or customised parts of it as long as you credit us in comments in your source code and documentation.
3. You do not have to open source anything you create using Infinity. (i.e. - You can sell a closed source application built using Infinity API)
4. You may distribute anything you've made using Infinity API and charge for it if you wish as long as it includes the Infinity API logo and the statement "Infinity API by EXP Digital". If you need help customising the Infinity logo to suit the colour layout of your application please contact us.
5. Please always be clear to any end users that if they are using bits of Infinity API source code that you distributed to them, they are bound by this license, the only real condition we ask in return is that they use our logo and our company name (EXP Digital).
6. We don't support the infinity API directly for free (you can pay us for support), but we do encourage you to use the provided documentation and the web forum at http://support.expdigital.co.uk
7. You can't just take what we give away and sell it to people for your own profit. Infinity API is freely available, please respect the spirit of open source software.

## Building the documentation

The API is avialable in two version, a large one with the documentation in place and a smaller download without the documentation.
If you downloaded the smaller version, we strongly suggest that you build the documentation.
The API uses the Doxygen documentation system.
To build the docs on windows you will need Doxygen and optionally HTML Help installed. On MacOSX doxygen is all you need. On both platforms, make sure that you have doxygen on your path.
Simply run the doxyfile inside DoxyWizard and the documentation will be build fully. This will generate HTML only on windows, if you want the HTML help you must build the index.hhc file inside the documentation folder, using the free HTML help workshop, linked above.
Once you have built the documentation you can click here to go straight to the documentation. (Or for windows HTML help, click here, NOTE: On mac there is the rather spiffy Chmox A free CHM viewer for mac systems, which lets you also use the HTML help!)

## Project structure

The public Infinity API is based around four core libraries. Each library is responsible for unique aspects of the Infinity API functionality
Structurally the each library in the Infinity API conforms to the following layout:

- Project Name - At the top level is a folder that is named after the project
  - Project - Contains all of the project files
    - Win32 - Contains the windows msvc.net projects
    - MacOSX - Contains the macosx xcode projects (in both PPC and Intel formats)
  - Source - Contains the source files for the project

## Build locations

All libraries build to the common 'Libraries' folder, which should be created for you when you build the first project. Libraries are named thusly on windows and mac:
Windows
Debug - $LIB_NAME'Debug'.lib - eg ECoreDebug.lib
Release = $LIB_NAME'Release'.lib - eg ECoreRelease.lib
Macintosh
Debug - lib$LIB_NAME'Debug'.a - eg libECoreDebug.a
Release = lib$LIB_NAME'Release'.a - eg libECoreRelease.a

## Where to start

The best place is to take a look at the documentation. This includes a simple introduction and information about each of the libraries. The documentation for all libraries is available in one place.
Once you have familiarised yourself with the basic API functions, you should take a look at the Example projects folder. We have included 3 basic projects to get you started. These show two examples of building stand alone applications and one VST plugin example (there are more details about these projects below).

## Third party libraries

At its core level the Infinity API relies on no other projects or libraries, except its own internal libraries (for example, EGUI relies on ECore). However to use the EVST library you must have access to the Steinberg VST SDK.
Due to licencing conditions we are not able to include this with the download. However a project for VST 2.4 has been setup in the "Third Party/Vst_24" folder. Simply drop the SDK source code in to the Source directory and then build the project as normal.

## Project dependancies

It should be noted at this point that if you didnt need a specific part of the API (for example, you didnt want to have VST support), you can simply delete the project folder. However, you must notice the dependancies:

- ECore - Is dependant upon no other projects
- EGUI - Is dependant upon ECore only
- EMusic - Is dependant upon ECore only
- EVst - Is dependant upon ECore and EGUI.

## Example projects

We have provided four basic examples of the Infinity API in action -

- ExpGain - This is a simple gain example of a VST2.4 plugin. It is anologous to the AGain example from the VST SDK. It shows very simply how to setup a VST project using Infinity as well as some basic routines for setting up an interface and base classes.
- ClassWrite - This is a simple application that will correctly write and format class headers and implementation files to ensure they fit the Exponent API format.
- SCal - This is a reworking of our classic SCal application and shows the Exponent API being used to build a standalone application
- MidiViz - The complete source code for the MidiViz Vst plugin. Shows the Exponent API being used to build a Vst plugin

## A word of thanks

We wanted to say thanks to all who download and use the Infinity API. The API is a labour of love for us, and we want to continue to upgrade and improve it! It means a lot that you have faith in us to use the Infinity API. It does however take a lot of time to manage and create the API, so if you find it useful we would ask you to consider making a donation towards any future development. There is no obligation to do so however!
To Infinity and Beyond!
We hope all your projects are succesful,
Exp Digital