Skip to content

Commit 0da56b9

Browse files
committed
fix non-ordered options
1 parent bf485f1 commit 0da56b9

File tree

2 files changed

+105
-70
lines changed

2 files changed

+105
-70
lines changed

kfc.c

Lines changed: 94 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ find_palettes(void)
1414
{
1515
if ( access("/usr/share/kfc/palettes", F_OK) == 0 )
1616
{
17-
strcpy(p.SEQ, "/usr/share/kfc/palettes");
17+
strcpy(p.seq, "/usr/share/kfc/palettes");
1818
return 0;
1919
}
2020

2121
if ( access("palettes", F_OK) == 0 )
2222
{
23-
strcpy(p.SEQ, "palettes");
23+
strcpy(p.seq, "palettes");
2424
return 0;
2525
}
2626

@@ -32,7 +32,7 @@ select_palette(void)
3232
{
3333
p.len = 255;
3434
p.line = malloc(sizeof(char) * p.len);
35-
p.fp = fopen(p.SEL, "r");
35+
p.fp = fopen(p.sel, "r");
3636

3737
if (p.fp == NULL)
3838
{
@@ -42,14 +42,14 @@ select_palette(void)
4242

4343
while(fgets(p.line, p.len, p.fp) != NULL)
4444
{
45-
p.EVAR = strtok(p.line, "=");
46-
p.EVAL = strtok(NULL, "=");
47-
setenv(p.EVAR, p.EVAL, 1);
45+
p.evar = strtok(p.line, "=");
46+
p.eval = strtok(NULL, "=");
47+
setenv(p.evar, p.eval, 1);
4848
}
4949

5050
fclose(p.fp);
5151
free(p.line);
52-
sprintf(p.PRI, "printf %%b \"\
52+
sprintf(p.pri, "printf %%b \"\
5353
\\033]4;0;#$(echo $color00)\\033\\ \
5454
\\033]4;1;#$(echo $color01)\\033\\ \
5555
\\033]4;2;#$(echo $color02)\\033\\ \
@@ -69,23 +69,23 @@ select_palette(void)
6969
\\033]10;#$(echo $foreground)\\033\\ \
7070
\\033]11;#$(echo $background)\\033\\ \
7171
\\033]12;#$(echo $cursor)\\033\\ \" \033[21D");
72-
p.fp = fopen(p.CSEQ, "w");
73-
fprintf(p.fp, "%s", p.PRI);
72+
p.fp = fopen(p.cseq, "w");
73+
fprintf(p.fp, "%s", p.pri);
7474
fclose(p.fp);
75-
p.fp = fopen(p.CCUR, "w");
76-
fprintf(p.fp, "%s", p.SEL);
75+
p.fp = fopen(p.ccur, "w");
76+
fprintf(p.fp, "%s", p.sel);
7777
fclose(p.fp);
78-
sprintf(p.CLI, "%s", p.PRI);
79-
system(p.CLI);
78+
sprintf(p.cli, "%s", p.pri);
79+
system(p.cli);
8080
return 0;
8181
}
8282

