www.pudn.com > 日期、菜单、字符串的C函数.rar > READS.C


/*                          *** 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); 
}