2015-03-19 14:59:37 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Add shift command.
diff --git a/srtsync.c b/srtsync.c index 9fbb352..431a39c 100644 --- a/srtsync.c +++ b/srtsync.c @@ -148,6 +148,17 @@ free_subs(Subtitles **subs) *subs = NULL; } +void +shift(Subtitles *subs, int sign, uint32_t ms) +{ + int i; + + for (i = 0; i < subs->count; i++) { + subs->lines[i].on += sign * ms; + subs->lines[i].off += sign * ms; + } +} + int closest(Subtitles *subs, uint32_t ms) { @@ -200,18 +211,61 @@ search(Subtitles *subs, uint32_t ms, char *words[], int nwords) #undef SRT_CHECK } +void +usage(FILE *fp) +{ + fprintf(fp, + "usage:\n" + " srtsync (-h|--help|help) -- print this help message\n" + " srtsync search TIME [WORD [WORD [...]]] -- search around TIME\n" + " srtsync shift (-TIME|+TIME) -- shift all subtitles by TIME\n" + "\n" + ); +} + int main(int argc, char *argv[]) { Subtitles *subs; - int i; - if (argc < 2) + if (argc == 1) { + usage(stderr); return 1; + } + if (!(strcmp(argv[1], "-h") && strcmp(argv[1], "--help") && strcmp(argv[1], "help"))) { + usage(stdout); + return 0; + } subs = load_subs(stdin); - i = search(subs, hms2ms(argv[1]), argv + 2, argc - 2); - if (i >= 0) - print_line(stdout, subs, i); + if (!strcmp(argv[1], "search") && argc >= 3) { + int i; + i = search(subs, hms2ms(argv[2]), argv + 3, argc - 3); + if (i >= 0) { + print_line(stdout, subs, i); + return 0; + } else { + fprintf(stderr, "Not found.\n"); + return 1; + } + } + if (!strcmp(argv[1], "shift") && argc == 3) { + int sign; + uint32_t ms; + char *hms = argv[2]; + switch (*hms) { + case '-': + hms++; + sign = -1; + break; + case '+': + hms++; + default: + sign = +1; + } + ms = hms2ms(hms); + shift(subs, sign, ms); + } + save_subs(stdout, subs); free_subs(&subs); return 0; }