]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/openal/openal.factor
factor: trim using lists
[factor.git] / extra / openal / openal.factor
index 40593d1e8d7a169c0646d608d8a5e1bcdb9052a3..39ddaf7e4cc83bd5318c7ccc6aa61e6674ad832a 100644 (file)
@@ -1,29 +1,26 @@
 ! Copyright (C) 2007 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel arrays alien system combinators alien.syntax namespaces
-       alien.c-types sequences vocabs.loader shuffle combinators.lib
-       openal.backend specialized-arrays.uint ;
+USING: alien alien.data alien.destructors alien.libraries
+alien.syntax arrays combinators kernel sequences
+specialized-arrays system ;
+FROM: alien.c-types => char double float int short uchar uint
+ushort void ;
+SPECIALIZED-ARRAY: uint
 IN: openal
 
-<< "alut" {
-        { [ os windows? ]  [ "alut.dll" ] }
-        { [ os macosx? ] [
-            "/System/Library/Frameworks/OpenAL.framework/OpenAL"
-        ] }
-        { [ os unix?  ]  [ "libalut.so" ] }
-    } cond "cdecl" add-library >>
-
 << "openal" {
         { [ os windows? ]  [ "OpenAL32.dll" ] }
         { [ os macosx? ] [
             "/System/Library/Frameworks/OpenAL.framework/OpenAL"
         ] }
         { [ os unix?  ]  [ "libopenal.so" ] }
-    } cond "cdecl" add-library >>
+    } cond cdecl add-library >>
+
+<< os unix? [ "openal" deploy-library ] unless >>
 
 LIBRARY: openal
 
-TYPEDEF: char ALboolean 
+TYPEDEF: char ALboolean
 TYPEDEF: char ALchar
 TYPEDEF: char ALbyte
 TYPEDEF: uchar ALubyte
@@ -36,266 +33,248 @@ TYPEDEF: int ALenum
 TYPEDEF: float ALfloat
 TYPEDEF: double ALdouble
 
