spark fix: negative num supp add
This commit is contained in:
parent
ccd5c7a3f9
commit
257cadf091
|
@ -4,75 +4,78 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
long parse_long(const char *str) {
|
int parse_long(const char *str, long *res) {
|
||||||
long val;
|
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
val = strtol(str, &ptr, 0);
|
*res = strtol(str, &ptr, 0);
|
||||||
if (*ptr || val == 0)
|
if (*ptr)
|
||||||
return 1;
|
return 0;
|
||||||
|
|
||||||
return val;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print(long diff, long val, long min) {
|
void print(long diff, char *str, long min) {
|
||||||
|
long val = 0;
|
||||||
|
if (!parse_long(str, &val))
|
||||||
|
return;
|
||||||
|
|
||||||
|
val -= min;
|
||||||
putchar('\xe2');
|
putchar('\xe2');
|
||||||
putchar('\x96');
|
putchar('\x96');
|
||||||
putchar('\x82' + round(val - min - 1) / diff * 7);
|
putchar('\x81' + round(val) / diff * 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
unsigned int r_flag = 0;
|
if (argc == 1) {
|
||||||
char ret = '\n';
|
|
||||||
|
|
||||||
int opt;
|
|
||||||
while ((opt = getopt(argc, argv, "nr")) != -1) {
|
|
||||||
switch (opt) {
|
|
||||||
case 'r':
|
|
||||||
r_flag = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'n':
|
|
||||||
ret = '\r';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("spark [val1 val2...]\n\t[-n Use \\r] [-r Reverse args]\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
argv += optind;
|
|
||||||
argc -= optind;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
|
||||||
fprintf(stderr, "spark: missing operands\n");
|
fprintf(stderr, "spark: missing operands\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int r_flag = 0;
|
||||||
|
char ret = '\n';
|
||||||
|
|
||||||
long min = 0;
|
long min = 0;
|
||||||
long max = 0;
|
long max = 0;
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
long val = parse_long(argv[i]);
|
long val = 0;
|
||||||
if (val > max)
|
if (parse_long(argv[i], &val)) {
|
||||||
max = val;
|
if (val > max)
|
||||||
|
max = val;
|
||||||
|
|
||||||
else if (val < min)
|
else if (val < min)
|
||||||
min = val;
|
min = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (!strcmp(argv[i], "-r")) {
|
||||||
|
r_flag = 1;
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (!strcmp(argv[i], "-n")) {
|
||||||
|
ret = '\r';
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
printf("spark [num1 num2...]\n\t[-n Use \\r] [-r Reverse]\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long diff = max - min - 1;
|
long diff = max - min;
|
||||||
if (diff < 1)
|
if (diff < 1)
|
||||||
diff = 1;
|
diff = 1;
|
||||||
|
|
||||||
if (r_flag)
|
if (r_flag)
|
||||||
for (int i = argc - 1; i >= 0; i--)
|
for (int i = argc - 1; i >= 1; i--)
|
||||||
print(diff, parse_long(argv[i]), min);
|
print(diff, argv[i], min);
|
||||||
|
|
||||||
else
|
else
|
||||||
for (int i = 0; i < argc; i++)
|
for (int i = 1; i < argc; i++)
|
||||||
print(diff, parse_long(argv[i]), min);
|
print(diff, argv[i], min);
|
||||||
|
|
||||||
putchar(ret);
|
putchar(ret);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user