8383
int
8484
list_palette(void)
8585
{
86-
p.dr = opendir(p.SEL);
86+
p.dr = opendir(p.sel);
8787

88-
if (p.dr == NULL)
88+
if ( p.dr == NULL )
8989
{
9090
fprintf(stderr, "Could not open directory\n");
9191
return 1;
@@ -106,10 +106,10 @@ list_palette(void)
106106
int
107107
random_palette(void)
108108
{
109-
p.dr = opendir(p.SEL);
109+
p.dr = opendir(p.sel);
110110
p.randf = 0;
111111

112-
if (p.dr == NULL)
112+
if ( p.dr == NULL )
113113
{
114114
fprintf(stderr, "Could not open directory\n");
115115
return 1;
@@ -124,13 +124,13 @@ random_palette(void)
124124
srand(time(0));
125125
p.i = (rand() % (p.randf - 2 + 1)) + 2;
126126
p.randf = 0;
127-
p.dr = opendir(p.SEL);
128-
while(( de = readdir(p.dr)) != NULL )
127+
p.dr = opendir(p.sel);
128+
while( (de = readdir(p.dr)) != NULL )
129129
{
130130
if (p.i == p.randf)
131131
{
132-
strcat(p.SEL, "/");
133-
strcat(p.SEL, de->d_name);
132+
strcat(p.sel, "/");
133+
strcat(p.sel, de->d_name);
134134
}
135135
p.randf++;
136136
}
@@ -142,7 +142,7 @@ print_palette(void)
142142
{
143143
p.len = 255;
144144
p.line = malloc(sizeof(char) * p.len);
145-
p.fp = fopen(p.CCUR, "r");
145+
p.fp = fopen(p.ccur, "r");
146146

147147
if (p.fp == NULL)
148148
{
@@ -154,7 +154,7 @@ print_palette(void)
154154
fclose(p.fp);
155155
free(p.line);
156156

157-
for (p.i = 0; p.i < 15; p.i++)
157+
for ( p.i = 0; p.i < 15; p.i++ )
158158
{
159159
printf("\033[48;5;%dm \033[0m", p.i);
160160

@@ -168,6 +168,21 @@ print_palette(void)
168168
return 0;
169169
}
170170

171+
int
172+
print_usage(void)
173+
{
174+
printf("\
175+
usage: kfc [-s palette|-r|-L] [l|-v|-p]\n \
176+
-s palette Select a palette\n \
177+
-l List all palettes\n \
178+
-p Print current palette\n \
179+
-r Select a random palette\n \
180+
-L Set light themes (modifier for -s/-r)\n \
181+
-h Show this information\n \
182+
-v Show version information\n");
183+
return 0;
184+
}
185+
171186
int
172187
main(int argc, char **argv)
173188
{
@@ -179,23 +194,25 @@ main(int argc, char **argv)
179194

180195
extern char *optarg;
181196
extern int optind, optopt;
182-
p.MODE = "dark";
197+
int eflag, sflag, rflag, lflag;
198+
eflag = sflag = rflag = lflag = 0;
199+
p.mode = "dark";
183200

184-
if ( (p.CONF = getenv("XDG_CONFIG_HOME")) == NULL )
201+
if ( (p.conf = getenv("XDG_CONFIG_HOME")) == NULL )
185202
{
186203
fprintf(stderr, "XDG_CONFIG_HOME not defined\n");
187204
exit(2);
188205
}
189206

190-
strcat(p.CONF, "/kfc");
207+
strcat(p.conf, "/kfc");
191208

192-
if ( mkdir(p.CONF,0777) == 0 )
209+
if ( mkdir(p.conf, 0777) == 0 )
193210
{
194211
puts("Created 'kfc' directory in XDG_CONFIG_HOME.");
195212
}
196213

197-
snprintf(p.CCUR, sizeof(p.CCUR), "%s/current", p.CONF);
198-
snprintf(p.CSEQ, sizeof(p.CSEQ), "%s/sequence", p.CONF);
214+
snprintf(p.ccur, sizeof(p.ccur), "%s/current", p.conf);
215+
snprintf(p.cseq, sizeof(p.cseq), "%s/sequence", p.conf);
199216

200217
if (find_palettes() == 1)
201218
{
@@ -207,51 +224,69 @@ main(int argc, char **argv)
207224
{
208225
switch (p.cval)
209226
{
210-
case 'r':
211-
snprintf(p.SEL, sizeof(p.SEL), "%s/%s", p.SEQ, p.MODE);
212-
random_palette();
213-
select_palette();
214-
break;
215-
case 'l':
216-
snprintf(p.SEL, sizeof(p.SEL), "%s/%s", p.SEQ, p.MODE);
217-
list_palette();
218-
break;
219-
case 'L':
220-
p.MODE = "light";
221-
break;
222227
case 'v':
223-
printf("0.0.8\n");
228+
puts("0.0.8");
224229
break;
225230
case 'h':
226-
p.FLAG++;
231+
print_usage();
227232
break;
233+
case 'L':
234+
p.mode = "light";
235+
break;
236+
case 'l':
237+
lflag++;
238+
break;
239+
case 'r':
240+
sflag++;
241+
rflag++;
242+
break;
228243
case 's':
229-
snprintf(p.SEL, sizeof(p.SEL), "%s/%s/%s", p.SEQ, p.MODE, optarg);
230-
select_palette();
244+
if (rflag)
245+
{
246+
fprintf(stderr, "Cannot specify -r with -s\n");
247+
eflag++;
248+
}
249+
sflag++;
250+
p.sval = optarg;
231251
break;
232252
case 'p':
233253
print_palette();
234254
break;
235255
case ':':
236256
fprintf(stderr, "Option -%c requires an operand\n", optopt);
237-
p.FLAG++;
257+
eflag++;
238258
break;
239259
case '?':
240260
fprintf(stderr, "Unrecognized option: -%c\n", optopt);
241-
p.FLAG++;
261+
eflag++;
242262
}
243-
}
244-
if (p.FLAG)
263+
}
264+
265+
if (eflag)
245266
{
246-
printf("\
247-
usage: kfc [-s palette|-r|-L] [l|-v|-p]\n \
248-
-s palette Select a palette\n \
249-
-l List all palettes\n \
250-
-p Print current palette\n \
251-
-r Select a random palette\n \
252-
-L Set light themes (modifier for -s/-r)\n \
253-
-h Show this information\n \
254-
-v Show version information\n");
255-
}
267+
print_usage();
268+
exit(2);
269+
}
270+
271+
snprintf(p.sel, sizeof(p.sel), "%s/%s", p.seq, p.mode);
272+
273+
if (lflag)
274+
{
275+
list_palette();
276+
}
277+
278+
if (sflag)
279+
{
280+
if (rflag)
281+
{
282+
random_palette();
283+
}
284+
else
285+
{
286+
snprintf(p.sel, sizeof(p.sel), "%s/%s/%s", p.seq, p.mode, p.sval);
287+
}
288+
select_palette();
289+
}
290+
256291
return 0;
257292
}

kfc.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ struct
77
DIR *dr;
88
char *line;
99
size_t len;
10-
int FLAG; // flag to print useage page
11-
char *MODE; // "light" or "dark"
12-
char *CONF; // configuration path
13-
char *EVAR; // environment variable name
14-
char *EVAL; // environment variable value
15-
char SEQ[225];
16-
char CCUR[255]; // configuration path, current file
17-
char CSEQ[255]; // configuration path, sequence file
18-
char SEL[1023]; // selected palette
19-
char PRI[1023];
20-
char CLI[1023];
10+
char *sval;
11+
char *mode; // "light" or "dark"
12+
char *conf; // configuration path
13+
char *evar; // environment variable name
14+
char *eval; // environment variable value
15+
char seq[225];
16+
char ccur[255]; // configuration path, current file
17+
char cseq[255]; // configuration path, sequence file
18+
char sel[1023]; // selected palette
19+
char pri[1023];
20+
char cli[1023];
2121
} p;
2222

2323
struct dirent *de;

0 commit comments

Comments
 (0)