-: AL_INVALID ( -- number ) -1 ; inline
-: AL_NONE ( -- number ) 0 ; inline
-: AL_FALSE ( -- number ) 0 ; inline
-: AL_TRUE ( -- number ) 1 ; inline
-: AL_SOURCE_RELATIVE ( -- number ) HEX: 202 ; inline
-: AL_CONE_INNER_ANGLE ( -- nmber ) HEX: 1001 ; inline
-: AL_CONE_OUTER_ANGLE ( -- number ) HEX: 1002 ; inline
-: AL_PITCH ( -- number ) HEX: 1003 ; inline
-: AL_POSITION ( -- number ) HEX: 1004 ; inline
-: AL_DIRECTION ( -- number ) HEX: 1005 ; inline
-: AL_VELOCITY ( -- number ) HEX: 1006 ; inline
-: AL_LOOPING ( -- number ) HEX: 1007 ; inline
-: AL_BUFFER ( -- number ) HEX: 1009 ; inline
-: AL_GAIN ( -- number ) HEX: 100A ; inline
-: AL_MIN_GAIN ( -- number ) HEX: 100D ; inline
-: AL_MAX_GAIN ( -- number ) HEX: 100E ; inline
-: AL_ORIENTATION ( -- number ) HEX: 100F ; inline
-: AL_CHANNEL_MASK ( -- number ) HEX: 3000 ; inline
-: AL_SOURCE_STATE ( -- number ) HEX: 1010 ; inline
-: AL_INITIAL ( -- number ) HEX: 1011 ; inline
-: AL_PLAYING ( -- number ) HEX: 1012 ; inline
-: AL_PAUSED ( -- number ) HEX: 1013 ; inline
-: AL_STOPPED ( -- number ) HEX: 1014 ; inline
-: AL_BUFFERS_QUEUED ( -- number ) HEX: 1015 ; inline
-: AL_BUFFERS_PROCESSED ( -- number ) HEX: 1016 ; inline
-: AL_SEC_OFFSET ( -- number ) HEX: 1024 ; inline
-: AL_SAMPLE_OFFSET ( -- number ) HEX: 1025 ; inline
-: AL_BYTE_OFFSET ( -- number ) HEX: 1026 ; inline
-: AL_SOURCE_TYPE ( -- number ) HEX: 1027 ; inline
-: AL_STATIC ( -- number ) HEX: 1028 ; inline
-: AL_STREAMING ( -- number ) HEX: 1029 ; inline
-: AL_UNDETERMINED ( -- number ) HEX: 1030 ; inline
-: AL_FORMAT_MONO8 ( -- number ) HEX: 1100 ; inline
-: AL_FORMAT_MONO16 ( -- number ) HEX: 1101 ; inline
-: AL_FORMAT_STEREO8 ( -- number ) HEX: 1102 ; inline
-: AL_FORMAT_STEREO16 ( -- number ) HEX: 1103 ; inline
-: AL_REFERENCE_DISTANCE ( -- number ) HEX: 1020 ; inline
-: AL_ROLLOFF_FACTOR ( -- number ) HEX: 1021 ; inline
-: AL_CONE_OUTER_GAIN ( -- number ) HEX: 1022 ; inline
-: AL_MAX_DISTANCE ( -- number ) HEX: 1023 ; inline
-: AL_FREQUENCY ( -- number ) HEX: 2001 ; inline
-: AL_BITS ( -- number ) HEX: 2002 ; inline
-: AL_CHANNELS ( -- number ) HEX: 2003 ; inline
-: AL_SIZE ( -- number ) HEX: 2004 ; inline
-: AL_UNUSED ( -- number ) HEX: 2010 ; inline
-: AL_PENDING ( -- number ) HEX: 2011 ; inline
-: AL_PROCESSED ( -- number ) HEX: 2012 ; inline
-: AL_NO_ERROR ( -- number ) AL_FALSE ; inline
-: AL_INVALID_NAME ( -- number ) HEX: A001 ; inline
-: AL_ILLEGAL_ENUM ( -- number ) HEX: A002 ; inline
-: AL_INVALID_ENUM ( -- number ) HEX: A002 ; inline
-: AL_INVALID_VALUE ( -- number ) HEX: A003 ; inline
-: AL_ILLEGAL_COMMAND ( -- number ) HEX: A004 ; inline
-: AL_INVALID_OPERATION ( -- number ) HEX: A004 ; inline
-: AL_OUT_OF_MEMORY ( -- number ) HEX: A005 ; inline
-: AL_VENDOR ( -- number ) HEX: B001 ; inline
-: AL_VERSION ( -- number ) HEX: B002 ; inline
-: AL_RENDERER ( -- number ) HEX: B003 ; inline
-: AL_EXTENSIONS ( -- number ) HEX: B004 ; inline
-: AL_DOPPLER_FACTOR ( -- number ) HEX: C000 ; inline
-: AL_DOPPLER_VELOCITY ( -- number ) HEX: C001 ; inline
-: AL_SPEED_OF_SOUND ( -- number ) HEX: C003 ; inline
-: AL_DISTANCE_MODEL ( -- number ) HEX: D000 ; inline
-: AL_INVERSE_DISTANCE ( -- number ) HEX: D001 ; inline
-: AL_INVERSE_DISTANCE_CLAMPED ( -- number ) HEX: D002 ; inline
-: AL_LINEAR_DISTANCE ( -- number ) HEX: D003 ; inline
-: AL_LINEAR_DISTANCE_CLAMPED ( -- number ) HEX: D004 ; inline
-: AL_EXPONENT_DISTANCE ( -- number ) HEX: D005 ; inline
-: AL_EXPONENT_DISTANCE_CLAMPED ( -- number ) HEX: D006 ; inline
+CONSTANT: AL_INVALID -1
+CONSTANT: AL_NONE 0
+CONSTANT: AL_FALSE 0
+CONSTANT: AL_TRUE 1
+CONSTANT: AL_SOURCE_RELATIVE 0x202
+CONSTANT: AL_CONE_INNER_ANGLE 0x1001
+CONSTANT: AL_CONE_OUTER_ANGLE 0x1002
+CONSTANT: AL_PITCH 0x1003
+CONSTANT: AL_POSITION 0x1004
+CONSTANT: AL_DIRECTION 0x1005
+CONSTANT: AL_VELOCITY 0x1006
+CONSTANT: AL_LOOPING 0x1007
+CONSTANT: AL_BUFFER 0x1009
+CONSTANT: AL_GAIN 0x100A
+CONSTANT: AL_MIN_GAIN 0x100D
+CONSTANT: AL_MAX_GAIN 0x100E
+CONSTANT: AL_ORIENTATION 0x100F
+CONSTANT: AL_CHANNEL_MASK 0x3000
+CONSTANT: AL_SOURCE_STATE 0x1010
+CONSTANT: AL_INITIAL 0x1011
+CONSTANT: AL_PLAYING 0x1012
+CONSTANT: AL_PAUSED 0x1013
+CONSTANT: AL_STOPPED 0x1014
+CONSTANT: AL_BUFFERS_QUEUED 0x1015
+CONSTANT: AL_BUFFERS_PROCESSED 0x1016
+CONSTANT: AL_SEC_OFFSET 0x1024
+CONSTANT: AL_SAMPLE_OFFSET 0x1025
+CONSTANT: AL_BYTE_OFFSET 0x1026
+CONSTANT: AL_SOURCE_TYPE 0x1027
+CONSTANT: AL_STATIC 0x1028
+CONSTANT: AL_STREAMING 0x1029
+CONSTANT: AL_UNDETERMINED 0x1030
+CONSTANT: AL_FORMAT_MONO8 0x1100
+CONSTANT: AL_FORMAT_MONO16 0x1101
+CONSTANT: AL_FORMAT_STEREO8 0x1102
+CONSTANT: AL_FORMAT_STEREO16 0x1103
+CONSTANT: AL_REFERENCE_DISTANCE 0x1020
+CONSTANT: AL_ROLLOFF_FACTOR 0x1021
+CONSTANT: AL_CONE_OUTER_GAIN 0x1022
+CONSTANT: AL_MAX_DISTANCE 0x1023
+CONSTANT: AL_FREQUENCY 0x2001
+CONSTANT: AL_BITS 0x2002
+CONSTANT: AL_CHANNELS 0x2003
+CONSTANT: AL_SIZE 0x2004
+CONSTANT: AL_UNUSED 0x2010
+CONSTANT: AL_PENDING 0x2011
+CONSTANT: AL_PROCESSED 0x2012
+CONSTANT: AL_NO_ERROR AL_FALSE
+CONSTANT: AL_INVALID_NAME 0xA001
+CONSTANT: AL_ILLEGAL_ENUM 0xA002
+CONSTANT: AL_INVALID_ENUM 0xA002
+CONSTANT: AL_INVALID_VALUE 0xA003
+CONSTANT: AL_ILLEGAL_COMMAND 0xA004
+CONSTANT: AL_INVALID_OPERATION 0xA004
+CONSTANT: AL_OUT_OF_MEMORY 0xA005
+CONSTANT: AL_VENDOR 0xB001
+CONSTANT: AL_VERSION 0xB002
+CONSTANT: AL_RENDERER 0xB003
+CONSTANT: AL_EXTENSIONS 0xB004
+CONSTANT: AL_DOPPLER_FACTOR 0xC000
+CONSTANT: AL_DOPPLER_VELOCITY 0xC001
+CONSTANT: AL_SPEED_OF_SOUND 0xC003
+CONSTANT: AL_DISTANCE_MODEL 0xD000
+CONSTANT: AL_INVERSE_DISTANCE 0xD001
+CONSTANT: AL_INVERSE_DISTANCE_CLAMPED 0xD002
+CONSTANT: AL_LINEAR_DISTANCE 0xD003
+CONSTANT: AL_LINEAR_DISTANCE_CLAMPED 0xD004
+CONSTANT: AL_EXPONENT_DISTANCE 0xD005
+CONSTANT: AL_EXPONENT_DISTANCE_CLAMPED 0xD006
 
