* Copyright (c) 1988 Mark Nudleman
* Copyright (c) 1988 Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* 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 the University of California, Berkeley. The name of 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.3 (Berkeley) %G%";
* High level routines dealing with the output to the screen.
public 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.
line
= (twiddle
) ? "~" : "";
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
)
* Is a given character a "control" character?
return (c
< ' ' || c
== '\177');
* Return the printable character used to identify a control character
* (printed after a carat; e.g. '\3' => "^C").
return ((c
== '\177') ? '?' : (c
| 0100));
if (write(1, obuf
, n
) != n
)
if (ob
>= &obuf
[sizeof(obuf
)])
* Output a message in the lower left corner of the screen
* and wait for carriage return.
static char return_to_continue
[] = " (press RETURN)";
* Nothing has been displayed yet.
* Output this message on error output (file
* descriptor 2) and don't wait for a keystroke
* 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.
putstr(return_to_continue
);
if (c
!= '\n' && c
!= '\r' && c
!= ' ' && c
!= READ_INTR
)
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)";