|
|
1.1 ! root 1: /* Lisp object printing and output streams. ! 2: Copyright (C) 1985, 1986, 1990 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU Emacs. ! 5: ! 6: GNU Emacs is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 1, or (at your option) ! 9: any later version. ! 10: ! 11: GNU Emacs is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU Emacs; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: #include "config.h" ! 22: #include <stdio.h> ! 23: #undef NULL ! 24: #include "lisp.h" ! 25: ! 26: #ifndef standalone ! 27: #include "buffer.h" ! 28: #include "window.h" ! 29: #include "process.h" ! 30: #include "dispextern.h" ! 31: #include "termchar.h" ! 32: #endif /* not standalone */ ! 33: ! 34: Lisp_Object Vstandard_output, Qstandard_output; ! 35: ! 36: /* Avoid actual stack overflow in print. */ ! 37: int print_depth; ! 38: ! 39: /* Maximum length of list to print in full; noninteger means ! 40: effectively infinity */ ! 41: ! 42: Lisp_Object Vprint_length; ! 43: ! 44: /* Nonzero means print newlines in strings as \n. */ ! 45: ! 46: int print_escape_newlines; ! 47: ! 48: /* Nonzero means print newline before next minibuffer message. ! 49: Defined in xdisp.c */ ! 50: ! 51: extern int noninteractive_need_newline; ! 52: #ifdef MAX_PRINT_CHARS ! 53: static int print_chars; ! 54: static int max_print; ! 55: #endif /* MAX_PRINT_CHARS */ ! 56: ! 57: /* Low level output routines for charaters and strings */ ! 58: ! 59: /* Lisp functions to do output using a stream ! 60: must have the stream in a variable called printcharfun ! 61: and must start with PRINTPREPARE and end with PRINTFINISH. ! 62: Use PRINTCHAR to output one character, ! 63: or call strout to output a block of characters. ! 64: Also, each one must have the declarations ! 65: struct buffer *old = current_buffer; ! 66: int old_point = -1, start_point; ! 67: Lisp_Object original; ! 68: */ ! 69: ! 70: #define PRINTPREPARE \ ! 71: original = printcharfun; \ ! 72: if (NULL (printcharfun)) printcharfun = Qt; \ ! 73: if (XTYPE (printcharfun) == Lisp_Buffer) \ ! 74: { if (XBUFFER (printcharfun) != current_buffer) Fset_buffer (printcharfun); \ ! 75: printcharfun = Qnil;}\ ! 76: if (XTYPE (printcharfun) == Lisp_Marker) \ ! 77: { if (XMARKER (original)->buffer != current_buffer) \ ! 78: set_buffer_internal (XMARKER (original)->buffer); \ ! 79: old_point = point; \ ! 80: SET_PT (marker_position (printcharfun)); \ ! 81: start_point = point; \ ! 82: printcharfun = Qnil;} ! 83: ! 84: #define PRINTFINISH \ ! 85: if (XTYPE (original) == Lisp_Marker) \ ! 86: Fset_marker (original, make_number (point), Qnil); \ ! 87: if (old_point >= 0) \ ! 88: SET_PT ((old_point >= start_point ? point - start_point : 0) + old_point); \ ! 89: if (old != current_buffer) \ ! 90: set_buffer_internal (old) ! 91: ! 92: #define PRINTCHAR(ch) printchar (ch, printcharfun) ! 93: ! 94: /* Index of first unused element of message_buf. */ ! 95: static int printbufidx; ! 96: ! 97: static void ! 98: printchar (ch, fun) ! 99: unsigned char ch; ! 100: Lisp_Object fun; ! 101: { ! 102: Lisp_Object ch1; ! 103: ! 104: #ifdef MAX_PRINT_CHARS ! 105: if (max_print) ! 106: print_chars++; ! 107: #endif /* MAX_PRINT_CHARS */ ! 108: #ifndef standalone ! 109: if (EQ (fun, Qnil)) ! 110: { ! 111: QUIT; ! 112: insert (&ch, 1); ! 113: return; ! 114: } ! 115: if (EQ (fun, Qt)) ! 116: { ! 117: if (noninteractive) ! 118: { ! 119: putchar (ch); ! 120: noninteractive_need_newline = 1; ! 121: return; ! 122: } ! 123: if (echo_area_contents != message_buf || !message_buf_print) ! 124: { ! 125: echo_area_contents = message_buf; ! 126: printbufidx = 0; ! 127: message_buf_print = 1; ! 128: } ! 129: if (printbufidx < screen_width) ! 130: message_buf[printbufidx++] = ch; ! 131: message_buf[printbufidx] = 0; ! 132: return; ! 133: } ! 134: #endif /* not standalone */ ! 135: ! 136: XFASTINT (ch1) = ch; ! 137: call1 (fun, ch1); ! 138: } ! 139: ! 140: static void ! 141: strout (ptr, size, printcharfun) ! 142: char *ptr; ! 143: int size; ! 144: Lisp_Object printcharfun; ! 145: { ! 146: int i = 0; ! 147: ! 148: if (EQ (printcharfun, Qnil)) ! 149: { ! 150: insert (ptr, size >= 0 ? size : strlen (ptr)); ! 151: #ifdef MAX_PRINT_CHARS ! 152: if (max_print) ! 153: print_chars += size >= 0 ? size : strlen(ptr); ! 154: #endif /* MAX_PRINT_CHARS */ ! 155: return; ! 156: } ! 157: if (EQ (printcharfun, Qt)) ! 158: { ! 159: i = size >= 0 ? size : strlen (ptr); ! 160: #ifdef MAX_PRINT_CHARS ! 161: if (max_print) ! 162: print_chars += i; ! 163: #endif /* MAX_PRINT_CHARS */ ! 164: if (noninteractive) ! 165: { ! 166: fwrite (ptr, 1, i, stdout); ! 167: noninteractive_need_newline = 1; ! 168: return; ! 169: } ! 170: if (echo_area_contents != message_buf || !message_buf_print) ! 171: { ! 172: echo_area_contents = message_buf; ! 173: printbufidx = 0; ! 174: message_buf_print = 1; ! 175: } ! 176: if (i > screen_width - printbufidx) ! 177: i = screen_width - printbufidx; ! 178: bcopy (ptr, &message_buf[printbufidx], i); ! 179: printbufidx += i; ! 180: message_buf[printbufidx] = 0; ! 181: return; ! 182: } ! 183: if (size >= 0) ! 184: while (i < size) ! 185: PRINTCHAR (ptr[i++]); ! 186: else ! 187: while (ptr[i]) ! 188: PRINTCHAR (ptr[i++]); ! 189: } ! 190: ! 191: DEFUN ("write-char", Fwrite_char, Swrite_char, 1, 2, 0, ! 192: "Output character CHAR to stream STREAM.\n\ ! 193: STREAM defaults to the value of `standard-output' (which see).") ! 194: (ch, printcharfun) ! 195: Lisp_Object ch, printcharfun; ! 196: { ! 197: struct buffer *old = current_buffer; ! 198: int old_point = -1; ! 199: int start_point; ! 200: Lisp_Object original; ! 201: ! 202: if (NULL (printcharfun)) ! 203: printcharfun = Vstandard_output; ! 204: CHECK_NUMBER (ch, 0); ! 205: PRINTPREPARE; ! 206: PRINTCHAR (XINT (ch)); ! 207: PRINTFINISH; ! 208: return ch; ! 209: } ! 210: ! 211: write_string (data, size) ! 212: char *data; ! 213: int size; ! 214: { ! 215: struct buffer *old = current_buffer; ! 216: Lisp_Object printcharfun; ! 217: int old_point = -1; ! 218: int start_point; ! 219: Lisp_Object original; ! 220: ! 221: printcharfun = Vstandard_output; ! 222: ! 223: PRINTPREPARE; ! 224: strout (data, size, printcharfun); ! 225: PRINTFINISH; ! 226: } ! 227: ! 228: write_string_1 (data, size, printcharfun) ! 229: char *data; ! 230: int size; ! 231: Lisp_Object printcharfun; ! 232: { ! 233: struct buffer *old = current_buffer; ! 234: int old_point = -1; ! 235: int start_point; ! 236: Lisp_Object original; ! 237: ! 238: PRINTPREPARE; ! 239: strout (data, size, printcharfun); ! 240: PRINTFINISH; ! 241: } ! 242: ! 243: ! 244: #ifndef standalone ! 245: ! 246: temp_output_buffer_setup (bufname) ! 247: char *bufname; ! 248: { ! 249: register struct buffer *old = current_buffer; ! 250: register Lisp_Object buf; ! 251: ! 252: Fset_buffer (Fget_buffer_create (build_string (bufname))); ! 253: ! 254: current_buffer->read_only = Qnil; ! 255: Ferase_buffer (); ! 256: ! 257: XSET (buf, Lisp_Buffer, current_buffer); ! 258: specbind (Qstandard_output, buf); ! 259: ! 260: set_buffer_internal (old); ! 261: } ! 262: ! 263: Lisp_Object ! 264: internal_with_output_to_temp_buffer (bufname, function, args) ! 265: char *bufname; ! 266: Lisp_Object (*function) (); ! 267: Lisp_Object args; ! 268: { ! 269: int count = specpdl_ptr - specpdl; ! 270: Lisp_Object buf, val; ! 271: ! 272: record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); ! 273: temp_output_buffer_setup (bufname); ! 274: buf = Vstandard_output; ! 275: ! 276: val = (*function) (args); ! 277: ! 278: temp_output_buffer_show (buf); ! 279: ! 280: unbind_to (count); ! 281: return val; ! 282: } ! 283: ! 284: DEFUN ("with-output-to-temp-buffer", Fwith_output_to_temp_buffer, Swith_output_to_temp_buffer, ! 285: 1, UNEVALLED, 0, ! 286: "Binding `standard-output' to buffer named BUFNAME, execute BODY then display that buffer.\n\ ! 287: The buffer is cleared out initially, and marked as unmodified when done.\n\ ! 288: All output done by BODY is inserted in that buffer by default.\n\ ! 289: It is displayed in another window, but not selected.\n\ ! 290: The value of the last form in BODY is returned.\n\ ! 291: If variable `temp-buffer-show-hook' is non-nil, call it at the end\n\ ! 292: to get the buffer displayed. It gets one argument, the buffer to display.") ! 293: (args) ! 294: Lisp_Object args; ! 295: { ! 296: struct gcpro gcpro1; ! 297: Lisp_Object name; ! 298: int count = specpdl_ptr - specpdl; ! 299: Lisp_Object buf, val; ! 300: ! 301: GCPRO1(args); ! 302: name = Feval (Fcar (args)); ! 303: UNGCPRO; ! 304: ! 305: CHECK_STRING (name, 0); ! 306: temp_output_buffer_setup (XSTRING (name)->data); ! 307: buf = Vstandard_output; ! 308: ! 309: val = Fprogn (Fcdr (args)); ! 310: ! 311: temp_output_buffer_show (buf); ! 312: ! 313: unbind_to (count); ! 314: return val; ! 315: } ! 316: #endif /* not standalone */ ! 317: ! 318: static void print (); ! 319: ! 320: DEFUN ("terpri", Fterpri, Sterpri, 0, 1, 0, ! 321: "Output a newline to STREAM (or value of standard-output).") ! 322: (printcharfun) ! 323: Lisp_Object printcharfun; ! 324: { ! 325: struct buffer *old = current_buffer; ! 326: int old_point = -1; ! 327: int start_point; ! 328: Lisp_Object original; ! 329: ! 330: if (NULL (printcharfun)) ! 331: printcharfun = Vstandard_output; ! 332: PRINTPREPARE; ! 333: PRINTCHAR ('\n'); ! 334: PRINTFINISH; ! 335: return Qt; ! 336: } ! 337: ! 338: DEFUN ("prin1", Fprin1, Sprin1, 1, 2, 0, ! 339: "Output the printed representation of OBJECT, any Lisp object.\n\ ! 340: Quoting characters are printed when needed to make output that `read'\n\ ! 341: can handle, whenever this is possible.\n\ ! 342: Output stream is STREAM, or value of `standard-output' (which see).") ! 343: (obj, printcharfun) ! 344: Lisp_Object obj, printcharfun; ! 345: { ! 346: struct buffer *old = current_buffer; ! 347: int old_point = -1; ! 348: int start_point; ! 349: Lisp_Object original; ! 350: ! 351: #ifdef MAX_PRINT_CHARS ! 352: max_print = 0; ! 353: #endif /* MAX_PRINT_CHARS */ ! 354: if (NULL (printcharfun)) ! 355: printcharfun = Vstandard_output; ! 356: PRINTPREPARE; ! 357: print_depth = 0; ! 358: print (obj, printcharfun, 1); ! 359: PRINTFINISH; ! 360: return obj; ! 361: } ! 362: ! 363: /* a buffer which is used to hold output being built by prin1-to-string */ ! 364: Lisp_Object Vprin1_to_string_buffer; ! 365: ! 366: DEFUN ("prin1-to-string", Fprin1_to_string, Sprin1_to_string, 1, 1, 0, ! 367: "Return a string containing the printed representation of OBJECT,\n\ ! 368: any Lisp object. Quoting characters are used when needed to make output\n\ ! 369: that `read' can handle, whenever this is possible.") ! 370: (obj) ! 371: Lisp_Object obj; ! 372: { ! 373: struct buffer *old = current_buffer; ! 374: int old_point = -1; ! 375: int start_point; ! 376: Lisp_Object original, printcharfun; ! 377: struct gcpro gcpro1; ! 378: ! 379: printcharfun = Vprin1_to_string_buffer; ! 380: PRINTPREPARE; ! 381: print_depth = 0; ! 382: print (obj, printcharfun, 1); ! 383: /* Make Vprin1_to_string_buffer be the default buffer after PRINTFINSH */ ! 384: PRINTFINISH; ! 385: set_buffer_internal (XBUFFER (Vprin1_to_string_buffer)); ! 386: obj = Fbuffer_string (); ! 387: GCPRO1 (obj); ! 388: Ferase_buffer (); ! 389: set_buffer_internal (old); ! 390: UNGCPRO; ! 391: return obj; ! 392: } ! 393: ! 394: DEFUN ("princ", Fprinc, Sprinc, 1, 2, 0, ! 395: "Output the printed representation of OBJECT, any Lisp object.\n\ ! 396: No quoting characters are used; no delimiters are printed around\n\ ! 397: the contents of strings.\n\ ! 398: Output stream is STREAM, or value of standard-output (which see).") ! 399: (obj, printcharfun) ! 400: Lisp_Object obj, printcharfun; ! 401: { ! 402: struct buffer *old = current_buffer; ! 403: int old_point = -1; ! 404: int start_point; ! 405: Lisp_Object original; ! 406: ! 407: if (NULL (printcharfun)) ! 408: printcharfun = Vstandard_output; ! 409: PRINTPREPARE; ! 410: print_depth = 0; ! 411: print (obj, printcharfun, 0); ! 412: PRINTFINISH; ! 413: return obj; ! 414: } ! 415: ! 416: DEFUN ("print", Fprint, Sprint, 1, 2, 0, ! 417: "Output the printed representation of OBJECT, with newlines around it.\n\ ! 418: Quoting characters are printed when needed to make output that `read'\n\ ! 419: can handle, whenever this is possible.\n\ ! 420: Output stream is STREAM, or value of `standard-output' (which see).") ! 421: (obj, printcharfun) ! 422: Lisp_Object obj, printcharfun; ! 423: { ! 424: struct buffer *old = current_buffer; ! 425: int old_point = -1; ! 426: int start_point; ! 427: Lisp_Object original; ! 428: struct gcpro gcpro1; ! 429: ! 430: #ifdef MAX_PRINT_CHARS ! 431: print_chars = 0; ! 432: max_print = MAX_PRINT_CHARS; ! 433: #endif /* MAX_PRINT_CHARS */ ! 434: if (NULL (printcharfun)) ! 435: printcharfun = Vstandard_output; ! 436: GCPRO1 (obj); ! 437: PRINTPREPARE; ! 438: print_depth = 0; ! 439: PRINTCHAR ('\n'); ! 440: print (obj, printcharfun, 1); ! 441: PRINTCHAR ('\n'); ! 442: PRINTFINISH; ! 443: #ifdef MAX_PRINT_CHARS ! 444: max_print = 0; ! 445: print_chars = 0; ! 446: #endif /* MAX_PRINT_CHARS */ ! 447: UNGCPRO; ! 448: return obj; ! 449: } ! 450: ! 451: static void ! 452: print (obj, printcharfun, escapeflag) ! 453: #ifndef RTPC_REGISTER_BUG ! 454: register Lisp_Object obj; ! 455: #else ! 456: Lisp_Object obj; ! 457: #endif ! 458: register Lisp_Object printcharfun; ! 459: int escapeflag; ! 460: { ! 461: char buf[30]; ! 462: ! 463: QUIT; ! 464: ! 465: print_depth++; ! 466: if (print_depth > 200) ! 467: error ("Apparently circular structure being printed"); ! 468: #ifdef MAX_PRINT_CHARS ! 469: if (max_print && print_chars > max_print) ! 470: { ! 471: PRINTCHAR ('\n'); ! 472: print_chars = 0; ! 473: } ! 474: #endif /* MAX_PRINT_CHARS */ ! 475: ! 476: #ifdef SWITCH_ENUM_BUG ! 477: switch ((int) XTYPE (obj)) ! 478: #else ! 479: switch (XTYPE (obj)) ! 480: #endif ! 481: { ! 482: default: ! 483: /* We're in trouble if this happens! ! 484: Probably should just abort () */ ! 485: strout ("#<EMACS BUG: INVALID DATATYPE ", -1, printcharfun); ! 486: sprintf (buf, "(#o%3o)", (int) XTYPE (obj)); ! 487: strout (buf, -1, printcharfun); ! 488: strout (" Save your buffers immediately and please report this bug>", ! 489: -1, printcharfun); ! 490: break; ! 491: ! 492: case Lisp_Int: ! 493: sprintf (buf, "%d", XINT (obj)); ! 494: strout (buf, -1, printcharfun); ! 495: break; ! 496: ! 497: case Lisp_String: ! 498: if (!escapeflag) ! 499: strout (XSTRING (obj)->data, XSTRING (obj)->size, printcharfun); ! 500: else ! 501: { ! 502: register int i; ! 503: register unsigned char *p = XSTRING (obj)->data; ! 504: register unsigned char c; ! 505: ! 506: PRINTCHAR ('\"'); ! 507: for (i = XSTRING (obj)->size; i > 0; i--) ! 508: { ! 509: QUIT; ! 510: c = *p++; ! 511: if (c == '\n' && print_escape_newlines) ! 512: { ! 513: PRINTCHAR ('\\'); ! 514: PRINTCHAR ('n'); ! 515: } ! 516: else ! 517: { ! 518: if (c == '\"' || c == '\\') ! 519: PRINTCHAR ('\\'); ! 520: PRINTCHAR (c); ! 521: } ! 522: } ! 523: PRINTCHAR ('\"'); ! 524: } ! 525: break; ! 526: ! 527: case Lisp_Symbol: ! 528: { ! 529: register int confusing; ! 530: register unsigned char *p = XSYMBOL (obj)->name->data; ! 531: register unsigned char *end = p + XSYMBOL (obj)->name->size; ! 532: register unsigned char c; ! 533: ! 534: if (p != end && (*p == '-' || *p == '+')) p++; ! 535: if (p == end) ! 536: confusing = 0; ! 537: else ! 538: { ! 539: while (p != end && *p >= '0' && *p <= '9') ! 540: p++; ! 541: confusing = (end == p); ! 542: } ! 543: ! 544: p = XSYMBOL (obj)->name->data; ! 545: while (p != end) ! 546: { ! 547: QUIT; ! 548: c = *p++; ! 549: if (escapeflag) ! 550: { ! 551: if (c == '\"' || c == '\\' || c == '\'' || c == ';' || c == '#' || ! 552: c == '(' || c == ')' || c == ',' || c =='.' || c == '`' || ! 553: c == '[' || c == ']' || c == '?' || c <= 040 || confusing) ! 554: PRINTCHAR ('\\'), confusing = 0; ! 555: } ! 556: PRINTCHAR (c); ! 557: } ! 558: } ! 559: break; ! 560: ! 561: case Lisp_Cons: ! 562: PRINTCHAR ('('); ! 563: { ! 564: register int i = 0; ! 565: register int max = 0; ! 566: ! 567: if (XTYPE (Vprint_length) == Lisp_Int) ! 568: max = XINT (Vprint_length); ! 569: while (CONSP (obj)) ! 570: { ! 571: if (i++) ! 572: PRINTCHAR (' '); ! 573: if (max && i > max) ! 574: { ! 575: strout ("...", 3, printcharfun); ! 576: break; ! 577: } ! 578: print (Fcar (obj), printcharfun, escapeflag); ! 579: obj = Fcdr (obj); ! 580: } ! 581: } ! 582: if (!NULL (obj) && !CONSP (obj)) ! 583: { ! 584: strout (" . ", 3, printcharfun); ! 585: print (obj, printcharfun, escapeflag); ! 586: } ! 587: PRINTCHAR (')'); ! 588: break; ! 589: ! 590: case Lisp_Vector: ! 591: PRINTCHAR ('['); ! 592: { ! 593: register int i; ! 594: register Lisp_Object tem; ! 595: for (i = 0; i < XVECTOR (obj)->size; i++) ! 596: { ! 597: if (i) PRINTCHAR (' '); ! 598: tem = XVECTOR (obj)->contents[i]; ! 599: print (tem, printcharfun, escapeflag); ! 600: } ! 601: } ! 602: PRINTCHAR (']'); ! 603: break; ! 604: ! 605: #ifndef standalone ! 606: case Lisp_Buffer: ! 607: if (NULL (XBUFFER (obj)->name)) ! 608: strout ("#<killed buffer>", -1, printcharfun); ! 609: else if (escapeflag) ! 610: { ! 611: strout ("#<buffer ", -1, printcharfun); ! 612: strout (XSTRING (XBUFFER (obj)->name)->data, -1, printcharfun); ! 613: PRINTCHAR ('>'); ! 614: } ! 615: else ! 616: strout (XSTRING (XBUFFER (obj)->name)->data, -1, printcharfun); ! 617: break; ! 618: ! 619: case Lisp_Process: ! 620: if (escapeflag) ! 621: { ! 622: strout ("#<process ", -1, printcharfun); ! 623: strout (XSTRING (XPROCESS (obj)->name)->data, -1, printcharfun); ! 624: PRINTCHAR ('>'); ! 625: } ! 626: else ! 627: strout (XSTRING (XPROCESS (obj)->name)->data, -1, printcharfun); ! 628: break; ! 629: ! 630: case Lisp_Window: ! 631: strout ("#<window ", -1, printcharfun); ! 632: sprintf (buf, "%d", XFASTINT (XWINDOW (obj)->sequence_number)); ! 633: strout (buf, -1, printcharfun); ! 634: if (!NULL (XWINDOW (obj)->buffer)) ! 635: { ! 636: unsigned char *p = XSTRING (XBUFFER (XWINDOW (obj)->buffer)->name)->data; ! 637: strout (" on ", -1, printcharfun); ! 638: strout (p, -1, printcharfun); ! 639: } ! 640: PRINTCHAR ('>'); ! 641: break; ! 642: ! 643: case Lisp_Window_Configuration: ! 644: strout ("#<window-configuration>", -1, printcharfun); ! 645: break; ! 646: ! 647: case Lisp_Marker: ! 648: strout ("#<marker ", -1, printcharfun); ! 649: if (!(XMARKER (obj)->buffer)) ! 650: strout ("in no buffer", -1, printcharfun); ! 651: else ! 652: { ! 653: sprintf (buf, "at %d", marker_position (obj)); ! 654: strout (buf, -1, printcharfun); ! 655: strout (" in ", -1, printcharfun); ! 656: strout (XSTRING (XMARKER (obj)->buffer->name)->data, -1, printcharfun); ! 657: } ! 658: PRINTCHAR ('>'); ! 659: break; ! 660: #endif /* standalone */ ! 661: ! 662: case Lisp_Subr: ! 663: strout ("#<subr ", -1, printcharfun); ! 664: strout (XSUBR (obj)->symbol_name, -1, printcharfun); ! 665: PRINTCHAR ('>'); ! 666: break; ! 667: } ! 668: ! 669: print_depth--; ! 670: } ! 671: ! 672: void ! 673: syms_of_print () ! 674: { ! 675: DEFVAR_LISP ("standard-output", &Vstandard_output, ! 676: "Function print uses by default for outputting a character.\n\ ! 677: This may be any function of one argument.\n\ ! 678: It may also be a buffer (output is inserted before point)\n\ ! 679: or a marker (output is inserted and the marker is advanced)\n\ ! 680: or the symbol t (output appears in the minibuffer line)."); ! 681: Vstandard_output = Qt; ! 682: Qstandard_output = intern ("standard-output"); ! 683: staticpro (&Qstandard_output); ! 684: ! 685: DEFVAR_LISP ("print-length", &Vprint_length, ! 686: "Maximum length of list to print before abbreviating.\ ! 687: `nil' means no limit."); ! 688: Vprint_length = Qnil; ! 689: ! 690: DEFVAR_BOOL ("print-escape-newlines", &print_escape_newlines, ! 691: "Non-nil means print newlines in strings as backslash-n."); ! 692: print_escape_newlines = 0; ! 693: ! 694: /* prin1_to_string_buffer initialized in init_buffer_once in buffer.c */ ! 695: staticpro (&Vprin1_to_string_buffer); ! 696: ! 697: defsubr (&Sprin1); ! 698: defsubr (&Sprin1_to_string); ! 699: defsubr (&Sprinc); ! 700: defsubr (&Sprint); ! 701: defsubr (&Sterpri); ! 702: defsubr (&Swrite_char); ! 703: #ifndef standalone ! 704: defsubr (&Swith_output_to_temp_buffer); ! 705: #endif /* not standalone */ ! 706: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.