-FUNCTION: void alEnable ( ALenum capability ) ;
-FUNCTION: void alDisable ( ALenum capability ) ; 
-FUNCTION: ALboolean alIsEnabled ( ALenum capability ) ; 
-FUNCTION: ALchar* alGetString ( ALenum param ) ;
-FUNCTION: void alGetBooleanv ( ALenum param, ALboolean* data ) ;
-FUNCTION: void alGetIntegerv ( ALenum param, ALint* data ) ;
-FUNCTION: void alGetFloatv ( ALenum param, ALfloat* data ) ;
-FUNCTION: void alGetDoublev ( ALenum param, ALdouble* data ) ;
-FUNCTION: ALboolean alGetBoolean ( ALenum param ) ;
-FUNCTION: ALint alGetInteger ( ALenum param ) ;
-FUNCTION: ALfloat alGetFloat ( ALenum param ) ;
-FUNCTION: ALdouble alGetDouble ( ALenum param ) ;
-FUNCTION: ALenum alGetError (  ) ;
-FUNCTION: ALboolean alIsExtensionPresent ( ALchar* extname ) ;
-FUNCTION: void* alGetProcAddress ( ALchar* fname ) ;
-FUNCTION: ALenum alGetEnumValue ( ALchar* ename ) ;
-FUNCTION: void alListenerf ( ALenum param, ALfloat value ) ;
-FUNCTION: void alListener3f ( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ) ;
-FUNCTION: void alListenerfv ( ALenum param, ALfloat* values ) ; 
-FUNCTION: void alListeneri ( ALenum param, ALint value ) ;
-FUNCTION: void alListener3i ( ALenum param, ALint value1, ALint value2, ALint value3 ) ;
-FUNCTION: void alListeneriv ( ALenum param, ALint* values ) ;
-FUNCTION: void alGetListenerf ( ALenum param, ALfloat* value ) ;
-FUNCTION: void alGetListener3f ( ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3 ) ;
-FUNCTION: void alGetListenerfv ( ALenum param, ALfloat* values ) ;
-FUNCTION: void alGetListeneri ( ALenum param, ALint* value ) ;
-FUNCTION: void alGetListener3i ( ALenum param, ALint* value1, ALint* value2, ALint* value3 ) ;
-FUNCTION: void alGetListeneriv ( ALenum param, ALint* values ) ;
-FUNCTION: void alGenSources ( ALsizei n, ALuint* sources ) ; 
-FUNCTION: void alDeleteSources ( ALsizei n, ALuint* sources ) ;
-FUNCTION: ALboolean alIsSource ( ALuint sid ) ; 
-FUNCTION: void alSourcef ( ALuint sid, ALenum param, ALfloat value ) ; 
-FUNCTION: void alSource3f ( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ) ;
-FUNCTION: void alSourcefv ( ALuint sid, ALenum param, ALfloat* values ) ; 
-FUNCTION: void alSourcei ( ALuint sid, ALenum param, ALint value ) ; 
-FUNCTION: void alSource3i ( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ) ;
-FUNCTION: void alSourceiv ( ALuint sid, ALenum param, ALint* values ) ;
-FUNCTION: void alGetSourcef ( ALuint sid, ALenum param, ALfloat* value ) ;
-FUNCTION: void alGetSource3f ( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3) ;
-FUNCTION: void alGetSourcefv ( ALuint sid, ALenum param, ALfloat* values ) ;
-FUNCTION: void alGetSourcei ( ALuint sid,  ALenum param, ALint* value ) ;
-FUNCTION: void alGetSource3i ( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3) ;
-FUNCTION: void alGetSourceiv ( ALuint sid,  ALenum param, ALint* values ) ;
-FUNCTION: void alSourcePlayv ( ALsizei ns, ALuint* sids ) ;
-FUNCTION: void alSourceStopv ( ALsizei ns, ALuint* sids ) ;
-FUNCTION: void alSourceRewindv ( ALsizei ns, ALuint* sids ) ;
-FUNCTION: void alSourcePausev ( ALsizei ns, ALuint* sids ) ;
-FUNCTION: void alSourcePlay ( ALuint sid ) ;
-FUNCTION: void alSourceStop ( ALuint sid ) ;
-FUNCTION: void alSourceRewind ( ALuint sid ) ;
-FUNCTION: void alSourcePause ( ALuint sid ) ;
-FUNCTION: void alSourceQueueBuffers ( ALuint sid, ALsizei numEntries, ALuint* bids ) ;
-FUNCTION: void alSourceUnqueueBuffers ( ALuint sid, ALsizei numEntries, ALuint* bids ) ;
-FUNCTION: void alGenBuffers ( ALsizei n, ALuint* buffers ) ;
-FUNCTION: void alDeleteBuffers ( ALsizei n, ALuint* buffers ) ;
-FUNCTION: ALboolean alIsBuffer ( ALuint bid ) ;
-FUNCTION: void alBufferData ( ALuint bid, ALenum format, void* data, ALsizei size, ALsizei freq ) ;
-FUNCTION: void alBufferf ( ALuint bid, ALenum param, ALfloat value ) ;
-FUNCTION: void alBuffer3f ( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ) ;
-FUNCTION: void alBufferfv ( ALuint bid, ALenum param, ALfloat* values ) ;
-FUNCTION: void alBufferi ( ALuint bid, ALenum param, ALint value ) ;
-FUNCTION: void alBuffer3i ( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ) ;
-FUNCTION: void alBufferiv ( ALuint bid, ALenum param, ALint* values ) ;
-FUNCTION: void alGetBufferf ( ALuint bid, ALenum param, ALfloat* value ) ;
-FUNCTION: void alGetBuffer3f ( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3) ;
-FUNCTION: void alGetBufferfv ( ALuint bid, ALenum param, ALfloat* values ) ;
-FUNCTION: void alGetBufferi ( ALuint bid, ALenum param, ALint* value ) ;
-FUNCTION: void alGetBuffer3i ( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3) ;
-FUNCTION: void alGetBufferiv ( ALuint bid, ALenum param, ALint* values ) ;
-FUNCTION: void alDopplerFactor ( ALfloat value ) ;
-FUNCTION: void alDopplerVelocity ( ALfloat value ) ;
-FUNCTION: void alSpeedOfSound ( ALfloat value ) ;
-FUNCTION: void alDistanceModel ( ALenum distanceModel ) ;
+FUNCTION: void alEnable ( ALenum capability )
+FUNCTION: void alDisable ( ALenum capability )
+FUNCTION: ALboolean alIsEnabled ( ALenum capability )
+FUNCTION: ALchar* alGetString ( ALenum param )
+FUNCTION: void alGetBooleanv ( ALenum param, ALboolean* data )
+FUNCTION: void alGetIntegerv ( ALenum param, ALint* data )
+FUNCTION: void alGetFloatv ( ALenum param, ALfloat* data )
+FUNCTION: void alGetDoublev ( ALenum param, ALdouble* data )
+FUNCTION: ALboolean alGetBoolean ( ALenum param )
+FUNCTION: ALint alGetInteger ( ALenum param )
+FUNCTION: ALfloat alGetFloat ( ALenum param )
+FUNCTION: ALdouble alGetDouble ( ALenum param )
+FUNCTION: ALenum alGetError (  )
+FUNCTION: ALboolean alIsExtensionPresent ( ALchar* extname )
+FUNCTION: void* alGetProcAddress ( ALchar* fname )
+FUNCTION: ALenum alGetEnumValue ( ALchar* ename )
+FUNCTION: void alListenerf ( ALenum param, ALfloat value )
+FUNCTION: void alListener3f ( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 )
+FUNCTION: void alListenerfv ( ALenum param, ALfloat* values )
+FUNCTION: void alListeneri ( ALenum param, ALint value )
+FUNCTION: void alListener3i ( ALenum param, ALint value1, ALint value2, ALint value3 )
+FUNCTION: void alListeneriv ( ALenum param, ALint* values )
+FUNCTION: void alGetListenerf ( ALenum param, ALfloat* value )
+FUNCTION: void alGetListener3f ( ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3 )
+FUNCTION: void alGetListenerfv ( ALenum param, ALfloat* values )
+FUNCTION: void alGetListeneri ( ALenum param, ALint* value )
+FUNCTION: void alGetListener3i ( ALenum param, ALint* value1, ALint* value2, ALint* value3 )
+FUNCTION: void alGetListeneriv ( ALenum param, ALint* values )
+FUNCTION: void alGenSources ( ALsizei n, ALuint* sources )
+FUNCTION: void alDeleteSources ( ALsizei n, ALuint* sources )
+FUNCTION: ALboolean alIsSource ( ALuint sid )
+FUNCTION: void alSourcef ( ALuint sid, ALenum param, ALfloat value )
+FUNCTION: void alSource3f ( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 )
+FUNCTION: void alSourcefv ( ALuint sid, ALenum param, ALfloat* values )
+FUNCTION: void alSourcei ( ALuint sid, ALenum param, ALint value )
+FUNCTION: void alSource3i ( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 )
+FUNCTION: void alSourceiv ( ALuint sid, ALenum param, ALint* values )
+FUNCTION: void alGetSourcef ( ALuint sid, ALenum param, ALfloat* value )
+FUNCTION: void alGetSource3f ( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3 )
+FUNCTION: void alGetSourcefv ( ALuint sid, ALenum param, ALfloat* values )
+FUNCTION: void alGetSourcei ( ALuint sid,  ALenum param, ALint* value )
+FUNCTION: void alGetSource3i ( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3 )
+FUNCTION: void alGetSourceiv ( ALuint sid,  ALenum param, ALint* values )
+FUNCTION: void alSourcePlayv ( ALsizei ns, ALuint* sids )
+FUNCTION: void alSourceStopv ( ALsizei ns, ALuint* sids )
+FUNCTION: void alSourceRewindv ( ALsizei ns, ALuint* sids )
+FUNCTION: void alSourcePausev ( ALsizei ns, ALuint* sids )
+FUNCTION: void alSourcePlay ( ALuint sid )
+FUNCTION: void alSourceStop ( ALuint sid )
+FUNCTION: void alSourceRewind ( ALuint sid )
+FUNCTION: void alSourcePause ( ALuint sid )
+FUNCTION: void alSourceQueueBuffers ( ALuint sid, ALsizei numEntries, ALuint* bids )
+FUNCTION: void alSourceUnqueueBuffers ( ALuint sid, ALsizei numEntries, ALuint* bids )
+FUNCTION: void alGenBuffers ( ALsizei n, ALuint* buffers )
+FUNCTION: void alDeleteBuffers ( ALsizei n, ALuint* buffers )
+FUNCTION: ALboolean alIsBuffer ( ALuint bid )
+FUNCTION: void alBufferData ( ALuint bid, ALenum format, void* data, ALsizei size, ALsizei freq )
+FUNCTION: void alBufferf ( ALuint bid, ALenum param, ALfloat value )
+FUNCTION: void alBuffer3f ( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 )
+FUNCTION: void alBufferfv ( ALuint bid, ALenum param, ALfloat* values )
+FUNCTION: void alBufferi ( ALuint bid, ALenum param, ALint value )
+FUNCTION: void alBuffer3i ( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 )
+FUNCTION: void alBufferiv ( ALuint bid, ALenum param, ALint* values )
+FUNCTION: void alGetBufferf ( ALuint bid, ALenum param, ALfloat* value )
+FUNCTION: void alGetBuffer3f ( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3 )
+FUNCTION: void alGetBufferfv ( ALuint bid, ALenum param, ALfloat* values )
+FUNCTION: void alGetBufferi ( ALuint bid, ALenum param, ALint* value )
+FUNCTION: void alGetBuffer3i ( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3 )
+FUNCTION: void alGetBufferiv ( ALuint bid, ALenum param, ALint* values )
+FUNCTION: void alDopplerFactor ( ALfloat value )
+FUNCTION: void alDopplerVelocity ( ALfloat value )
+FUNCTION: void alSpeedOfSound ( ALfloat value )
+FUNCTION: void alDistanceModel ( ALenum distanceModel )
 
