spark fix: r, n args add
This commit is contained in:
parent
1301d3f5ef
commit
ccd5c7a3f9
|
@ -1,4 +1,5 @@
|
|||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
@ -14,37 +15,65 @@ long parse_long(const char *str) {
|
|||
return val;
|
||||
}
|
||||
|
||||
void print(long diff, long val, long min) {
|
||||
putchar('\xe2');
|
||||
putchar('\x96');
|
||||
putchar('\x82' + round(val - min - 1) / diff * 7);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
long min = 0;
|
||||
long max = 0;
|
||||
unsigned int r_flag = 0;
|
||||
char ret = '\n';
|
||||
|
||||
if (argc > 1) {
|
||||
for (int i = 1; i < argc; i++) {
|
||||
long val = parse_long(argv[i]);
|
||||
if (val > max)
|
||||
max = val;
|
||||
int opt;
|
||||
while ((opt = getopt(argc, argv, "nr")) != -1) {
|
||||
switch (opt) {
|
||||
case 'r':
|
||||
r_flag = 1;
|
||||
break;
|
||||
|
||||
else if (val < min)
|
||||
min = val;
|
||||
case 'n':
|
||||
ret = '\r';
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("spark [val1 val2...]\n\t[-n Use \\r] [-r Reverse args]\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
printf("spark [val1 val2...]\n");
|
||||
return 0;
|
||||
argv += optind;
|
||||
argc -= optind;
|
||||
|
||||
if (argc == 0) {
|
||||
fprintf(stderr, "spark: missing operands\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
long min = 0;
|
||||
long max = 0;
|
||||
|
||||
for (int i = 1; i < argc; i++) {
|
||||
long val = parse_long(argv[i]);
|
||||
if (val > max)
|
||||
max = val;
|
||||
|
||||
else if (val < min)
|
||||
min = val;
|
||||
}
|
||||
|
||||
long diff = max - min - 1;
|
||||
if (diff < 1)
|
||||
diff = 1;
|
||||
|
||||
for (int i = 1; i < argc; i++) {
|
||||
putchar('\xe2');
|
||||
putchar('\x96');
|
||||
putchar('\x82' + round(parse_long(argv[i]) - min - 1) / diff * 7);
|
||||
}
|
||||
if (r_flag)
|
||||
for (int i = argc - 1; i >= 0; i--)
|
||||
print(diff, parse_long(argv[i]), min);
|
||||
|
||||
putchar('\n');
|
||||
else
|
||||
for (int i = 0; i < argc; i++)
|
||||
print(diff, parse_long(argv[i]), min);
|
||||
|
||||
putchar(ret);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue