]> git.ipfire.org Git - thirdparty/bash.git/blame - support/xcase.c
Bash-5.2 patch 26: fix typo when specifying readline's custom color prefix
[thirdparty/bash.git] / support / xcase.c
CommitLineData
3185942a
JA
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
36extern int errno;
37#endif
38
a0c0a00f
CR
39extern int optind;
40
3185942a
JA
41#define LOWER 1
42#define UPPER 2
43
ac50fbac 44int
3185942a
JA
45main(ac, av)
46int ac;
47char **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}