-LIBRARY: alut
+C-TYPE: ALCdevice
+C-TYPE: ALCcontext
+TYPEDEF: char ALCboolean
+TYPEDEF: char ALCchar
+TYPEDEF: int ALCenum
+TYPEDEF: int ALCint
+TYPEDEF: int ALCsizei
+TYPEDEF: uint ALCuint
 
-: ALUT_API_MAJOR_VERSION ( -- number ) 1 ; inline
-: ALUT_API_MINOR_VERSION ( -- number ) 1 ; inline
-: ALUT_ERROR_NO_ERROR ( -- number ) 0 ; inline
-: ALUT_ERROR_OUT_OF_MEMORY ( -- number ) HEX: 200 ; inline
-: ALUT_ERROR_INVALID_ENUM ( -- number ) HEX: 201 ; inline
-: ALUT_ERROR_INVALID_VALUE ( -- number ) HEX: 202 ; inline
-: ALUT_ERROR_INVALID_OPERATION ( -- number ) HEX: 203 ; inline
-: ALUT_ERROR_NO_CURRENT_CONTEXT ( -- number ) HEX: 204 ; inline
-: ALUT_ERROR_AL_ERROR_ON_ENTRY ( -- number ) HEX: 205 ; inline
-: ALUT_ERROR_ALC_ERROR_ON_ENTRY ( -- number ) HEX: 206 ; inline
-: ALUT_ERROR_OPEN_DEVICE ( -- number ) HEX: 207 ; inline
-: ALUT_ERROR_CLOSE_DEVICE ( -- number ) HEX: 208 ; inline
-: ALUT_ERROR_CREATE_CONTEXT ( -- number ) HEX: 209 ; inline
-: ALUT_ERROR_MAKE_CONTEXT_CURRENT ( -- number ) HEX: 20A ; inline
-: ALUT_ERROR_DESTRY_CONTEXT ( -- number ) HEX: 20B ; inline
-: ALUT_ERROR_GEN_BUFFERS ( -- number ) HEX: 20C ; inline
-: ALUT_ERROR_BUFFER_DATA ( -- number ) HEX: 20D ; inline
-: ALUT_ERROR_IO_ERROR ( -- number ) HEX: 20E ; inline
-: ALUT_ERROR_UNSUPPORTED_FILE_TYPE ( -- number ) HEX: 20F ; inline
-: ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE ( -- number ) HEX: 210 ; inline
-: ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA ( -- number ) HEX: 211 ; inline
-: ALUT_WAVEFORM_SINE ( -- number ) HEX: 100 ; inline
-: ALUT_WAVEFORM_SQUARE ( -- number ) HEX: 101 ; inline
-: ALUT_WAVEFORM_SAWTOOTH ( -- number ) HEX: 102 ; inline
-: ALUT_WAVEFORM_WHITENOISE ( -- number ) HEX: 103 ; inline
-: ALUT_WAVEFORM_IMPULSE ( -- number ) HEX: 104 ; inline
-: ALUT_LOADER_BUFFER ( -- number ) HEX: 300 ; inline
-: ALUT_LOADER_MEMORY ( -- number ) HEX: 301 ; inline
+CONSTANT: ALC_FALSE                                0
+CONSTANT: ALC_TRUE                                 1
+CONSTANT: ALC_FREQUENCY                            0x1007
+CONSTANT: ALC_REFRESH                              0x1008
+CONSTANT: ALC_SYNC                                 0x1009
+CONSTANT: ALC_MONO_SOURCES                         0x1010
+CONSTANT: ALC_STEREO_SOURCES                       0x1011
 
