X-Git-Url: https://git.distorted.org.uk/~mdw/dvdrip/blobdiff_plain/822ac8a86682d421a76abad84a3235cdd17b58ea..dc53ebfaa3fb887f962b574c6bafa45b160fc765:/dvd-cache-keys.c diff --git a/dvd-cache-keys.c b/dvd-cache-keys.c new file mode 100644 index 0000000..6a4a7a0 --- /dev/null +++ b/dvd-cache-keys.c @@ -0,0 +1,53 @@ +#include "lib.h" + +static void usage(FILE *fp) { fprintf(fp, "usage: %s DEVICE\n", prog); } + +static dvd_reader_t *dvd; + +static void kick_vob(int index, int titlep) +{ + dvd_file_t *vob; + + vob = DVDOpenFile(dvd, index, + titlep ? DVD_READ_TITLE_VOBS : DVD_READ_MENU_VOBS); + if (!vob) bail("failed to open %s %d", titlep ? "title" : "menu", index); + DVDCloseFile(vob); +} + +int main(int argc, char *argv[]) +{ + char fn[MAXFNSZ]; + int opt; + unsigned i, f = 0; + secaddr start, len; +#define f_bogus 1u + + set_prog(argv[0]); + for (;;) { + opt = getopt(argc, argv, "h"); if (opt < 0) break; + switch (opt) { + case 'h': usage(stderr); exit(0); + default: f |= f_bogus; break; + } + } + if (argc - optind != 1) f |= f_bogus; + if (f&f_bogus) { usage(stderr); exit(2); } + + setlocale(LC_ALL, ""); + progress_init(&progress); + + open_dvd(argv[optind], 0, &dvd); + + for (i = 0; i < 100; i++) { + store_filename(fn, mkident(VOB, i, 0)); + start = UDFFindFile(dvd, fn, &len); if (start) kick_vob(i, 0); + if (i) { + store_filename(fn, mkident(VOB, i, 1)); + start = UDFFindFile(dvd, fn, &len); if (start) kick_vob(i, 1); + } + } + + if (dvd) DVDClose(dvd); + progress_free(&progress); + return (0); +}