implement OCRNL, ONOCR, and ONLRET

Obtained from:	NetBSD
This commit is contained in:
assar 2001-03-04 06:04:50 +00:00
parent 28c7860338
commit 05286a6e61
6 changed files with 52 additions and 1 deletions

View File

@ -191,10 +191,16 @@ struct modes omodes[] = {
{ "-litout", OPOST, 0 },
{ "onlcr", ONLCR, 0 },
{ "-onlcr", 0, ONLCR },
{ "ocrnl", OCRNL, 0 },
{ "-ocrnl", 0, OCRNL },
{ "tabs", 0, OXTABS }, /* "preserve" tabs */
{ "-tabs", OXTABS, 0 },
{ "oxtabs", OXTABS, 0 },
{ "-oxtabs", 0, OXTABS },
{ "onocr", ONOCR, 0 },
{ "-onocr", 0, ONOCR },
{ "onlret", ONLRET, 0 },
{ "-onlret", 0, ONLRET },
{ NULL },
};

View File

@ -148,7 +148,10 @@ print(tp, wp, ldisc, fmt)
binit("oflags");
put("-opost", OPOST, 1);
put("-onlcr", ONLCR, 1);
put("-ocrnl", OCRNL, 0);
put("-oxtabs", OXTABS, 1);
put("-onocr", OXTABS, 0);
put("-onlret", OXTABS, 0);
/* control flags (hardware state) */
tmp = tp->c_cflag;

View File

@ -237,8 +237,18 @@ Map (do not map)
to
.Dv CR-NL
on output.
.It Cm ocrnl Pq Fl ocrnl
Map (do not map)
.Dv CR
to
.Dv NL
on output.
.It Cm oxtabs Pq Fl oxtabs
Expand (do not expand) tabs to spaces on output.
.It Cm onocr Pq Fl onocr
Do not (do) output CRs at column zero.
.It Cm onlret Pq Fl onlret
On the terminal NL performs (does not perform) the CR function.
.El
.Ss Local Modes:
.Pp

View File

@ -994,6 +994,8 @@ and are composed of the following masks:
/* map NL to CR-NL (ala
.Dv CRMOD )
*/
.It Dv OCRNL
/* map CR to NL */
.It Dv OXTABS
/* expand tabs to spaces */
.It Dv ONOEOT
@ -1001,6 +1003,10 @@ and are composed of the following masks:
.Dv EOT Ns 's
.Ql \&^D
on output) */
.It Dv ONOCR
/* do not transmit CRs on column 0 */
.It Dv ONLRET
/* on the termianl NL performs the CR function */
.El
.Pp
If
@ -1013,6 +1019,10 @@ If
is set, newlines are translated to carriage return, linefeeds.
.Pp
If
.Dv OCRNL
is set, carriage returns are translated to newlines.
.Pp
If
.Dv OXTABS
is set, tabs are expanded to the appropriate number of
spaces (assuming 8 column tab stops).
@ -1023,6 +1033,15 @@ is set,
.Tn ASCII
.Dv EOT Ns 's
are discarded on output.
.Pp
If
.Dv ONOCR
is set, no CR character is transmitted when at column 0 (first position).
.Pp
If
.Dv ONLRET
is set, the NL character is assumed to do the carriage-return function;
the column pointer will be set to 0.
.Ss Control Modes
Values of the
.Fa c_cflag

View File

@ -667,9 +667,16 @@ ttyoutput(c, tp)
if (c == '\n' && ISSET(tp->t_oflag, ONLCR)) {
tk_nout++;
tp->t_outcc++;
if (putc('\r', &tp->t_outq))
if (!ISSET(tp->t_lflag, FLUSHO) && putc('\r', &tp->t_outq))
return (c);
}
/* If OCRNL is set, translate "\r" into "\n". */
else if (c == '\r' && ISSET(tp->t_oflag, OCRNL))
c = '\n';
/* If ONOCR is set, don't transmit CRs when on column 0. */
else if (c == '\r' && ISSET(tp->t_oflag, ONOCR) && tp->t_column == 0)
return (-1);
tk_nout++;
tp->t_outcc++;
if (!ISSET(tp->t_lflag, FLUSHO) && putc(c, &tp->t_outq))
@ -684,6 +691,9 @@ ttyoutput(c, tp)
case CONTROL:
break;
case NEWLINE:
if (ISSET(tp->t_oflag, ONLCR | ONLRET))
col = 0;
break;
case RETURN:
col = 0;
break;

View File

@ -112,6 +112,9 @@
#define ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */
#define OXTABS 0x00000004 /* expand tabs to spaces */
#define ONOEOT 0x00000008 /* discard EOT's (^D) on output) */
#define OCRNL 0x00000010 /* map CR to NL on output */
#define ONOCR 0x00000020 /* no CR output at column 0 */
#define ONLRET 0x00000040 /* NL performs CR function */
#endif /*_POSIX_SOURCE */
/*