-FUNCTION: ALboolean alutInit ( int* argcp, char** argv ) ;
-FUNCTION: ALboolean alutInitWithoutContext ( int* argcp, char** argv ) ;
-FUNCTION: ALboolean alutExit ( ) ;
-FUNCTION: ALenum alutGetError ( ) ;
-FUNCTION: char* alutGetErrorString ( ALenum error ) ;
-FUNCTION: ALuint alutCreateBufferFromFile ( char* fileName ) ;
-FUNCTION: ALuint alutCreateBufferFromFileImage ( void* data, ALsizei length ) ;
-FUNCTION: ALuint alutCreateBufferHelloWorld ( ) ;
-FUNCTION: ALuint alutCreateBufferWaveform ( ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration ) ;
-FUNCTION: void* alutLoadMemoryFromFile ( char* fileName, ALenum* format, ALsizei* size, ALfloat* frequency ) ;
-FUNCTION: void* alutLoadMemoryFromFileImage ( void* data, ALsizei length, ALenum* format, ALsizei* size, ALfloat* frequency ) ;
-FUNCTION: void* alutLoadMemoryHelloWorld ( ALenum* format, ALsizei* size, ALfloat* frequency ) ;
-FUNCTION: void* alutLoadMemoryWaveform ( ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration, ALenum* format, ALsizei* size, ALfloat* freq ) ;
-FUNCTION: char* alutGetMIMETypes ( ALenum loader ) ;
-FUNCTION: ALint alutGetMajorVersion ( ) ;
-FUNCTION: ALint alutGetMinorVersion ( ) ;
-FUNCTION: ALboolean alutSleep ( ALfloat duration ) ;
+CONSTANT: ALC_NO_ERROR                             0
 
