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