⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capitalize.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef sccsstatic  char sccsid[] = "@(#)capitalize.c 1.1 92/07/30";#endif#endif/* * Copyright (c) 1986 by Sun Microsystems, Inc. *//* *	capitalize -- Read stdin; "capitalize" it as described in Windows *	and Window Based Tools: Beginner's Guide, Chapter 16; and write *	the result to stdout. * *	Rules of capitalization: *	String completely capitalized with and without whitespace ==> *		convert all alphabetics to lower case. * *	String not completely capitalized but containing whitespace ==> *		toggle case of first letter of each "word"; note that a "word" *		is considered a continuous string of non-whitespace characters. *		A "word" beginning with punctuation will not, strictly speaking, *		be capitalized. * *	String not completely capitalized but without whitespace ==> *		convert all alphabetics to upper case.  Note that mixed case *		strings become entirely uppercase. * *	Note that non-alphabetic and non-whitespace characters do not *	count in figuring out the "caseness" or "whiteness" of a string. *	They are significant only in whether the first character of a "word" *	will be capitalized. * *	If one of the following options is specified then the nature *	of the input is ignored and the corresponding action takes place: * *	-l	Convert all alphabetics to lower case regardless of input *	-c	Toggle case of first letter of each word *	-u	Convert all alphabetics to upper case regardless of input */#include <stdio.h>#include <ctype.h>#include <sunwindow/sun.h>#define EXIT_NOTEMP	1#define EXIT_NOCLOSE	2/*ARGSUSED*/#ifdef STANDALONEmain(ac, av)#elsecapitalize_main(ac, av)#endif STANDALONE	int 	ac;	char	**av;{	char	*temp = "/tmp/capXXXXXX";	FILE	*tfp, *fopen();	int	c;	Bool	default_behavior, allcaps, whitespace;	char    *mktemp();	char	*progname;	progname = av[0];	default_behavior = True;	while(ac > 1 && av[1][0] == '-') {		switch(av[1][1]) {			case 'l':	/* Fold to lower case */				allcaps = True;				whitespace = False;				default_behavior = False;				break;			case 'c':	/* Capitalize individual words */				whitespace = True;				allcaps = False;				default_behavior = False;				break;			case 'u':	/* Fold to upper case */				whitespace = False;				allcaps = False;				default_behavior = False;				break;			default:				fprintf(stderr, "Unknown flag: %s\n", av[1]);				fprintf(stderr, "Usage: %s [-lcu]\n", progname);		}		--ac;		av++;	}	/* Attempt to open temporary file; if failure then just copy input	 * to output.	 */	(void)mktemp(temp);	if ((tfp = fopen(temp, "w+")) == NULL) {		(void)fprintf(stderr, "%s: can't open /tmp file\n", av[0]);		while ((c = getchar()) != EOF)			putchar(c);		exit(EXIT_NOTEMP);	}	/* Scan stdin writing to temporary file; determine if there is	 * whitespace and if all alphabetic characters are capitalized	 */	if(default_behavior) {		allcaps = True;		whitespace = False;	}	while ((c = getchar()) != EOF) {		if(default_behavior) {			if (isspace(c))				whitespace = True;			else if (isalpha(c) && islower(c))				allcaps = False;		}		putc(c, tfp);	}	/* Now depending on what we have learned or the requested option, do	 * the following:	 *	allcaps ==> convert all alphabetic characters to lowercase (-l)	 *	 *	whitespace ==> toggle the case of characters that begin	 *		a "word".  Observation:  "words" that start with a	 *		non-alphabetic character, e.g., parenthesis, will not	 *		be capitalized. (-c)	 *	 *	none of the above ==> there were some lower case characters	 *		and therefore everything is converted to upper case (-u)	 */	(void)fseek(tfp, 0L, 0);			/* rewind file */	if (allcaps)		while ((c = getc(tfp)) != EOF)			putchar((isalpha(c) && isupper(c)) ? tolower(c) : c);	else if (whitespace)		do {			while ((c = getc(tfp)) != EOF && isspace(c))			putchar(c);			if (c != EOF) {				if (isalpha(c))					putchar((islower(c)) ? toupper(c) : c);				else					putchar(c);			}			while ((c = getc(tfp)) != EOF && !isspace(c))				putchar(c);			if (c != EOF)				putchar(c);		} while (c != EOF);	else		while ((c = getc(tfp)) != EOF)			putchar((isalpha(c) && !isupper(c)) ? toupper(c) : c);	/* Cleanup temporary file */	if (unlink(temp) != 0) {		(void)fprintf(stderr, "%s: couldn't delete /tmp file\n", av[0]);		exit(EXIT_NOCLOSE);	}	exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -