From 08032f89babab3b5ec792f6aa394a28f95112e11 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Mon, 18 Jul 2016 00:09:23 +0200 Subject: seq: import most parts of mseq, make blaze822_loop resolve ranges --- mseq.c | 130 +++-------------------------------------------------------------- 1 file changed, 6 insertions(+), 124 deletions(-) (limited to 'mseq.c') diff --git a/mseq.c b/mseq.c index 776966d..a700b72 100644 --- a/mseq.c +++ b/mseq.c @@ -12,54 +12,6 @@ #include "blaze822.h" -static const char * -readlin(const char *p) -{ - static char b[PATH_MAX]; - int r = readlink(p, b, sizeof b - 1); - if (r < 0) - r = 0; - b[r] = 0; - return b; -} - -char * -parse_relnum(char *a, long cur, long last, long *out) -{ - long base; - char *b; - - if (strcmp(a, "+") == 0) - a = ".+1"; - else if (strcmp(a, "-") == 0) - a = ".-1"; - else if (strcmp(a, "$") == 0) - a = "-1"; - - if (*a == '.') { - a++; - base = cur; - } else if (*a == '-') { - base = last + 1; - } else { - base = 0; - } - errno = 0; - long d = strtol(a, &b, 10); - if (errno != 0) { - perror("strtol"); - exit(1); - } - - *out = base + d; - if (*out <= 0) - *out = 1; - if (*out > last) - *out = last; - - return b; -} - int main(int argc, char *argv[]) { @@ -67,85 +19,15 @@ main(int argc, char *argv[]) if (!map) return 1; - long lines; - long cur = 0; - - const char *curfile = readlin("map.cur"); - char *curpath; - - char *s, *t; - for (s = map, lines = 0; s; s = t) { - t = strchr(s+1, '\n'); - if (!t) - break; - s++; -// printf("{%.*s}\n", t-s, s); - lines++; - // XXX compare modulo whitespace - if (!cur && - strncmp(s, curfile, strlen(curfile)) == 0 && - s[strlen(curfile)] == '\n') - cur = lines; - } - lines--; - - long i, start, stop; + int i; + char *f; + struct blaze822_seq_iter iter = { 0 }; for (i = 1; i < argc; i++) { - char *a = argv[i]; - start = stop = 0; - - while (*a && *a != ':') { - char *b = parse_relnum(a, cur, lines, &start); - if (a == b) { - printf("huh\n"); - exit(1); - } - a = b; - } - if (*a == ':') { - a++; - if (!*a) { - stop = lines; - } else { - char *b = parse_relnum(a, cur, lines, &stop); - if (a == b) { - printf("huh\n"); - exit(1); - } - a = b; - } - } else if (!*a) { - stop = start; - } else { - printf("huh\n"); - exit(1); - } - - long line; - for (s = map, line = 0; s; s = t) { - t = strchr(s+1, '\n'); - if (!t) - break; - s++; - line++; - - if (line >= start && line <= stop) { - fwrite(s, 1, t-s, stdout); - putchar('\n'); - cur = line; - curpath = s; - while (*curpath == ' ') - curpath++; - } + while ((f = blaze822_seq_next(map, argv[i], &iter))) { + printf("%s\n", f); + free(f); } } -/* - char *e = strchr(curpath, '\n'); - unlink("map.cur-"); - symlink(strndup(curpath, e-curpath), "map.cur-"); - rename("map.cur-", "map.cur"); -*/ - return 0; } -- cgit 1.4.1