"char test0;
....
bm_write(test0,filename,0,16);"
No, bm_read and bm_write take pointers as the first arguement (ie, addresses).
Try bm_write( &test0, filename, 0, 16 );
and bm_read( &test0, filename, 0, 16 );
That's pretty close to what I used as a test, btw.
I dumped the return values, too, and they came out as 32; I didn't bother to see if that
was an error code or not, but since I got the data back (into different variables) I didn't
worry about it.