'
' ALUT definitions based on libalut 1.1.
'
' Ported to BaCon INCLUDE file by Peter van Eerten - GPL.
'
' Version 1.0: Initial release
' Version 1.1: Adapted for BaCon 3.0 and higher
'
' alut.h
'-----------------------------------------------------------------------------------

TRAP LOCAL
CATCH GOTO alut_handle_error

lib$ = "libalut.so"
seq = -1

LABEL alut_import_retry
    INCR seq
    retry = FALSE
    IMPORT "alutInit(long,long)" FROM lib$ TYPE int
    IF retry THEN GOTO alut_import_retry

GOTO alut_continue

LABEL alut_handle_error
    ERROR = 0
    IF seq IS 0 THEN lib$ = "libalut.so.0"
    ELSE lib$ = CONCAT$(LEFT$(lib$, INSTRREV(lib$, ".")), STR$(seq))
    IF seq < 50 THEN
        retry = TRUE
    ELSE
        PRINT "Alut library not found!"
        END
    END IF
    RESUME

LABEL alut_continue

CATCH RESET

CONST ALUT_API_MAJOR_VERSION = 1
CONST ALUT_API_MINOR_VERSION = 1
CONST ALUT_ERROR_NO_ERROR = 0
CONST ALUT_ERROR_OUT_OF_MEMORY = 0x200
CONST ALUT_ERROR_INVALID_ENUM = 0x201
CONST ALUT_ERROR_INVALID_VALUE = 0x202
CONST ALUT_ERROR_INVALID_OPERATION = 0x203
CONST ALUT_ERROR_NO_CURRENT_CONTEXT = 0x204
CONST ALUT_ERROR_AL_ERROR_ON_ENTRY = 0x205
CONST ALUT_ERROR_ALC_ERROR_ON_ENTRY = 0x206
CONST ALUT_ERROR_OPEN_DEVICE = 0x207
CONST ALUT_ERROR_CLOSE_DEVICE = 0x208
CONST ALUT_ERROR_CREATE_CONTEXT = 0x209
CONST ALUT_ERROR_MAKE_CONTEXT_CURRENT = 0x20A
CONST ALUT_ERROR_DESTROY_CONTEXT = 0x20B
CONST ALUT_ERROR_GEN_BUFFERS = 0x20C
CONST ALUT_ERROR_BUFFER_DATA = 0x20D
CONST ALUT_ERROR_IO_ERROR = 0x20E
CONST ALUT_ERROR_UNSUPPORTED_FILE_TYPE = 0x20F
CONST ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE = 0x210
CONST ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA = 0x211
CONST ALUT_WAVEFORM_SINE = 0x100
CONST ALUT_WAVEFORM_SQUARE = 0x101
CONST ALUT_WAVEFORM_SAWTOOTH = 0x102
CONST ALUT_WAVEFORM_WHITENOISE = 0x103
CONST ALUT_WAVEFORM_IMPULSE = 0x104
CONST ALUT_LOADER_BUFFER = 0x300
CONST ALUT_LOADER_MEMORY = 0x301

IMPORT "alutInitWithoutContext(long,long)" FROM lib$ TYPE int
IMPORT "alutExit(void)" FROM lib$ TYPE int
IMPORT "alutGetError(void)" FROM lib$ TYPE int
IMPORT "alutGetErrorString(int)" FROM lib$ TYPE char* ALIAS alutGetErrorString$
IMPORT "alutCreateBufferFromFile(char*)" FROM lib$ TYPE int
IMPORT "alutCreateBufferFromFileImage(void*,int)" FROM lib$ TYPE int
IMPORT "alutCreateBufferHelloWorld(void)" FROM lib$ TYPE int
IMPORT "alutCreateBufferWaveform(int,float,float,float)" FROM lib$ TYPE int
IMPORT "alutLoadMemoryFromFile(char*,long,long,long)" FROM lib$ TYPE void*
IMPORT "alutLoadMemoryFromFileImage(void*,int,long,long,long)" FROM lib$ TYPE void*
IMPORT "alutLoadMemoryHelloWorld(long,long,long)" FROM lib$ TYPE void*
IMPORT "alutLoadMemoryWaveform(int,float,float,float,long,long,long)" FROM lib$ TYPE void*
IMPORT "alutGetMIMETypes(int)" FROM lib$ TYPE char* ALIAS alutGetMIMETypes$
IMPORT "alutGetMajorVersion(void)" FROM lib$ TYPE int
IMPORT "alutGetMinorVersion (void)" FROM lib$ TYPE int
IMPORT "alutSleep(float)" FROM lib$ TYPE int

' Always initialize ALUT
alutInit(ADDRESS(argc), ADDRESS(argv))

TRAP SYSTEM