lib.c, and knock-on: Add MODE argument to `open_dvd'.
[dvdrip] / dvd-cache-keys.c
index 6a4a7a0..db085b6 100644 (file)
@@ -1,12 +1,18 @@
 #include "lib.h"
 
-static void usage(FILE *fp) { fprintf(fp, "usage: %s DEVICE\n", prog); }
+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)
+static void kick_vob(unsigned index, unsigned titlep)
 {
+  char fn[MAXFNSZ];
   dvd_file_t *vob;
+  secaddr start, len;
+
+  store_filename(fn, mkident(VOB, index, titlep));
+  start = UDFFindFile(dvd, fn, &len);
+  if (!start) return;
 
   vob = DVDOpenFile(dvd, index,
                    titlep ? DVD_READ_TITLE_VOBS : DVD_READ_MENU_VOBS);
@@ -16,10 +22,8 @@ static void kick_vob(int index, int titlep)
 
 int main(int argc, char *argv[])
 {
-  char fn[MAXFNSZ];
-  int opt;
-  unsigned i, f = 0;
-  secaddr start, len;
+  int opt, i;
+  unsigned j, f = 0;
 #define f_bogus 1u
 
   set_prog(argv[0]);
@@ -30,24 +34,23 @@ int main(int argc, char *argv[])
       default: f |= f_bogus; break;
     }
   }
-  if (argc - optind != 1) f |= f_bogus;
+  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 = optind; i < argc; i++) {
+    open_dvd(argv[i], O_RDONLY, 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);
+    for (j = 0; j < 100; j++) {
+      kick_vob(j, 0);
+      if (j) kick_vob(j, 1);
     }
+
+    DVDClose(dvd);
   }
 
-  if (dvd) DVDClose(dvd);
   progress_free(&progress);
   return (0);
 }