Table of callback functions used with BASS_CONFIG_FILEOPENPROCS.
typedef struct { FILECLOSEPROC *close; FILELENPROC *length; FILEREADPROC *read; FILESEEKPROC *seek; FILEOPENPROC *open; } BASS_FILEOPENPROCS;
close | Callback function to close a file. |
length | Callback function to get the length of a file. |
read | Callback function to read from a file. |
seek | Callback function to seek in a file. |
open | Callback function to open a file. |
void CALLBACK MyFileCloseProc(void *user) { fclose(user); // close the file } QWORD CALLBACK MyFileLenProc(void *user) { struct stat s; fstat(fileno(user), &s); return s.st_size; // return the file length } DWORD CALLBACK MyFileReadProc(void *buffer, DWORD length, void *user) { return fread(buffer, 1, length, user); // read from file } BOOL CALLBACK MyFileSeekProc(QWORD offset, void *user) { return !fseek(user, offset, SEEK_SET); // seek to offset } void *CALLBACK MyFileOpenProc(const char *filename, DWORD flags) { FILE *f; #ifdef _WIN32 if (flags & BASS_UNICODE) f = _wfopen((WCHAR*)filename, L"rb"); // open the file (unicode) else #endif f = fopen(filename, "rb"); // open the file if (!f) return (void*)-1; // failed (could return 0 to let BASS try itself) return f; } ... BASS_FILEOPENPROCS fileopenprocs = { MyFileCloseProc, MyFileLenProc, MyFileReadProc, MyFileSeekProc, MyFileOpenProc }; // callback table BASS_SetConfigPtr(BASS_CONFIG_FILEOPENPROCS, &fileopenprocs); // set the callbacks