comparison src/print.c @ 867:804517e16990

[xemacs-hg @ 2002-06-05 09:54:39 by ben] Textual renaming: text/char names abbrev.c, alloc.c, buffer.c, buffer.h, bytecode.c, callint.c, casefiddle.c, casetab.c, charset.h, chartab.c, chartab.h, cmds.c, console-gtk.h, console-msw.c, console-msw.h, console-stream.c, console-tty.c, console-x.c, console-x.h, console.h, data.c, device-msw.c, device-x.c, dialog-msw.c, dired-msw.c, dired.c, doc.c, doprnt.c, editfns.c, eldap.c, emodules.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-unixoid.c, events.c, events.h, file-coding.c, file-coding.h, fileio.c, filelock.c, fns.c, font-lock.c, frame-gtk.c, frame-msw.c, frame-x.c, frame.c, glyphs-eimage.c, glyphs-msw.c, glyphs-x.c, glyphs.c, glyphs.h, gpmevent.c, gui-x.c, gui-x.h, gui.c, gui.h, hpplay.c, indent.c, insdel.c, insdel.h, intl-win32.c, keymap.c, line-number.c, line-number.h, lisp-disunion.h, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, md5.c, menubar-msw.c, menubar-x.c, menubar.c, minibuf.c, mule-ccl.c, mule-charset.c, mule-coding.c, mule-wnnfns.c, ndir.h, nt.c, objects-gtk.c, objects-gtk.h, objects-msw.c, objects-tty.c, objects-x.c, objects.c, objects.h, postgresql.c, print.c, process-nt.c, process-unix.c, process.c, procimpl.h, realpath.c, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, redisplay.h, regex.c, search.c, select-common.h, select-gtk.c, select-x.c, sound.h, symbols.c, syntax.c, syntax.h, sysdep.c, sysdep.h, sysdir.h, sysfile.h, sysproc.h, syspwd.h, systime.h, syswindows.h, termcap.c, tests.c, text.c, text.h, toolbar-common.c, tooltalk.c, ui-gtk.c, unexnt.c, unicode.c, win32.c: Text/char naming rationalization. [a] distinguish between "charptr" when it refers to operations on the pointer itself and when it refers to operations on text; and [b] use consistent naming for everything referring to internal format, i.e. Itext == text in internal format Ibyte == a byte in such text Ichar == a char as represented in internal character format thus e.g. set_charptr_emchar -> set_itext_ichar The pre and post tags on either side of this change are: pre-internal-format-textual-renaming post-internal-format-textual-renaming See the Internals Manual for details of exactly how this was done, how to handle the change in your workspace, etc.
author ben
date Wed, 05 Jun 2002 09:58:45 +0000
parents 2b6fa2618f76
children 79c6ff3eef26
comparison
equal deleted inserted replaced
866:613552a02607 867:804517e16990
114 /* Force immediate output of all printed data. Used for debugging. */ 114 /* Force immediate output of all printed data. Used for debugging. */
115 int print_unbuffered; 115 int print_unbuffered;
116 116
117 FILE *termscript; /* Stdio stream being used for copy of all output. */ 117 FILE *termscript; /* Stdio stream being used for copy of all output. */
118 118
119 static void write_string_to_alternate_debugging_output (Intbyte *str, 119 static void write_string_to_alternate_debugging_output (Ibyte *str,
120 Bytecount len); 120 Bytecount len);
121 121
122 122
123 123
124 int stdout_needs_newline; 124 int stdout_needs_newline;
125 125
126 /* Basic function to actually write to a stdio stream or TTY console. */ 126 /* Basic function to actually write to a stdio stream or TTY console. */
127 127
128 static void 128 static void
129 write_string_to_stdio_stream (FILE *stream, struct console *con, 129 write_string_to_stdio_stream (FILE *stream, struct console *con,
130 const Intbyte *ptr, Bytecount len, 130 const Ibyte *ptr, Bytecount len,
131 int must_flush) 131 int must_flush)
132 { 132 {
133 Extbyte *extptr = 0; 133 Extbyte *extptr = 0;
134 Bytecount extlen = 0; 134 Bytecount extlen = 0;
135 int output_is_std_handle = 135 int output_is_std_handle =
205 205
206 2) (to be really correct) make a new lstream that outputs using 206 2) (to be really correct) make a new lstream that outputs using
207 mswindows_output_console_string(). */ 207 mswindows_output_console_string(). */
208 208
209 static void 209 static void
210 std_handle_out_va (FILE *stream, const CIntbyte *fmt, va_list args, 210 std_handle_out_va (FILE *stream, const CIbyte *fmt, va_list args,
211 int debug_output_as_well) 211 int debug_output_as_well)
212 { 212 {
213 Intbyte kludge[8192]; 213 Ibyte kludge[8192];
214 Bytecount kludgelen; 214 Bytecount kludgelen;
215 215
216 if (initialized && !inhibit_non_essential_printing_operations) 216 if (initialized && !inhibit_non_essential_printing_operations)
217 fmt = GETTEXT (fmt); 217 fmt = GETTEXT (fmt);
218 vsprintf ((CIntbyte *) kludge, fmt, args); 218 vsprintf ((CIbyte *) kludge, fmt, args);
219 kludgelen = qxestrlen (kludge); 219 kludgelen = qxestrlen (kludge);
220 220
221 write_string_to_stdio_stream (stream, 0, kludge, kludgelen, 1); 221 write_string_to_stdio_stream (stream, 0, kludge, kludgelen, 1);
222 if (debug_output_as_well) 222 if (debug_output_as_well)
223 { 223 {
234 234
235 This is safe even when not initialized or when dying -- we don't do 235 This is safe even when not initialized or when dying -- we don't do
236 conversion in such cases. */ 236 conversion in such cases. */
237 237
238 void 238 void
239 stderr_out (const CIntbyte *fmt, ...) 239 stderr_out (const CIbyte *fmt, ...)
240 { 240 {
241 va_list args; 241 va_list args;
242 va_start (args, fmt); 242 va_start (args, fmt);
243 std_handle_out_va (stderr, fmt, args, 0); 243 std_handle_out_va (stderr, fmt, args, 0);
244 va_end (args); 244 va_end (args);
246 246
247 /* Output portably to stdout or its equivalent (i.e. may be a console 247 /* Output portably to stdout or its equivalent (i.e. may be a console
248 window under MS Windows). Works like stderr_out(). */ 248 window under MS Windows). Works like stderr_out(). */
249 249
250 void 250 void
251 stdout_out (const CIntbyte *fmt, ...) 251 stdout_out (const CIbyte *fmt, ...)
252 { 252 {
253 va_list args; 253 va_list args;
254 va_start (args, fmt); 254 va_start (args, fmt);
255 std_handle_out_va (stdout, fmt, args, 0); 255 std_handle_out_va (stdout, fmt, args, 0);
256 va_end (args); 256 va_end (args);
260 window under MS Windows), as well as alternate-debugging-output and 260 window under MS Windows), as well as alternate-debugging-output and
261 (under MS Windows) the C debugging output, i.e. OutputDebugString(). 261 (under MS Windows) the C debugging output, i.e. OutputDebugString().
262 Works like stderr_out(). */ 262 Works like stderr_out(). */
263 263
264 void 264 void
265 debug_out (const CIntbyte *fmt, ...) 265 debug_out (const CIbyte *fmt, ...)
266 { 266 {
267 va_list args; 267 va_list args;
268 va_start (args, fmt); 268 va_start (args, fmt);
269 std_handle_out_va (stderr, fmt, args, 1); 269 std_handle_out_va (stderr, fmt, args, 1);
270 va_end (args); 270 va_end (args);
271 } 271 }
272 272
273 DOESNT_RETURN 273 DOESNT_RETURN
274 fatal (const CIntbyte *fmt, ...) 274 fatal (const CIbyte *fmt, ...)
275 { 275 {
276 va_list args; 276 va_list args;
277 va_start (args, fmt); 277 va_start (args, fmt);
278 278
279 stderr_out ("\nXEmacs: fatal error: "); 279 stderr_out ("\nXEmacs: fatal error: ");
300 300
301 Use Qexternal_debugging_output to get output to stderr. 301 Use Qexternal_debugging_output to get output to stderr.
302 */ 302 */
303 303
304 static void 304 static void
305 output_string (Lisp_Object function, const Intbyte *nonreloc, 305 output_string (Lisp_Object function, const Ibyte *nonreloc,
306 Lisp_Object reloc, Bytecount offset, Bytecount len) 306 Lisp_Object reloc, Bytecount offset, Bytecount len)
307 { 307 {
308 /* This function can GC */ 308 /* This function can GC */
309 Charcount cclen; 309 Charcount cclen;
310 /* We change the value of nonreloc (fetching it from reloc as 310 /* We change the value of nonreloc (fetching it from reloc as
311 necessary), but we don't want to pass this changed value on to 311 necessary), but we don't want to pass this changed value on to
312 other functions that take both a nonreloc and a reloc, or things 312 other functions that take both a nonreloc and a reloc, or things
313 may get confused and an assertion failure in 313 may get confused and an assertion failure in
314 fixup_internal_substring() may get triggered. */ 314 fixup_internal_substring() may get triggered. */
315 const Intbyte *newnonreloc = nonreloc; 315 const Ibyte *newnonreloc = nonreloc;
316 struct gcpro gcpro1, gcpro2; 316 struct gcpro gcpro1, gcpro2;
317 317
318 /* Emacs won't print while GCing, but an external debugger might */ 318 /* Emacs won't print while GCing, but an external debugger might */
319 #ifdef NO_PRINT_DURING_GC 319 #ifdef NO_PRINT_DURING_GC
320 if (gc_in_progress) return; 320 if (gc_in_progress) return;
341 relocating the string. For small strings, we do it by 341 relocating the string. For small strings, we do it by
342 alloc'ing the string and using a copy; for large strings, 342 alloc'ing the string and using a copy; for large strings,
343 we inhibit GC. */ 343 we inhibit GC. */
344 if (len < 65536) 344 if (len < 65536)
345 { 345 {
346 Intbyte *copied = alloca_array (Intbyte, len); 346 Ibyte *copied = alloca_array (Ibyte, len);
347 memcpy (copied, newnonreloc + offset, len); 347 memcpy (copied, newnonreloc + offset, len);
348 Lstream_write (XLSTREAM (function), copied, len); 348 Lstream_write (XLSTREAM (function), copied, len);
349 } 349 }
350 else 350 else
351 { 351 {
414 414
415 if (STRINGP (reloc)) 415 if (STRINGP (reloc))
416 { 416 {
417 for (iii = ccoff; iii < cclen + ccoff; iii++) 417 for (iii = ccoff; iii < cclen + ccoff; iii++)
418 { 418 {
419 call1 (function, make_char (string_emchar (reloc, iii))); 419 call1 (function, make_char (string_ichar (reloc, iii)));
420 if (STRINGP (reloc)) 420 if (STRINGP (reloc))
421 newnonreloc = XSTRING_DATA (reloc); 421 newnonreloc = XSTRING_DATA (reloc);
422 } 422 }
423 } 423 }
424 else 424 else
425 { 425 {
426 for (iii = ccoff; iii < cclen + ccoff; iii++) 426 for (iii = ccoff; iii < cclen + ccoff; iii++)
427 { 427 {
428 call1 (function, 428 call1 (function,
429 make_char (charptr_emchar_n (newnonreloc, iii))); 429 make_char (itext_ichar_n (newnonreloc, iii)));
430 } 430 }
431 } 431 }
432 } 432 }
433 433
434 UNGCPRO; 434 UNGCPRO;
538 538
539 Also note that STREAM should be the result of 539 Also note that STREAM should be the result of
540 canonicalize_printcharfun() (i.e. Qnil means stdout, not 540 canonicalize_printcharfun() (i.e. Qnil means stdout, not
541 Vstandard_output, etc.) */ 541 Vstandard_output, etc.) */
542 void 542 void
543 write_string_1 (Lisp_Object stream, const Intbyte *str, Bytecount size) 543 write_string_1 (Lisp_Object stream, const Ibyte *str, Bytecount size)
544 { 544 {
545 /* This function can GC */ 545 /* This function can GC */
546 #ifdef ERROR_CHECK_TEXT 546 #ifdef ERROR_CHECK_TEXT
547 assert (size >= 0); 547 assert (size >= 0);
548 #endif 548 #endif
549 output_string (stream, str, Qnil, 0, size); 549 output_string (stream, str, Qnil, 0, size);
550 } 550 }
551 551
552 void 552 void
553 write_string (Lisp_Object stream, const Intbyte *str) 553 write_string (Lisp_Object stream, const Ibyte *str)
554 { 554 {
555 /* This function can GC */ 555 /* This function can GC */
556 write_string_1 (stream, str, qxestrlen (str)); 556 write_string_1 (stream, str, qxestrlen (str));
557 } 557 }
558 558
559 void 559 void
560 write_c_string (Lisp_Object stream, const CIntbyte *str) 560 write_c_string (Lisp_Object stream, const CIbyte *str)
561 { 561 {
562 /* This function can GC */ 562 /* This function can GC */
563 write_string_1 (stream, (const Intbyte *) str, strlen (str)); 563 write_string_1 (stream, (const Ibyte *) str, strlen (str));
564 } 564 }
565 565
566 void 566 void
567 write_eistring (Lisp_Object stream, const Eistring *ei) 567 write_eistring (Lisp_Object stream, const Eistring *ei)
568 { 568 {
570 } 570 }
571 571
572 /* Write a printf-style string to STREAM; see output_string(). */ 572 /* Write a printf-style string to STREAM; see output_string(). */
573 573
574 void 574 void
575 write_fmt_string (Lisp_Object stream, const CIntbyte *fmt, ...) 575 write_fmt_string (Lisp_Object stream, const CIbyte *fmt, ...)
576 { 576 {
577 va_list va; 577 va_list va;
578 Intbyte *str; 578 Ibyte *str;
579 Bytecount len; 579 Bytecount len;
580 int count; 580 int count;
581 581
582 va_start (va, fmt); 582 va_start (va, fmt);
583 str = emacs_vsprintf_malloc (fmt, va, &len); 583 str = emacs_vsprintf_malloc (fmt, va, &len);
592 592
593 #### It shouldn't be necessary to specify the number of arguments. 593 #### It shouldn't be necessary to specify the number of arguments.
594 This would require some rewriting of the doprnt() functions, though. */ 594 This would require some rewriting of the doprnt() functions, though. */
595 595
596 void 596 void
597 write_fmt_string_lisp (Lisp_Object stream, const CIntbyte *fmt, int nargs, ...) 597 write_fmt_string_lisp (Lisp_Object stream, const CIbyte *fmt, int nargs, ...)
598 { 598 {
599 Lisp_Object *args = alloca_array (Lisp_Object, nargs); 599 Lisp_Object *args = alloca_array (Lisp_Object, nargs);
600 va_list va; 600 va_list va;
601 int i; 601 int i;
602 Intbyte *str; 602 Ibyte *str;
603 Bytecount len; 603 Bytecount len;
604 int count; 604 int count;
605 605
606 va_start (va, nargs); 606 va_start (va, nargs);
607 for (i = 0; i < nargs; i++) 607 for (i = 0; i < nargs; i++)
612 write_string_1 (stream, str, len); 612 write_string_1 (stream, str, len);
613 unbind_to (count); 613 unbind_to (count);
614 } 614 }
615 615
616 void 616 void
617 stderr_out_lisp (const CIntbyte *fmt, int nargs, ...) 617 stderr_out_lisp (const CIbyte *fmt, int nargs, ...)
618 { 618 {
619 Lisp_Object *args = alloca_array (Lisp_Object, nargs); 619 Lisp_Object *args = alloca_array (Lisp_Object, nargs);
620 va_list va; 620 va_list va;
621 int i; 621 int i;
622 Intbyte *str; 622 Ibyte *str;
623 Bytecount len; 623 Bytecount len;
624 int count; 624 int count;
625 625
626 va_start (va, nargs); 626 va_start (va, nargs);
627 for (i = 0; i < nargs; i++) 627 for (i = 0; i < nargs; i++)
639 STREAM defaults to the value of `standard-output' (which see). 639 STREAM defaults to the value of `standard-output' (which see).
640 */ 640 */
641 (character, stream)) 641 (character, stream))
642 { 642 {
643 /* This function can GC */ 643 /* This function can GC */
644 Intbyte str[MAX_EMCHAR_LEN]; 644 Ibyte str[MAX_ICHAR_LEN];
645 Bytecount len; 645 Bytecount len;
646 646
647 CHECK_CHAR_COERCE_INT (character); 647 CHECK_CHAR_COERCE_INT (character);
648 len = set_charptr_emchar (str, XCHAR (character)); 648 len = set_itext_ichar (str, XCHAR (character));
649 output_string (canonicalize_printcharfun (stream), str, Qnil, 0, len); 649 output_string (canonicalize_printcharfun (stream), str, Qnil, 0, len);
650 return character; 650 return character;
651 } 651 }
652 652
653 void 653 void
989 * -wsr 989 * -wsr
990 */ 990 */
991 void 991 void
992 float_to_string (char *buf, double data) 992 float_to_string (char *buf, double data)
993 { 993 {
994 Intbyte *cp, c; 994 Ibyte *cp, c;
995 int width; 995 int width;
996 996
997 if (NILP (Vfloat_output_format) 997 if (NILP (Vfloat_output_format)
998 || !STRINGP (Vfloat_output_format)) 998 || !STRINGP (Vfloat_output_format))
999 lose: 999 lose:
1034 the read-equivalence of lisp objects. (* x 1) and (* x 1.0) do 1034 the read-equivalence of lisp objects. (* x 1) and (* x 1.0) do
1035 not do the same thing, so it's important that the printed 1035 not do the same thing, so it's important that the printed
1036 representation of that form not be corrupted by the printer. 1036 representation of that form not be corrupted by the printer.
1037 */ 1037 */
1038 { 1038 {
1039 Intbyte *s = (Intbyte *) buf; /* don't use signed chars here! 1039 Ibyte *s = (Ibyte *) buf; /* don't use signed chars here!
1040 isdigit() can't hack them! */ 1040 isdigit() can't hack them! */
1041 if (*s == '-') s++; 1041 if (*s == '-') s++;
1042 for (; *s; s++) 1042 for (; *s; s++)
1043 /* if there's a non-digit, then there is a decimal point, or 1043 /* if there's a non-digit, then there is a decimal point, or
1044 it's in exponential notation, both of which are ok. */ 1044 it's in exponential notation, both of which are ok. */
1311 Bytecount i, last = 0; 1311 Bytecount i, last = 0;
1312 1312
1313 write_c_string (printcharfun, "\""); 1313 write_c_string (printcharfun, "\"");
1314 for (i = 0; i < bcmax; i++) 1314 for (i = 0; i < bcmax; i++)
1315 { 1315 {
1316 Intbyte ch = string_byte (obj, i); 1316 Ibyte ch = string_byte (obj, i);
1317 if (ch == '\"' || ch == '\\' 1317 if (ch == '\"' || ch == '\\'
1318 || (ch == '\n' && print_escape_newlines)) 1318 || (ch == '\n' && print_escape_newlines))
1319 { 1319 {
1320 if (i > last) 1320 if (i > last)
1321 { 1321 {
1326 { 1326 {
1327 write_c_string (printcharfun, "\\n"); 1327 write_c_string (printcharfun, "\\n");
1328 } 1328 }
1329 else 1329 else
1330 { 1330 {
1331 Intbyte temp[2]; 1331 Ibyte temp[2];
1332 write_c_string (printcharfun, "\\"); 1332 write_c_string (printcharfun, "\\");
1333 /* This is correct for Mule because the 1333 /* This is correct for Mule because the
1334 character is either \ or " */ 1334 character is either \ or " */
1335 temp[0] = string_byte (obj, i); 1335 temp[0] = string_byte (obj, i);
1336 temp[1] = '\0'; 1336 temp[1] = '\0';
1495 1495
1496 case Lisp_Type_Char: 1496 case Lisp_Type_Char:
1497 { 1497 {
1498 /* God intended that this be #\..., you know. */ 1498 /* God intended that this be #\..., you know. */
1499 char buf[16]; 1499 char buf[16];
1500 Emchar ch = XCHAR (obj); 1500 Ichar ch = XCHAR (obj);
1501 char *p = buf; 1501 char *p = buf;
1502 *p++ = '?'; 1502 *p++ = '?';
1503 if (ch < 32) 1503 if (ch < 32)
1504 { 1504 {
1505 *p++ = '\\'; 1505 *p++ = '\\';
1544 *p++ = '\\', *p++ = '^', *p++ = '?'; 1544 *p++ = '\\', *p++ = '^', *p++ = '?';
1545 } 1545 }
1546 else if (ch < 160) 1546 else if (ch < 160)
1547 { 1547 {
1548 *p++ = '\\', *p++ = '^'; 1548 *p++ = '\\', *p++ = '^';
1549 p += set_charptr_emchar ((Intbyte *) p, ch + 64); 1549 p += set_itext_ichar ((Ibyte *) p, ch + 64);
1550 } 1550 }
1551 else 1551 else
1552 { 1552 {
1553 p += set_charptr_emchar ((Intbyte *) p, ch); 1553 p += set_itext_ichar ((Ibyte *) p, ch);
1554 } 1554 }
1555 1555
1556 output_string (printcharfun, (Intbyte *) buf, Qnil, 0, p - buf); 1556 output_string (printcharfun, (Ibyte *) buf, Qnil, 0, p - buf);
1557 1557
1558 break; 1558 break;
1559 } 1559 }
1560 1560
1561 case Lisp_Type_Record: 1561 case Lisp_Type_Record:
1681 write_c_string (printcharfun, "#:"); 1681 write_c_string (printcharfun, "#:");
1682 } 1682 }
1683 1683
1684 /* Does it look like an integer or a float? */ 1684 /* Does it look like an integer or a float? */
1685 { 1685 {
1686 Intbyte *data = XSTRING_DATA (name); 1686 Ibyte *data = XSTRING_DATA (name);
1687 Bytecount confusing = 0; 1687 Bytecount confusing = 0;
1688 1688
1689 if (size == 0) 1689 if (size == 0)
1690 goto not_yet_confused; /* Really confusing */ 1690 goto not_yet_confused; /* Really confusing */
1691 else if (isdigit (data[0])) 1691 else if (isdigit (data[0]))
1762 to be passed to `print'. Before calling `print', set `alternate_do_pointer' 1762 to be passed to `print'. Before calling `print', set `alternate_do_pointer'
1763 to 0. 1763 to 0.
1764 */ 1764 */
1765 (character)) 1765 (character))
1766 { 1766 {
1767 Intbyte str[MAX_EMCHAR_LEN]; 1767 Ibyte str[MAX_ICHAR_LEN];
1768 Bytecount len; 1768 Bytecount len;
1769 1769
1770 CHECK_CHAR_COERCE_INT (character); 1770 CHECK_CHAR_COERCE_INT (character);
1771 len = set_charptr_emchar (str, XCHAR (character)); 1771 len = set_itext_ichar (str, XCHAR (character));
1772 write_string_to_alternate_debugging_output (str, len); 1772 write_string_to_alternate_debugging_output (str, len);
1773 1773
1774 return character; 1774 return character;
1775 } 1775 }
1776 1776
1777 static void 1777 static void
1778 write_string_to_alternate_debugging_output (Intbyte *str, Bytecount len) 1778 write_string_to_alternate_debugging_output (Ibyte *str, Bytecount len)
1779 { 1779 {
1780 int extlen; 1780 int extlen;
1781 const Extbyte *extptr; 1781 const Extbyte *extptr;
1782 #if 0 /* We want to see the internal representation, don't we? */ 1782 #if 0 /* We want to see the internal representation, don't we? */
1783 if (initialized && !inhibit_non_essential_printing_operations) 1783 if (initialized && !inhibit_non_essential_printing_operations)
1840 XSTRING_DATA (char_or_string), 1840 XSTRING_DATA (char_or_string),
1841 XSTRING_LENGTH (char_or_string), 1841 XSTRING_LENGTH (char_or_string),
1842 print_unbuffered); 1842 print_unbuffered);
1843 else 1843 else
1844 { 1844 {
1845 Intbyte str[MAX_EMCHAR_LEN]; 1845 Ibyte str[MAX_ICHAR_LEN];
1846 Bytecount len; 1846 Bytecount len;
1847 1847
1848 CHECK_CHAR_COERCE_INT (char_or_string); 1848 CHECK_CHAR_COERCE_INT (char_or_string);
1849 len = set_charptr_emchar (str, XCHAR (char_or_string)); 1849 len = set_itext_ichar (str, XCHAR (char_or_string));
1850 write_string_to_stdio_stream (file, con, str, len, print_unbuffered); 1850 write_string_to_stdio_stream (file, con, str, len, print_unbuffered);
1851 } 1851 }
1852 1852
1853 return char_or_string; 1853 return char_or_string;
1854 } 1854 }