-FUNCTION: void alutUnloadWAV ( ALenum format, void* data, ALsizei size, ALsizei frequency ) ;
+CONSTANT: ALC_INVALID_DEVICE                       0xA001
+CONSTANT: ALC_INVALID_CONTEXT                      0xA002
+CONSTANT: ALC_INVALID_ENUM                         0xA003
+CONSTANT: ALC_INVALID_VALUE                        0xA004
+CONSTANT: ALC_OUT_OF_MEMORY                        0xA005
 
-SYMBOL: init
+CONSTANT: ALC_DEFAULT_DEVICE_SPECIFIER             0x1004
+CONSTANT: ALC_DEVICE_SPECIFIER                     0x1005
+CONSTANT: ALC_EXTENSIONS                           0x1006
 
-: init-openal ( -- )
-  init get-global expired? [
-    f f alutInit 0 = [ "Could not initialize OpenAL" throw ] when
-    1337 <alien> init set-global
-  ] when ;
+CONSTANT: ALC_MAJOR_VERSION                        0x1000
+CONSTANT: ALC_MINOR_VERSION                        0x1001
 
-: exit-openal ( -- )
-  init get-global expired? [
-    alutExit 0 = [ "Could not close OpenAL" throw ] when
-    f init set-global
-  ] unless ;
+CONSTANT: ALC_ATTRIBUTES_SIZE                      0x1002
+CONSTANT: ALC_ALL_ATTRIBUTES                       0x1003
+CONSTANT: ALC_DEFAULT_ALL_DEVICES_SPECIFIER        0x1012
+CONSTANT: ALC_ALL_DEVICES_SPECIFIER                0x1013
+CONSTANT: ALC_CAPTURE_DEVICE_SPECIFIER             0x310
+CONSTANT: ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER     0x311
+CONSTANT: ALC_CAPTURE_SAMPLES                      0x312
 
