]> git.ipfire.org Git - thirdparty/bash.git/blob - support/xcase.c
Bash-4.4 distribution sources and documentation
[thirdparty/bash.git] / support / xcase.c
1 /* xcase - change uppercase characters to lowercase or vice versa. */
2
3 /* Copyright (C) 2008,2009 Free Software Foundation, Inc.
4
5 This file is part of GNU Bash.
6
7 Bash is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 Bash is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include <stdio.h>
26 #include <ctype.h>
27
28 #if HAVE_UNISTD_H
29 #include <unistd.h>
30 #endif
31
32 #include "bashansi.h"
33 #include <errno.h>
34
35 #ifndef errno
36 extern int errno;
37 #endif
38
39 extern int optind;
40
41 #define LOWER 1
42 #define UPPER 2
43
44 int
45 main(ac, av)
46 int ac;
47 char **av;
48 {
49 int c, x;
50 int op;
51 FILE *inf;
52
53 op = 0;
54 while ((c = getopt(ac, av, "lnu")) != EOF) {
55 switch (c) {
56 case 'n':
57 setbuf (stdout, (char *)NULL);
58 break;
59 case 'u':
60 op = UPPER;
61 break;
62 case 'l':
63 op = LOWER;
64 break;
65 default:
66 fprintf(stderr, "casemod: usage: casemod [-lnu] [file]\n");
67 exit(2);
68 }
69 }
70 av += optind;
71 ac -= optind;
72
73 if (av[0] && (av[0][0] != '-' || av[0][1])) {
74 inf = fopen(av[0], "r");
75 if (inf == 0) {
76 fprintf(stderr, "casemod: %s: cannot open: %s\n", av[0], strerror(errno));
77 exit(1);
78 }
79 } else
80 inf = stdin;
81
82 while ((c = getc(inf)) != EOF) {
83 switch (op) {
84 case UPPER:
85 x = islower(c) ? toupper(c) : c;
86 break;
87 case LOWER:
88 x = isupper(c) ? tolower(c) : c;
89 break;
90 default:
91 x = c;
92 break;
93 }
94 putchar(x);
95 }
96
97 exit(0);
98 }