home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Guide
/
c-cplusplus-interactive-guide.iso
/
c_ref
/
csource3
/
153_01
/
reads.c
< prev
next >
Wrap
Text File
|
1985-03-11
|
2KB
|
81 lines
/* *** reads.c *** */
/* */
/* IBM - PC microsoft "C" */
/* */
/* Function to read a string from stdin. Returns the number of */
/* characters entered including the NULL byte. */
/* */
/* Written by L. Cuthbertson, March 1984. */
/* */
/*********************************************************************/
/* */
#define NULL '\000'
#define CONC '\003'
#define BELL '\007'
#define CONX '\030'
#define ESC '\033'
#define DEL '\177'
int reads(s,maxlen)
char s[];
int maxlen;
{
int len,c,readc(),writec();
/* acceptance loop */
for (len=1;((c=readc()) != '\r') && (c != '\n');len++) {
/* handle backspaces and deletes */
if ((c == '\b') || (c == DEL)) {
if (len > 1) {
writec('\b');
writec(' ');
writec('\b');
len -= 2;
} else {
len = 0;
}
/* handle escape and control-z */
} else if ((c == ESC) || (c == CONX) || (c < 0)) {
while (len > 1) {
writec('\b');
writec(' ');
writec('\b');
len--;
}
len = 0;
/* handle control-c */
} else if (c == CONC) {
exit();
/* ring their bell if length exceeded */
} else if (len >= maxlen) {
writec (BELL);
len--;
/* handle strange control characters */
} else if (c < ' ') {
writec (BELL);
len--;
/* got a valid character */
} else {
s[len-1] = c;
writec(c);
}
}
/* add string terminator */
s[len-1] = NULL;
/* return total length of string entered */
return (len);
}
)
2575 NEXT T
2578 RETURN
2580 REM ******* OPEN THIRD FILE ****