-: <uint-array> ( n -- byte-array ) "ALuint" <c-array> ;
+FUNCTION: ALCdevice* alcOpenDevice ( ALCchar* deviceSpecifier )
+FUNCTION: ALCboolean alcCloseDevice ( ALCdevice* deviceHandle )
 
-: gen-sources ( size -- seq )
-  dup <uint-array> 2dup underlying>> alGenSources swap ;
+: alcCloseDevice* ( deviceHandle -- )
+    alcCloseDevice drop ;
 
-: gen-buffers ( size -- seq )
-  dup <uint-array> 2dup underlying>> alGenBuffers swap ;
+FUNCTION: ALCcontext* alcCreateContext ( ALCdevice* deviceHandle, ALCint* attrList )
+FUNCTION: ALCboolean alcMakeContextCurrent ( ALCcontext* context )
+FUNCTION: void alcProcessContext ( ALCcontext* context )
+FUNCTION: void alcSuspendContext ( ALCcontext* context )
+FUNCTION: void alcDestroyContext ( ALCcontext* context )
+FUNCTION: ALCcontext* alcGetCurrentContext ( )
+FUNCTION: ALCdevice* alcGetContextsDevice ( ALCcontext* context )
+FUNCTION: ALCboolean alcIsExtensionPresent ( ALCdevice* deviceHandle, ALCchar* extName )
+FUNCTION: void* alcGetProcAddress ( ALCdevice* deviceHandle, ALCchar* funcName )
+FUNCTION: ALCenum alcGetEnumValue ( ALCdevice* deviceHandle, ALCchar* enumName )
+FUNCTION: ALCenum alcGetError ( ALCdevice* deviceHandle )
+FUNCTION: ALCchar* alcGetString ( ALCdevice* deviceHandle, ALCenum token )
+FUNCTION: void alcGetIntegerv ( ALCdevice* deviceHandle, ALCenum token, ALCsizei size, ALCint* dest )
 
