int fsetpos(FILE * file, fpos_t * position)
Returns zero if the operation completed successfully, non-zero otherwise.
Changes the current read/write position in the file to the new position, given by position. Not really intended for moving to random positions in a file, unless you've already obtained pointers to those positions previously using fgetpos. For random file seeking, you should use fseek instead.
Note that position is actually a 64-bit pointer, which FilterMeister doesn't yet support. If you need to use this, you should allocate your own memory for the pointer, or use the fact that the k0 & k1 variables are allocated next to each other in memory.
Due to a bug in early versions of FilterMeister, fsetpos was sometimes used in place of fseek for seeking. It isn't recommended to do this, but if you need to use this workaround, here is more information on using fsetpos instead of fseek from the FMML FilterMeister Mailing List:
Where you have: //fsetpos(SETTINGS_FILE, &mybyte); //seek forward 37 bytes you might like to try this instead: k0 = 37; k1 = 0; fsetpos(SETTINGS_FILE, &k0); Why are we doing things this way? It's because fsetpos actually requires a 64-bit integer, but at the moment FilterMeister doesn't support them. So instead, we abuse the fact that the k0 and k1 variables are stored next to each other, and "pretend" they make a 64-bit integer. By giving the address of k0 (using &k0), the function will take the memory address and read enough of memory to make the 64-bit integer.