]> git.ipfire.org Git - thirdparty/bash.git/blob - support/xcase.c
Bash-4.3 patch 32
[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 #define LOWER 1
40 #define UPPER 2
41
42 int
43 main(ac, av)
44 int ac;
45 char **av;
46 {
47 int c, x;
48 int op;
49 FILE *inf;
50
51 op = 0;
52 while ((c = getopt(ac, av, "lnu")) != EOF) {
53 switch (c) {
54 case 'n':
55 setbuf (stdout, (char *)NULL);
56 break;
57 case 'u':
58 op = UPPER;
59 break;
60 case 'l':
61 op = LOWER;
62 break;
63 default:
64 fprintf(stderr, "casemod: usage: casemod [-lnu] [file]\n");
65 exit(2);
66 }
67 }
68 av += optind;
69 ac -= optind;
70
71 if (av[0] && (av[0][0] != '-' || av[0][1])) {
72 inf = fopen(av[0], "r");
73 if (inf == 0) {
74 fprintf(stderr, "casemod: %s: cannot open: %s\n", av[0], strerror(errno));
75 exit(1);
76 }
77 } else
78 inf = stdin;
79
80 while ((c = getc(inf)) != EOF) {
81 switch (op) {
82 case UPPER:
83 x = islower(c) ? toupper(c) : c;
84 break;
85 case LOWER:
86 x = isupper(c) ? tolower(c) : c;
87 break;
88 default:
89 x = c;
90 break;
91 }
92 putchar(x);
93 }
94
95 exit(0);
96 }