2.11BSD/src/bin/csh/sh.print.c
/*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley Software License Agreement
* specifies the terms and conditions for redistribution.
*/
#if !defined(lint) && defined(DOSCCS)
static char *sccsid = "@(#)sh.print.c 5.2 (Berkeley) 6/6/85";
#endif
#include "sh.h"
#include <sys/ioctl.h>
/*
* C Shell
*/
psecs(l)
long l;
{
register int i;
i = l / 3600;
if (i) {
printf("%d:", i);
i = l % 3600;
p2dig(i / 60);
goto minsec;
}
i = l;
printf("%d", i / 60);
minsec:
i %= 60;
printf(":");
p2dig(i);
}
p2dig(i)
register int i;
{
printf("%d%d", i / 10, i % 10);
}
char linbuf[128];
char *linp = linbuf;
putchar(c)
register int c;
{
if ((c & QUOTE) == 0 && (c == 0177 || c < ' ' && c != '\t' && c != '\n')) {
putchar('^');
if (c == 0177)
c = '?';
else
c |= 'A' - 1;
}
c &= TRIM;
*linp++ = c;
if (c == '\n' || linp >= &linbuf[sizeof linbuf - 2])
flush();
}
draino()
{
linp = linbuf;
}
flush()
{
register int unit;
int lmode;
if (linp == linbuf)
return;
if (haderr)
unit = didfds ? 2 : SHDIAG;
else
unit = didfds ? 1 : SHOUT;
#ifdef TIOCLGET
if (didfds == 0 && ioctl(unit, TIOCLGET, (char *)&lmode) == 0 &&
lmode&LFLUSHO) {
lmode = LFLUSHO;
(void) ioctl(unit, TIOCLBIC, (char *)&lmode);
(void) write(unit, "\n", 1);
}
#endif
(void) write(unit, linbuf, linp - linbuf);
linp = linbuf;
}