#define	BELL	007
#define	BS	010
#define	LF	0x0a
#define	CR	0x0d
#define	CNTRLU	'U'-'@'
#define	DEL	0177

gets(buf)
char *buf;
{
    int i = 0;
    char c;

    while(1) {
	c = getchar();
	c &= 0177;
	switch(c) {
	case CR:
	case LF:		
	    if (i)
	      buf[i] = 0;
	    if(c == CR) putchar(c);
	    return i;
	    break;
	case BS:
	case DEL:
	    if(i) {
		buf[i--] = 0;
		if (c==DEL) putchar(BS);
		putchar(' '); putchar(BS);
	    }
	    break;
	case CNTRLU:
	    i = 0;
	    putchar(LF);
	    break;
	default:
	    if(i == 79) {
		putchar(BELL);
		break;
	    } else {
		buf[i++] = c;
		break;
	    }
	}
    }
}

tgets(tmo, buf)
int tmo;
char *buf;
{
    int i = 0;
    char c;

    while(1) {
	c = getchart(tmo);
	if (c == -1)
	  return(c);
	c &= 0177;
	switch(c) {
	case CR:
	case LF:		
	    if (i)
	      buf[i] = 0;
	    if(c == CR) putchar(c);
	    return(i);
	    break;
	case BS:
	case DEL:
	    if(i) {
		buf[i--] = 0;
		if (c==DEL) putchar(BS);
		putchar(' '); putchar(BS);
	    }
	    break;
	case CNTRLU:
	    i = 0;
	    putchar(LF);
	    break;
	default:
	    if(i == 79) {
		putchar(BELL);
		break;
	    } else {
		buf[i++] = c;
		break;
	    }
	}
    }
}


puts(s)
char  *s;
{
    while(*s)
      putchar(*s++);
}
