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 }