version 1.62, 2008/06/22 21:04:01 |
version 1.63, 2008/06/30 23:35:39 |
|
|
char *cdname; |
char *cdname; |
int fd = -1; |
int fd = -1; |
int writeperm = 0; |
int writeperm = 0; |
|
int mediacap = 0; |
int verbose = 1; |
int verbose = 1; |
int msf = 1; |
int msf = 1; |
const char *cddb_host; |
const char *cddb_host; |
|
|
int play_track(int, int, int, int); |
int play_track(int, int, int, int); |
int get_vol(int *, int *); |
int get_vol(int *, int *); |
int status(int *, int *, int *, int *); |
int status(int *, int *, int *, int *); |
int is_wave(int fd); |
int is_wave(int); |
__dead void tao(int argc, char **argv); |
__dead void tao(int argc, char **argv); |
int play(char *arg); |
int play(char *arg); |
int info(char *arg); |
int info(char *arg); |
|
|
int |
int |
run(int cmd, char *arg) |
run(int cmd, char *arg) |
{ |
{ |
int l, r, rc, cap; |
int l, r, rc; |
static char newcdname[MAXPATHLEN]; |
static char newcdname[MAXPATHLEN]; |
|
|
switch (cmd) { |
switch (cmd) { |
|
|
if (!open_cd(cdname, 1)) |
if (!open_cd(cdname, 1)) |
return 0; |
return 0; |
|
|
if (get_media_capabilities(&cap) == -1) { |
if (get_media_capabilities(&mediacap) == -1) { |
warnx("Can't determine media type"); |
warnx("Can't determine media type"); |
return (0); |
return (0); |
} |
} |
if ((cap & MEDIACAP_CDRW_WRITE) == 0) { |
if ((mediacap & MEDIACAP_CDRW_WRITE) == 0) { |
warnx("The media doesn't support blanking"); |
warnx("The media doesn't support blanking"); |
return (0); |
return (0); |
} |
} |
|
|
u_int blklen; |
u_int blklen; |
u_int ntracks = 0; |
u_int ntracks = 0; |
char type; |
char type; |
int ch, cap; |
int ch, speed; |
|
const char *errstr; |
|
|
if (argc == 1) |
if (argc == 1) |
usage(); |
usage(); |
|
|
SLIST_INIT(&tracks); |
SLIST_INIT(&tracks); |
type = 'd'; |
type = 'd'; |
|
speed = DRIVE_SPEED_OPTIMAL; |
blklen = 2048; |
blklen = 2048; |
while (argc > 1) { |
while (argc > 1) { |
tr = malloc(sizeof(struct track_info)); |
tr = malloc(sizeof(struct track_info)); |
if (tr == NULL) |
if (tr == NULL) |
err(1, "tao"); |
err(1, "tao"); |
|
|
tr->type = type; |
|
optreset = 1; |
optreset = 1; |
optind = 1; |
optind = 1; |
while ((ch = getopt(argc, argv, "ad")) != -1) { |
while ((ch = getopt(argc, argv, "ads:")) != -1) { |
switch (ch) { |
switch (ch) { |
case 'a': |
case 'a': |
type = 'a'; |
type = 'a'; |
|
|
type = 'd'; |
type = 'd'; |
blklen = 2048; |
blklen = 2048; |
break; |
break; |
|
case 's': |
|
if (strcmp(optarg, "auto") == 0) { |
|
speed = DRIVE_SPEED_OPTIMAL; |
|
} else if (strcmp(optarg, "max") == 0) { |
|
speed = DRIVE_SPEED_MAX; |
|
} else { |
|
speed = (int)strtonum(optarg, 1, |
|
CD_MAX_SPEED, &errstr); |
|
if (errstr != NULL) { |
|
errx(1, |
|
"incorrect speed value"); |
|
} |
|
} |
|
break; |
default: |
default: |
usage(); |
usage(); |
/* NOTREACHED */ |
/* NOTREACHED */ |
} |
} |
} |
} |
|
|
|
if (speed != DRIVE_SPEED_OPTIMAL && speed != DRIVE_SPEED_MAX) |
|
tr->speed = CD_SPEED_TO_KBPS(speed, blklen); |
|
else |
|
tr->speed = speed; |
|
|
tr->type = type; |
tr->type = type; |
tr->blklen = blklen; |
tr->blklen = blklen; |
argc -= optind; |
argc -= optind; |
|
|
|
|
if (!open_cd(cdname, 1)) |
if (!open_cd(cdname, 1)) |
exit(1); |
exit(1); |
if (get_media_capabilities(&cap) == -1) |
if (get_media_capabilities(&mediacap) == -1) |
errx(1, "Can't determine media type"); |
errx(1, "Can't determine media type"); |
if ((cap & MEDIACAP_TAO) == 0) |
if ((mediacap & MEDIACAP_TAO) == 0) |
errx(1, "The media can't be written in TAO mode"); |
errx(1, "The media can't be written in TAO mode"); |
|
|
get_disc_size(&availblk); |
get_disc_size(&availblk); |