* Copyright (c) 1988 Mark Nudleman
* Copyright (c) 1988 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by Mark Nudleman and the University of California, Berkeley. The
* name of Mark Nudleman or the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
static char sccsid
[] = "@(#)output.c 5.8 (Berkeley) %G%";
* High level routines dealing with the output to the screen.
int errmsgs
; /* Count of messages displayed by error() */
extern int sc_width
, sc_height
;
extern int ul_width
, ue_width
;
extern int so_width
, se_width
;
extern int bo_width
, be_width
;
extern int screen_trashed
;
/* display the line which is in the line buffer. */
extern int auto_wrap
, ignaw
;
* Don't output if a signal is pending.
for (p
= line
; *p
!= '\0'; p
++)
} while ((column
% tabstop
) != 0);
* Control characters arrive here as the
* normal character [CARAT_CHAR(c)] with
* the 0200 bit set. See pappend().
if (column
< sc_width
|| !auto_wrap
|| ignaw
)
if (write(1, obuf
, n
) != n
)
* Purge any pending output.
if (ob
>= &obuf
[sizeof(obuf
)])
static char return_to_continue
[] = "(press RETURN)";
* Output a message in the lower left corner of the screen
* and wait for carriage return.
* Nothing has been displayed yet. Output this message on
* error output (file descriptor 2) and don't wait for a
* This has the desirable effect of producing all error
* messages on error output if standard output is directed
* to a file. It also does the same if we never produce
* any real output; for example, if the input file(s) cannot
* be opened. If we do eventually produce output, code in
* edit() makes sure these messages can be seen before they
* are overwritten or scrolled away.
(void)write(2, s
, strlen(s
));
putstr(return_to_continue
);
if ((ch
= getchr()) != '\n') {
if (strlen(s
) + sizeof(return_to_continue
) +
so_width
+ se_width
+ 1 > sc_width
)
* Printing the message has probably scrolled the screen.
* {{ Unless the terminal doesn't have auto margins,
* in which case we just hammered on the right margin. }}
static char intr_to_abort
[] = "... (interrupt to abort)";