This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
- version 2 as ammended with additional clauses defined in the
+ version 2 as amended with additional clauses defined in the
file LICENSE in the main source directory.
This program is distributed in the hope that it will be useful,
#define ST_MOUNTED (1<<15) /* the device is mounted to the mount point */
#define ST_MEDIA (1<<16) /* Media found in mounted device */
#define ST_OFFLINE (1<<17) /* set offline by operator */
+#define ST_PART_SPOOLED (1<<18) /* spooling part */
/* dev_blocked states (mutually exclusive) */
enum {
int weof_dev(DEVICE *dev, int num);
bool rewind_dev(DEVICE *dev);
+class DCR; /* forward reference */
/*
* Device structure definition. There is one of these for
* each physical device. Everything here is "global" to
uint64_t max_part_size; /* max part size */
uint64_t part_size; /* current part size */
- uint32_t part; /* current part number */
+ uint32_t part; /* current part number (starts at 0) */
uint64_t part_start; /* current part start address (relative to the whole volume) */
- uint32_t num_parts; /* number of parts (total) */
+ uint32_t num_parts; /* number of parts WRITTEN on the DVD */
uint64_t free_space; /* current free space on medium (without the current part) */
int free_space_errno; /* indicates:
* - free_space_errno == 0: ignore free_space.
int is_offline() const { return state & ST_OFFLINE; }
int is_labeled() const { return state & ST_LABEL; }
int is_mounted() const { return state & ST_MOUNTED; }
+ int is_part_spooled() const { return state & ST_PART_SPOOLED; }
int have_media() const { return state & ST_MEDIA; }
int is_short_block() const { return state & ST_SHORT; }
- int is_busy() const { return state & ST_READ || num_writers || reserved_device; }
+ int is_busy() const { return (state & ST_READ) || num_writers || reserved_device; }
int at_eof() const { return state & ST_EOF; }
int at_eot() const { return state & ST_EOT; }
int at_weot() const { return state & ST_WEOT; }
dev_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP); };
bool weof() { return !weof_dev(this, 1); };
bool fsr(int num); /* in dev.c */
+ bool fsf(int num); /* in dev.c */
bool rewind() { return rewind_dev(this); };
const char *strerror() const;
const char *archive_name() const;
void set_mounted() { state |= ST_MOUNTED; };
void set_media() { state |= ST_MEDIA; };
void set_short_block() { state |= ST_SHORT; };
+ void set_part_spooled(int val) { if (val) state |= ST_PART_SPOOLED; \
+ else state &= ~ST_PART_SPOOLED; };
void set_mounted(int val) { if (val) state |= ST_MOUNTED; \
else state &= ~ST_MOUNTED; };
void clear_append() { state &= ~ST_APPEND; };
void block(int why); /* in dev.c */
void unblock(); /* in dev.c */
void close(); /* in dev.c */
- int open(char *VolName, int mode); /* in dev.c */
- void set_mode(int mode); /* in dev.c */
+ int open(DCR *dcr, int mode); /* in dev.c */
+
void set_blocked(int block) { dev_blocked = block; };
int get_blocked() const { return dev_blocked; };
+ const char *print_blocked() const; /* in dev.c */
+ bool is_blocked() const { return dev_blocked != BST_NOT_BLOCKED; };
+
+private:
+ void set_mode(int omode); /* in dev.c */
+ void open_tape_device(int omode); /* in dev.c */
+ void open_file_device(int omode); /* in dev.c */
+ void open_dvd_device(DCR *dcr, int omode); /* in dev.c */
+
};
/* Note, these return int not bool! */
dlink link;
char *vol_name;
DEVICE *dev;
+ DCR *dcr;
};