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)
53 #define N(v) (sizeof(v)/sizeof((v)[0]))
56 #define SECTORS(n) (((n) + (SECTORSZ - 1))/SECTORSZ)
57 typedef uint_least32_t secaddr
;
58 #define PRIuSEC PRIuLEAST32
59 #define SECLIMIT 0x00400000
61 #define PRINTF_LIKE(fmt, dots) __attribute__((format(printf, fmt, dots)))
62 #define NORETURN __attribute__((noreturn))
64 extern const char *prog
;
66 extern void set_prog(const char *p
);
67 extern void vmoan(const char *fmt
, va_list ap
);
68 extern PRINTF_LIKE(1, 2) void moan(const char *fmt
, ...);
69 extern PRINTF_LIKE(1, 2) NORETURN
void bail(const char *fmt
, ...);
70 extern PRINTF_LIKE(2, 3) NORETURN
71 void bail_syserr(int err
, const char *fmt
, ...);
73 extern void sit(double t
);
75 extern void carefully_write(int fd
, const void *buf
, size_t sz
);
76 extern void open_file_on_demand(const char *file
, FILE **fp_inout
,
78 extern void check_write(FILE *fp
, const char *what
);
79 extern void carefully_fclose(FILE *fp
, const char *what
);
81 enum { RAW
, IFO
, VOB
, BUP
};
82 typedef uint_least32_t ident
;
84 static inline ident
mkident(unsigned kind
, unsigned title
, unsigned part
)
85 { return (((ident
)kind
<< 0) | ((ident
)title
<< 8) | ((ident
)part
<< 16)); }
86 static inline unsigned id_kind(ident id
) { return ((id
>> 0)&0x0ff); }
87 static inline unsigned id_title(ident id
) { return ((id
>> 8)&0x0ff); }
88 static inline unsigned id_part(ident id
) { return ((id
>> 16)&0x0ff); }
90 #define MAXFNSZ (1 + 8 + 1 + 12 + 1)
91 extern void store_filename(char *buf
, ident id
);
93 struct banner_progress_item
{
94 struct progress_item _base
;
98 extern struct progress_state progress
;
100 extern void show_banner(const char *msg
);
101 extern void hide_banner(void);
103 extern void open_dvd(const char *device
,
104 int *fd_out
, dvd_reader_t
**dvd_out
);