* Copyright (c) 1988 Mark Nudleman
* Copyright (c) 1988 Regents of the University of California.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)output.c 5.9 (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)";