text: #ifndef ALC_CONTEXT_H_
  #define ALC_CONTEXT_H_
  
  #include "altypes.h"
  #include "alctypes.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #define ALC_VERSION_0_1         1
  
  #ifdef _WIN32
   #ifdef _OPENAL32LIB
    #define ALCAPI __declspec(dllexport)
   #else
    #define ALCAPI __declspec(dllimport)
   #endif
  
   typedef struct ALCdevice_struct ALCdevice;
   typedef struct ALCcontext_struct ALCcontext;
  
   #define ALCAPIENTRY __cdecl
  #else
   #ifdef TARGET_OS_MAC
    #if TARGET_OS_MAC
     #pragma export on
    #endif
   #endif
  
   #define ALCAPI
   #define ALCAPIENTRY
  #endif
  
  #ifndef AL_NO_PROTOTYPES
  
  ALCAPI ALCcontext * ALCAPIENTRY alcCreateContext( ALCdevice *dev,
  						ALCint* attrlist );
  
  /**
   * There is no current context, as we can mix
   *  several active contexts. But al* calls
   *  only affect the current context.
   */
  #ifdef LINUX_AL
  /* spec has return value as ALCboolean */
  ALCAPI ALCenum ALCAPIENTRY alcMakeContextCurrent( ALCcontext *alcHandle );
  #else
  ALCAPI ALCboolean ALCAPIENTRY alcMakeContextCurrent(ALCcontext *alcHandle);
  #endif
  
  /**
   * Perform processing on a synced context, non-op on a asynchronous
   * context.
   */
  
  #ifdef LINUX_AL
  /* spec has return value as void */
  ALCAPI ALCcontext * ALCAPIENTRY alcProcessContext( ALCcontext *alcHandle );
  #else
  ALCAPI ALvoid ALCAPIENTRY alcProcessContext(ALCcontext* context);
  #endif
  
  /**
   * Suspend processing on an asynchronous context, non-op on a
   * synced context.
   */
  ALCAPI void ALCAPIENTRY alcSuspendContext( ALCcontext *alcHandle );
  
  #ifdef LINUX_AL
  /* spec has return value as void */
  ALCAPI ALCenum ALCAPIENTRY alcDestroyContext( ALCcontext *alcHandle );
  #else
  ALCAPI ALvoid ALCAPIENTRY alcDestroyContext(ALCcontext* context);
  #endif
  
  ALCAPI ALCenum ALCAPIENTRY alcGetError( ALCdevice *dev );
  
  ALCAPI ALCcontext * ALCAPIENTRY alcGetCurrentContext( ALvoid );
  
  #ifdef LINUX_AL
  ALCAPI ALCdevice * ALCAPIENTRY alcOpenDevice( const ALubyte *tokstr );
  #else
  ALCAPI ALCdevice * ALCAPIENTRY alcOpenDevice( ALubyte *tokstr );
  #endif
  ALCAPI void ALCAPIENTRY alcCloseDevice( ALCdevice *dev );
  
  ALCAPI ALCboolean ALCAPIENTRY alcIsExtensionPresent(ALCdevice *device, ALCubyte *extName);
  ALCAPI ALCvoid  * ALCAPIENTRY alcGetProcAddress(ALCdevice *device, ALCubyte *funcName);
  ALCAPI ALCenum    ALCAPIENTRY alcGetEnumValue(ALCdevice *device, ALCubyte *enumName);
  
  ALCAPI ALCdevice* ALCAPIENTRY alcGetContextsDevice(ALCcontext *context);
  
  
  /**
   * Query functions
   */
  
  #ifdef LINUX_AL
  const ALCubyte * ALCAPIENTRY alcGetString( ALCdevice *deviceHandle, ALCenum token );
  #else
  ALCAPI ALubyte* ALCAPIENTRY alcGetString(ALCdevice* device, ALenum param);
  #endif
  #ifdef LINUX_AL
  ALCAPI void ALCAPIENTRY alcGetIntegerv( ALCdevice *deviceHandle, ALCenum  token , ALCsizei  size , ALCint *dest );
  #else
  ALCAPI ALCvoid ALCAPIENTRY alcGetIntegerv(ALCdevice *device,ALCenum param,ALCsizei size,ALCint *data);
  #endif
  
  #else
        ALCAPI ALCcontext *    ALCAPIENTRY (*alcCreateContext)( ALCdevice *dev, ALCint* attrlist );
  #ifdef LINUX_AL
        ALCAPI ALCenum	     ALCAPIENTRY (*alcMakeContextCurrent)( ALCcontext *alcHandle );
  #else
        ALCAPI ALCboolean      ALCAPIENTRY (*alcMakeContextCurrent)(ALCcontext *context);
  #endif
  #ifdef LINUX_AL
        ALCAPI ALCcontext *    ALCAPIENTRY (*alcProcessContext)( ALCcontext *alcHandle );
  #else
        ALCAPI ALCvoid *       ALCAPIENTRY (*alcProcessContext)( ALCcontext *alcHandle );
  #endif
        ALCAPI void            ALCAPIENTRY (*alcSuspendContext)( ALCcontext *alcHandle );
  #ifdef LINUX_AL
        ALCAPI ALCenum	     ALCAPIENTRY (*alcDestroyContext)( ALCcontext *alcHandle );
  #else
        ALCAPI ALvoid	     ALCAPIENTRY (*alcDestroyContext)( ALCcontext* context );
  #endif
        ALCAPI ALCenum	     ALCAPIENTRY (*alcGetError)( ALCdevice *dev );
        ALCAPI ALCcontext *    ALCAPIENTRY (*alcGetCurrentContext)( ALCvoid );
  #ifdef LINUX_AL
        ALCAPI ALCdevice *     ALCAPIENTRY (*alcOpenDevice)( const ALCubyte *tokstr );
  #else
        ALCAPI ALCdevice *     ALCAPIENTRY (*alcOpenDevice)( ALubyte *tokstr );
  #endif
        ALCAPI void            ALCAPIENTRY (*alcCloseDevice)( ALCdevice *dev );
        ALCAPI ALCboolean      ALCAPIENTRY (*alcIsExtensionPresent)( ALCdevice *device, ALCubyte *extName );
        ALCAPI ALCvoid  *      ALCAPIENTRY (*alcGetProcAddress)(ALCdevice *device, ALCubyte *funcName );
        ALCAPI ALCenum         ALCAPIENTRY (*alcGetEnumValue)(ALCdevice *device, ALCubyte *enumName);
        ALCAPI ALCdevice*      ALCAPIENTRY (*alcGetContextsDevice)(ALCcontext *context);
  #ifdef LINUX_AL
        ALCAPI const ALCubyte* ALCAPIENTRY (*alcGetString)( ALCdevice *deviceHandle, ALCenum token );
  #else
        ALCAPI ALCubyte*       ALCAPIENTRY (*alcGetString)( ALCdevice *deviceHandle, ALCenum token );
  #endif
  #ifdef LINUX_AL
        ALCAPI void            ALCAPIENTRY (*alcGetIntegerv*)( ALCdevice *deviceHandle, ALCenum  token , ALCsizei  size , ALCint *dest );
  #else
        ALCAPI ALCvoid         ALCAPIENTRY (*alcGetIntegerv*)( ALCdevice *deviceHandle, ALCenum  token , ALCsizei  size , ALCint *dest );
  #endif
  
  #endif /* AL_NO_PROTOTYPES */
  
  #ifdef TARGET_OS_MAC
  #if TARGET_OS_MAC
  #pragma export off
  #endif /* TARGET_OS_MAC */
  #endif /* TARGET_OS_MAC */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* ALC_CONTEXT_H_ */
  