-: gen-buffer ( -- buffer ) 1 gen-buffers first ;
+FUNCTION: ALCdevice* alcCaptureOpenDevice ( ALCchar* deviceName, ALCuint freq, ALCenum fmt, ALCsizei bufsize )
+FUNCTION: ALCboolean alcCaptureCloseDevice ( ALCdevice* device )
+FUNCTION: void alcCaptureStart ( ALCdevice* device )
+FUNCTION: void alcCaptureStop ( ALCdevice* device )
+FUNCTION: void alcCaptureSamples ( ALCdevice* device, void* buf, ALCsizei samps )
+
+DESTRUCTOR: alcCloseDevice*
+DESTRUCTOR: alcDestroyContext
 
-: create-buffer-from-file ( filename -- buffer )
-  alutCreateBufferFromFile dup AL_NONE = [
-    "create-buffer-from-file failed" throw
-  ] when ;
+: gen-sources ( size -- seq )
+    dup uint <c-array> [ alGenSources ] keep ;
 
-os macosx? "openal.macosx" "openal.other" ? require
+: gen-buffers ( size -- seq )
+    dup uint <c-array> [ alGenBuffers ] keep ;
 
-: create-buffer-from-wav ( filename -- buffer )
-  gen-buffer dup rot load-wav-file
-  [ alBufferData ] 4keep alutUnloadWAV ;
+: gen-buffer ( -- buffer ) 1 gen-buffers first ;
 
 : queue-buffers ( source buffers -- )
-    [ length ] [ >uint-array underlying>> ] bi alSourceQueueBuffers ;
+    [ length ] [ uint >c-array ] bi alSourceQueueBuffers ;
 
 : queue-buffer ( source buffer -- )
     1array queue-buffers ;
 
 : set-source-param ( source param value -- )
-  alSourcei ;
+    alSourcei ;
 
 : get-source-param ( source param -- value )
-  0 <uint> dup >r alGetSourcei r> *uint ;
+    0 uint <ref> dup [ alGetSourcei ] dip uint deref ;
 
 : set-buffer-param ( source param value -- )
-  alBufferi ;
+    alBufferi ;
 
 : get-buffer-param ( source param -- value )
-  0 <uint> dup >r alGetBufferi r> *uint ;
-
-: source-play ( source -- )
-  alSourcePlay ;
+    0 uint <ref> dup [ alGetBufferi ] dip uint deref ;
 
-: source-stop ( source -- )
-  alSourceStop ;
+: source-play ( source -- ) alSourcePlay ;
 
-: check-error ( -- )
-  alGetError dup ALUT_ERROR_NO_ERROR = [
-    drop
-  ] [
-    alGetString throw
-  ] if ;
+: source-stop ( source -- ) alSourceStop ;
 
 : source-playing? ( source -- bool )
-  AL_SOURCE_STATE get-source-param AL_PLAYING = ;
+    AL_SOURCE_STATE get-source-param AL_PLAYING = ;