A big mess of changes all at once.
[dvdrip] / dvd-cache-keys.c
diff --git a/dvd-cache-keys.c b/dvd-cache-keys.c
new file mode 100644 (file)
index 0000000..6a4a7a0
--- /dev/null
@@ -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);
+}