5 #define _FILE_OFFSET_BITS 64
24 #include <sys/ioctl.h>
25 #include <sys/select.h>
33 #include <dvdread/dvd_reader.h>
34 #include <dvdread/dvd_udf.h>
35 #include <dvdread/ifo_read.h>
36 #include <dvdread/ifo_types.h>
38 #include "multiprogress.h"
40 #define CTYPE_HACK(fn, ch) fn((unsigned char)(ch))
41 #define ISDIGIT(ch) CTYPE_HACK(isdigit, ch)
42 #define ISSPACE(ch) CTYPE_HACK(isspace, ch)
44 #define STRCMP(a, op, b) (strcmp((a), (b)) op 0)
45 #define STRNCMP(a, op, b, n) (strncmp((a), (b), (n)) op 0)
46 #define MEMCMP(a, op, b, n) (memcmp((a), (b), (n)) op 0)
54 #define N(v) (sizeof(v)/sizeof((v)[0]))
57 #define SECTORS(n) (((n) + (SECTORSZ - 1))/SECTORSZ)
58 typedef uint_least32_t secaddr;
59 #define PRIuSEC PRIuLEAST32
60 #define SECLIMIT 0x00400000
62 #define PRINTF_LIKE(fmt, dots) __attribute__((format(printf, fmt, dots)))
63 #define NORETURN __attribute__((noreturn))
65 extern const char *prog;
67 extern void set_prog(const char *p);
68 extern void vmoan(const char *fmt, va_list ap);
69 extern void vmoan_syserr(int err, const char *fmt, va_list ap);
70 extern PRINTF_LIKE(1, 2) void moan(const char *fmt, ...);
71 extern PRINTF_LIKE(2, 3) void moan_syserr(int err, const char *fmt, ...);
72 extern PRINTF_LIKE(1, 2) NORETURN void bail(const char *fmt, ...);
73 extern PRINTF_LIKE(2, 3) NORETURN
74 void bail_syserr(int err, const char *fmt, ...);
77 extern double parse_float(const char **p_inout, unsigned f,
78 double min, double max, const char *what);
79 extern long parse_int(const char **p_inout, unsigned f,
80 long min, long max, const char *what);
82 extern void sit(double t);
84 extern void carefully_write(int fd, const void *buf, size_t sz);
85 extern void open_file_on_demand(const char *file, FILE **fp_inout,
87 extern void check_write(FILE *fp, const char *what);
88 extern void carefully_fclose(FILE *fp, const char *what);
89 extern off_t device_size(int fd, const char *file, int *blksz_out);
91 enum { RAW, IFO, VOB, BUP };
92 typedef uint_least32_t ident;
94 static inline ident mkident(unsigned kind, unsigned title, unsigned part)
95 { return (((ident)kind << 0) | ((ident)title << 8) | ((ident)part << 16)); }
96 static inline unsigned id_kind(ident id) { return ((id >> 0)&0x0ff); }
97 static inline unsigned id_title(ident id) { return ((id >> 8)&0x0ff); }
98 static inline unsigned id_part(ident id) { return ((id >> 16)&0x0ff); }
100 #define MAXFNSZ (1 + 8 + 1 + 12 + 1)
101 extern void store_filename(char *buf, ident id);
103 #define DIF_MUSTVOLINF 1u
104 #define DIF_MUSTIFOHASH 2u
106 extern int dvd_id(char *p, dvd_reader_t *dvd, unsigned f, const char *file);
108 struct banner_progress_item {
109 struct progress_item _base;
113 extern struct progress_state progress;
115 extern void show_banner(const char *msg);
116 extern void hide_banner(void);
118 extern void open_dvd(const char *device, int mode,
119 int *fd_out, dvd_reader_t **dvd_out);