Relax the parameter checks and have them return F_data_not when length is 0 or string is unavailable.
- Based on existing documentation, it seems this behavior was intended at some point anyway.
- The range is capped to buffer.used now.
The f_print_to* functions are rewritten to print as much of the string in as few calls to write() as possible.
- It is likely possible to utilize more complicated logic to further reduce the calls to write() but this is good enough for now.
- Reducing the calls to write(), in theory, should improve performance.
Add checks to f_print_to* functions to do nothing if the id is -1 (aka: an invalid/closed file descriptor).
Add *_except* print functions to print all characters except those specified in the "except" variable as well as not printing NULLs.