chiark / gitweb /
Merge branch 'master' of git.distorted.org.uk:~mdw/publish/public-git/dvdrip
[dvdrip] / dvd-cache-keys.c
1 #include "lib.h"
2
3 static void usage(FILE *fp) { fprintf(fp, "usage: %s DEVICE ...\n", prog); }
4
5 static dvd_reader_t *dvd;
6
7 static void kick_vob(unsigned index, unsigned titlep)
8 {
9   char fn[MAXFNSZ];
10   dvd_file_t *vob;
11   secaddr start, len;
12
13   store_filename(fn, mkident(VOB, index, titlep));
14   start = UDFFindFile(dvd, fn, &len);
15   if (!start) return;
16
17   vob = DVDOpenFile(dvd, index,
18                     titlep ? DVD_READ_TITLE_VOBS : DVD_READ_MENU_VOBS);
19   if (!vob) bail("failed to open %s %d", titlep ? "title" : "menu", index);
20   DVDCloseFile(vob);
21 }
22
23 int main(int argc, char *argv[])
24 {
25   int opt, i;
26   unsigned j, f = 0;
27 #define f_bogus 1u
28
29   set_prog(argv[0]);
30   for (;;) {
31     opt = getopt(argc, argv, "h"); if (opt < 0) break;
32     switch (opt) {
33       case 'h': usage(stderr); exit(0);
34       default: f |= f_bogus; break;
35     }
36   }
37   if (argc - optind < 1) f |= f_bogus;
38   if (f&f_bogus) { usage(stderr); exit(2); }
39
40   setlocale(LC_ALL, "");
41   progress_init(&progress);
42
43   for (i = optind; i < argc; i++) {
44     open_dvd(argv[i], O_RDONLY, 0, &dvd);
45
46     for (j = 0; j < 100; j++) {
47       kick_vob(j, 0);
48       if (j) kick_vob(j, 1);
49     }
50
51     DVDClose(dvd);
52   }
53
54   progress_free(&progress);
55   return (0);
56 }