+static void vfprintf_newline(FILE *stream, char *format, va_list ap)
+{
+ char *newline = STRING_NEWLINE;
+
+ vfprintf(stream, format, ap);
+
+ fprintf(stream, "%s", newline);
+}
+
+static void vprintf_error_ext(char *format, va_list ap, boolean print_newline)
+{
+ FILE *error_file = openErrorFile(); /* this returns at least 'stderr' */
+
+ if (print_newline)
+ vfprintf_newline(error_file, format, ap);
+ else
+ vfprintf(error_file, format, ap);
+
+ if (error_file != stderr) /* do not close stream 'stderr' */
+ fclose(error_file);
+}
+
+static void vprintf_error(char *format, va_list ap)
+{
+ vprintf_error_ext(format, ap, FALSE);
+}
+
+static void vprintf_error_newline(char *format, va_list ap)
+{
+ vprintf_error_ext(format, ap, TRUE);
+}
+
+static void printf_error(char *format, ...)
+{
+ if (format)
+ {
+ va_list ap;
+
+ va_start(ap, format);
+ vprintf_error(format, ap);
+ va_end(ap);
+ }
+}
+
+static void printf_error_newline(char *format, ...)
+{
+ if (format)
+ {
+ va_list ap;
+
+ va_start(ap, format);
+ vprintf_error_newline(format, ap);
+ va_end(ap);
+ }
+}
+
+static void fprintf_newline(FILE *stream, char *format, ...)
+{
+ if (format)
+ {
+ va_list ap;
+
+ va_start(ap, format);
+ vfprintf_newline(stream, format, ap);
+ va_end(ap);
+ }
+}
+
+static char *get_line_string(char *line_chars, int line_length)