/*
 * PortAudio Portable Real-Time Audio Library
 * PortAudio DLL Header File
 * Latest version available at: http://www.audiomulch.com/portaudio/
 *
 * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
 *
 * 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.
 *
 * Any person wishing to distribute modifications to the Software is
 * requested to send the modifications to the original developer so that
 * they can be incorporated into the canonical version.
 *
 * 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.
 *
 */

// changed by zplane.developement in order to generate a DLL

#ifndef __PADLLENTRY_HEADER_INCLUDED__

#define __PADLLENTRY_HEADER_INCLUDED__

typedef int PaError;
typedef enum {
    paNoError = 0,

    paHostError = -10000,
    paInvalidChannelCount,
    paInvalidSampleRate,
    paInvalidDeviceId,
    paInvalidFlag,
    paSampleFormatNotSupported,
    paBadIODeviceCombination,
    paInsufficientMemory,
    paBufferTooBig,
    paBufferTooSmall,
    paNullCallback,
    paBadStreamPtr,
    paTimedOut,
    paInternalError
} PaErrorNum;

typedef unsigned long PaSampleFormat;
#define paFloat32      ((PaSampleFormat) (1<<0)) /*always available*/
#define paInt16        ((PaSampleFormat) (1<<1)) /*always available*/
#define paInt32        ((PaSampleFormat) (1<<2)) /*always available*/
#define paInt24        ((PaSampleFormat) (1<<3))
#define paPackedInt24  ((PaSampleFormat) (1<<4))
#define paInt8         ((PaSampleFormat) (1<<5))
#define paUInt8        ((PaSampleFormat) (1<<6))    /* unsigned 8 bit, 128 is "ground" */
#define paCustomFormat ((PaSampleFormat) (1<<16))


typedef int PaDeviceID;
#define paNoDevice -1

typedef struct
{
    int structVersion;
    const char *name;
    int maxInputChannels;
    int maxOutputChannels;
    /* Number of discrete rates, or -1 if range supported. */
    int numSampleRates;
    /* Array of supported sample rates, or {min,max} if range supported. */
    const double *sampleRates;
    PaSampleFormat nativeSampleFormats;
}
PaDeviceInfo;


typedef double PaTimestamp;


typedef int (PortAudioCallback)(
    void *inputBuffer, void *outputBuffer,
    unsigned long framesPerBuffer,
    PaTimestamp outTime, void *userData );


#define   paNoFlag      (0)
#define   paClipOff     (1<<0)   /* disable default clipping of out of range samples */
#define   paDitherOff   (1<<1)   /* disable default dithering */
#define   paPlatformSpecificFlags (0x00010000)
typedef   unsigned long PaStreamFlags;

typedef void PortAudioStream;
#define PaStream PortAudioStream

extern  PaError (__cdecl* Pa_Initialize)( void );



extern  PaError (__cdecl* Pa_Terminate)( void );


extern  long (__cdecl* Pa_GetHostError)( void );


extern  const char* (__cdecl* Pa_GetErrorText)( PaError );



extern  int (__cdecl* Pa_CountDevices)(void);

extern  PaDeviceID (__cdecl* Pa_GetDefaultInputDeviceID)( void );

extern  PaDeviceID (__cdecl* Pa_GetDefaultOutputDeviceID)( void );


extern  const PaDeviceInfo* (__cdecl* Pa_GetDeviceInfo)( PaDeviceID);



extern  PaError (__cdecl* Pa_OpenStream)(
        PortAudioStream ** ,
        PaDeviceID ,
        int ,
        PaSampleFormat ,
        void *,
        PaDeviceID ,
        int ,
        PaSampleFormat ,
        void *,
        double ,
        unsigned long ,
        unsigned long ,
        unsigned long ,
        PortAudioCallback *,
        void * );



extern  PaError (__cdecl* Pa_OpenDefaultStream)( PortAudioStream** stream,
            int numInputChannels,
            int numOutputChannels,
            PaSampleFormat sampleFormat,
            double sampleRate,
            unsigned long framesPerBuffer,
            unsigned long numberOfBuffers,
            PortAudioCallback *callback,
            void *userData );


extern  PaError (__cdecl* Pa_CloseStream)( PortAudioStream* );


extern  PaError (__cdecl* Pa_StartStream)( PortAudioStream *stream );

extern  PaError (__cdecl* Pa_StopStream)( PortAudioStream *stream );

extern  PaError (__cdecl* Pa_AbortStream)( PortAudioStream *stream );

extern  PaError (__cdecl* Pa_StreamActive)( PortAudioStream *stream );

extern  PaTimestamp (__cdecl* Pa_StreamTime)( PortAudioStream *stream );

extern  double (__cdecl* Pa_GetCPULoad)( PortAudioStream* stream );

extern  int (__cdecl* Pa_GetMinNumBuffers)( int framesPerBuffer, double sampleRate );

extern  void (__cdecl* Pa_Sleep)( long msec );

extern  PaError (__cdecl* Pa_GetSampleSize)( PaSampleFormat format );

#endif // __PADLLENTRY_HEADER_INCLUDED__