1 /* $NetBSD: tgets.c,v 1.8 2016/06/11 06:22:11 dholland Exp $ */
2
3 /*-
4 * Copyright (c) 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)gets.c 8.1 (Berkeley) 6/11/93
32 */
33
34 #include <sys/param.h>
35
36 #include <lib/libsa/stand.h>
37
38 #include <hp300/stand/common/samachdep.h>
39
40 int
tgets(char * buf,size_t size)41 tgets(char *buf, size_t size)
42 {
43 int c;
44 int i;
45 char *lp = buf;
46
47 for (i = 240000; i > 0; i--) {
48 if (lp - buf == size) {
49 lp--;
50 *lp = '\0';
51 return 0;
52 }
53 c = tgetchar() & 0177;
54 if (c) {
55 for (;;) {
56 switch (c) {
57 case '\n':
58 case '\r':
59 *lp = '\0';
60 putchar('\n');
61 return 1;
62 case '\b':
63 case '\177':
64 if (lp > buf) {
65 lp--;
66 putchar('\b');
67 putchar(' ');
68 putchar('\b');
69 }
70 break;
71 case '#':
72 if (lp > buf)
73 --lp;
74 break;
75 case 'r' & 037: {
76 char *p;
77
78 putchar('\n');
79 for (p = buf; p < lp; ++p)
80 putchar(*p);
81 break;
82 }
83 case '@':
84 case 'u'&037:
85 case 'w'&037:
86 lp = buf;
87 putchar('\n');
88 break;
89 default:
90 *lp++ = c;
91 putchar(c);
92 }
93 c = getchar() & 0177;
94 }
95 }
96 }
97 return 0;
98 }
99