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