+SCM_DEFINE (scm_write_string_partial, "write-string/partial", 1, 3, 0,
+ (SCM str, SCM port_or_fdes, SCM start, SCM end),
+ "Write characters from a string @var{str} to a port or file\n"
+ "descriptor. A port must have an underlying file descriptor\n"
+ "--- a so-called fport. This procedure is\n"
+ "scsh-compatible and can efficiently write large strings.\n"
+ "It will:\n\n"
+ "@itemize\n"
+ "@item\n"
+ "attempt to write the entire string, unless the @var{start}\n"
+ "and/or @var{end} arguments are supplied. i.e., @var{start}\n"
+ "defaults to 0 and @var{end} defaults to\n"
+ "@code{(string-length str)}\n"
+ "@item\n"
+ "use the current output port if @var{port_of_fdes} is not\n"
+ "supplied.\n"
+ "@item\n"
+ "in the case of a buffered port, store the characters in the\n"
+ "port's output buffer, if all will fit. If they will not fit\n"
+ "then any existing buffered characters will be flushed\n"
+ "before attempting\n"
+ "to write the new characters directly to the underlying file\n"
+ "descriptor. If the port is in non-blocking mode and\n"
+ "buffered characters can not be flushed immediately, then an\n"
+ "@code{EAGAIN} system-error exception will be raised (Note:\n"
+ "scsh does not support the use of non-blocking buffered ports.)\n"
+ "@item\n"
+ "write fewer than the requested number of\n"
+ "characters in some cases, e.g., if interrupted by a signal or\n"
+ "if not all of the output can be accepted immediately.\n"
+ "@item\n"
+ "wait indefinitely for at least one character\n"
+ "from @var{str} to be accepted by the port, unless the port is\n"
+ "in non-blocking mode.\n"
+ "@item\n"
+ "return the number of characters accepted by the port.\n"
+ "@item\n"
+ "return 0 if the port is in non-blocking mode and can not accept\n"
+ "at least one character from @var{str} immediately\n"
+ "@item\n"
+ "return 0 immediately if the request size is 0 bytes.\n"
+ "@end itemize")
+#define FUNC_NAME s_scm_write_string_partial