Show volume in display status output.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cdda-player.c,v 1.10 2005/03/13 03:52:15 rocky Exp $
|
$Id: cdda-player.c,v 1.11 2005/03/14 02:03:33 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2005 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2005 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -73,6 +73,17 @@ static void get_cddb_track_info(track_t i_track);
|
|||||||
static void get_cdtext_track_info(track_t i_track);
|
static void get_cdtext_track_info(track_t i_track);
|
||||||
static void get_track_info(track_t i_track);
|
static void get_track_info(track_t i_track);
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PLAY_CD=1,
|
||||||
|
PLAY_TRACK=2,
|
||||||
|
STOP_PLAYING=3,
|
||||||
|
EJECT_CD=4,
|
||||||
|
CLOSE_CD=5,
|
||||||
|
LIST_KEYS=6,
|
||||||
|
LIST_TRACKS=7,
|
||||||
|
PS_LIST_TRACKS=8
|
||||||
|
} cd_operation_t;
|
||||||
|
|
||||||
CdIo_t *p_cdio; /* libcdio handle */
|
CdIo_t *p_cdio; /* libcdio handle */
|
||||||
driver_id_t driver_id = DRIVER_DEVICE;
|
driver_id_t driver_id = DRIVER_DEVICE;
|
||||||
int b_sig = false; /* set on some signals */
|
int b_sig = false; /* set on some signals */
|
||||||
@@ -85,36 +96,28 @@ track_t i_last_audio_track;
|
|||||||
track_t i_last_display_track = CDIO_INVALID_TRACK;
|
track_t i_last_display_track = CDIO_INVALID_TRACK;
|
||||||
track_t i_tracks;
|
track_t i_tracks;
|
||||||
msf_t toc[CDIO_CDROM_LEADOUT_TRACK+1];
|
msf_t toc[CDIO_CDROM_LEADOUT_TRACK+1];
|
||||||
|
cd_operation_t todo; /* operation to do in non-interactive mode */
|
||||||
cdio_subchannel_t sub; /* subchannel last time read */
|
cdio_subchannel_t sub; /* subchannel last time read */
|
||||||
int data; /* data tracks present ? */
|
int i_data; /* # of data tracks present ? */
|
||||||
bool b_cd = false;
|
|
||||||
bool auto_mode = false;
|
|
||||||
int start_track = 0;
|
int start_track = 0;
|
||||||
int stop_track = 0;
|
int stop_track = 0;
|
||||||
int one_track = 0;
|
int one_track = 0;
|
||||||
|
int i_vol_port = -1; /* If -1 get retrieve volume port.
|
||||||
|
Otherwise the port number 0..3
|
||||||
|
of a working volume port.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool b_cd = false;
|
||||||
|
bool auto_mode = false;
|
||||||
bool b_verbose = false;
|
bool b_verbose = false;
|
||||||
bool debug = false;
|
bool debug = false;
|
||||||
bool interactive = true;
|
bool interactive = true;
|
||||||
int todo; /* non-interactive */
|
|
||||||
bool b_prefer_cdtext = true;
|
bool b_prefer_cdtext = true;
|
||||||
bool b_cddb = false; /* cddb datebase present */
|
bool b_cddb = false; /* CDDB database present */
|
||||||
bool b_cddb_l = false; /* local cddb */
|
|
||||||
bool b_cddb_r = false; /* remote cddb */
|
|
||||||
bool b_db = false; /* we have a database at all */
|
bool b_db = false; /* we have a database at all */
|
||||||
bool b_record = false; /* we have a record for
|
bool b_record = false; /* we have a record for
|
||||||
the inserted CD */
|
the inserted CD */
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
PLAY_CD=1,
|
|
||||||
PLAY_TRACK=2,
|
|
||||||
STOP_PLAYING=3,
|
|
||||||
EJECT_CD=4,
|
|
||||||
CLOSE_CD=5,
|
|
||||||
LIST_KEYS=6,
|
|
||||||
LIST_TRACKS=7,
|
|
||||||
PS_LIST_TRACKS=8
|
|
||||||
} cd_operation_t;
|
|
||||||
|
|
||||||
char *psz_device=NULL;
|
char *psz_device=NULL;
|
||||||
char *psz_program;
|
char *psz_program;
|
||||||
|
|
||||||
@@ -141,6 +144,7 @@ bool b_cdtext_title; /* true if from CD-Text, false if from CDDB */
|
|||||||
bool b_cdtext_artist; /* true if from CD-Text, false if from CDDB */
|
bool b_cdtext_artist; /* true if from CD-Text, false if from CDDB */
|
||||||
bool b_cdtext_genre; /* true if from CD-Text, false if from CDDB */
|
bool b_cdtext_genre; /* true if from CD-Text, false if from CDDB */
|
||||||
bool b_cdtext_category; /* true if from CD-Text, false if from CDDB */
|
bool b_cdtext_category; /* true if from CD-Text, false if from CDDB */
|
||||||
|
bool b_cdtext_year; /* true if from CD-Text, false if from CDDB */
|
||||||
|
|
||||||
#ifdef HAVE_CDDB
|
#ifdef HAVE_CDDB
|
||||||
cddb_conn_t *p_conn = NULL;
|
cddb_conn_t *p_conn = NULL;
|
||||||
@@ -152,13 +156,13 @@ int i_cddb_matches = 0;
|
|||||||
const char key_bindings[][MAX_KEY_STR] = {
|
const char key_bindings[][MAX_KEY_STR] = {
|
||||||
" right play / next track",
|
" right play / next track",
|
||||||
" left previous track",
|
" left previous track",
|
||||||
" up 10 sec forward",
|
" up/down 10 sec forward / back",
|
||||||
" down 10 sec back",
|
|
||||||
" 1-9 jump to track 1-9",
|
" 1-9 jump to track 1-9",
|
||||||
" 0 jump to track 10",
|
" 0 jump to track 10",
|
||||||
" F1-F20 jump to track 11-30",
|
" F1-F20 jump to track 11-30",
|
||||||
" ",
|
" ",
|
||||||
" k, h, ? show this key help",
|
" k, h, ? show this key help",
|
||||||
|
" l, list tracks",
|
||||||
" e eject",
|
" e eject",
|
||||||
" c close tray",
|
" c close tray",
|
||||||
" p, space pause / resume",
|
" p, space pause / resume",
|
||||||
@@ -267,7 +271,8 @@ xperror(const char *psz_msg)
|
|||||||
|
|
||||||
if (b_verbose) {
|
if (b_verbose) {
|
||||||
sprintf(line,"%s: %s", psz_msg, strerror(errno));
|
sprintf(line,"%s: %s", psz_msg, strerror(errno));
|
||||||
mvprintw(LINE_ACTION, 0, (char *) "error : %-70s", line);
|
mvprintw(LINE_ACTION, 0, (char *) "error : %s", line);
|
||||||
|
clrtoeol();
|
||||||
refresh();
|
refresh();
|
||||||
select_wait(3);
|
select_wait(3);
|
||||||
action(NULL);
|
action(NULL);
|
||||||
@@ -279,6 +284,7 @@ oops(const char *psz_msg, int rc)
|
|||||||
{
|
{
|
||||||
if (interactive) {
|
if (interactive) {
|
||||||
mvprintw(LINE_LAST, 0, (char *) "%s, exiting...\n", psz_msg);
|
mvprintw(LINE_LAST, 0, (char *) "%s, exiting...\n", psz_msg);
|
||||||
|
clrtoeol();
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
tty_restore();
|
tty_restore();
|
||||||
@@ -354,8 +360,10 @@ read_subchannel(CdIo_t *p_cdio)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define add_cddb_disc_info(format_str, field) \
|
#define add_cddb_disc_info(format_str, field) \
|
||||||
if (p_cddb_disc->field && !strlen(field)) \
|
if (p_cddb_disc->field && !strlen(field)) { \
|
||||||
snprintf(field, sizeof(field), format_str, p_cddb_disc->field);
|
snprintf(field, sizeof(field), format_str, p_cddb_disc->field); \
|
||||||
|
b_cdtext_ ## field = false; \
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
get_cddb_disc_info(CdIo_t *p_cdio)
|
get_cddb_disc_info(CdIo_t *p_cdio)
|
||||||
@@ -377,6 +385,7 @@ get_cddb_disc_info(CdIo_t *p_cdio)
|
|||||||
if (p_cdtext->field[FIELD] && !strlen(info_field)) { \
|
if (p_cdtext->field[FIELD] && !strlen(info_field)) { \
|
||||||
snprintf(info_field, sizeof(info_field), format_str, \
|
snprintf(info_field, sizeof(info_field), format_str, \
|
||||||
p_cdtext->field[FIELD]); \
|
p_cdtext->field[FIELD]); \
|
||||||
|
b_cdtext_ ## info_field = true; \
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -422,6 +431,18 @@ read_toc(CdIo_t *p_cdio)
|
|||||||
i_first_audio_track = i_first_track;
|
i_first_audio_track = i_first_track;
|
||||||
i_last_audio_track = i_last_track;
|
i_last_audio_track = i_last_track;
|
||||||
|
|
||||||
|
|
||||||
|
if ( DRIVER_OP_SUCCESS == cdio_audio_get_volume(p_cdio, NULL) ) {
|
||||||
|
for (i_vol_port=0; i_vol_port<4; i_vol_port++) {
|
||||||
|
if (i_vol_port > 0) break;
|
||||||
|
}
|
||||||
|
if (4 == i_vol_port)
|
||||||
|
/* Didn't find a non-zero volume level, maybe we've got everthing muted.
|
||||||
|
Set port to 0 to distinguis from -1 (driver can't get volume).
|
||||||
|
*/
|
||||||
|
i_vol_port = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if ( CDIO_INVALID_TRACK == i_first_track ||
|
if ( CDIO_INVALID_TRACK == i_first_track ||
|
||||||
CDIO_INVALID_TRACK == i_last_track ) {
|
CDIO_INVALID_TRACK == i_last_track ) {
|
||||||
xperror("read toc header");
|
xperror("read toc header");
|
||||||
@@ -430,7 +451,7 @@ read_toc(CdIo_t *p_cdio)
|
|||||||
i_last_display_track = CDIO_INVALID_TRACK;
|
i_last_display_track = CDIO_INVALID_TRACK;
|
||||||
} else {
|
} else {
|
||||||
b_cd = true;
|
b_cd = true;
|
||||||
data = 0;
|
i_data = 0;
|
||||||
get_disc_info(p_cdio);
|
get_disc_info(p_cdio);
|
||||||
for (i = i_first_track; i <= i_last_track+1; i++) {
|
for (i = i_first_track; i <= i_last_track+1; i++) {
|
||||||
int s;
|
int s;
|
||||||
@@ -452,7 +473,7 @@ read_toc(CdIo_t *p_cdio)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((i != i_last_track+1) ) {
|
if ((i != i_last_track+1) ) {
|
||||||
data++;
|
i_data++;
|
||||||
if (i == i_first_track) {
|
if (i == i_first_track) {
|
||||||
if (i == i_last_track)
|
if (i == i_last_track)
|
||||||
i_first_audio_track = CDIO_CDROM_LEADOUT_TRACK;
|
i_first_audio_track = CDIO_CDROM_LEADOUT_TRACK;
|
||||||
@@ -542,8 +563,11 @@ toggle_pause()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Update windows with status and possibly track info. This used in
|
||||||
|
interactive playing not batch mode.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
display_status()
|
display_status(bool b_status_only)
|
||||||
{
|
{
|
||||||
char line[80];
|
char line[80];
|
||||||
|
|
||||||
@@ -557,7 +581,24 @@ display_status()
|
|||||||
|
|
||||||
} else if (sub.audio_status == CDIO_MMC_READ_SUB_ST_PAUSED ||
|
} else if (sub.audio_status == CDIO_MMC_READ_SUB_ST_PAUSED ||
|
||||||
sub.audio_status == CDIO_MMC_READ_SUB_ST_PLAY) {
|
sub.audio_status == CDIO_MMC_READ_SUB_ST_PLAY) {
|
||||||
sprintf(line,"track %2d - %02d:%02d of %s (%02d:%02d abs) %-10s",
|
cdio_audio_volume_t audio_volume;
|
||||||
|
if (i_vol_port > 0 &&
|
||||||
|
DRIVER_OP_SUCCESS == cdio_audio_get_volume(p_cdio, &audio_volume) )
|
||||||
|
{
|
||||||
|
uint8_t i_level = audio_volume.level[i_vol_port];
|
||||||
|
sprintf(line,
|
||||||
|
"track %2d - %02d:%02d of %s (%02d:%02d abs) %s volume: %d",
|
||||||
|
sub.track,
|
||||||
|
sub.rel_addr.msf.m,
|
||||||
|
sub.rel_addr.msf.s,
|
||||||
|
cd_info[sub.track].length,
|
||||||
|
sub.abs_addr.msf.m,
|
||||||
|
sub.abs_addr.msf.s,
|
||||||
|
mmc_audio_state2str(sub.audio_status),
|
||||||
|
(i_level*100+128) / 256 );
|
||||||
|
|
||||||
|
} else
|
||||||
|
sprintf(line,"track %2d - %02d:%02d of %s (%02d:%02d abs) %s",
|
||||||
sub.track,
|
sub.track,
|
||||||
sub.rel_addr.msf.m,
|
sub.rel_addr.msf.m,
|
||||||
sub.rel_addr.msf.s,
|
sub.rel_addr.msf.s,
|
||||||
@@ -572,7 +613,7 @@ display_status()
|
|||||||
mvprintw(LINE_STATUS, 0, (char *) "status%s: %s",auto_mode ? "*" : " ", line);
|
mvprintw(LINE_STATUS, 0, (char *) "status%s: %s",auto_mode ? "*" : " ", line);
|
||||||
clrtoeol();
|
clrtoeol();
|
||||||
|
|
||||||
if (b_db && i_last_display_track != sub.track &&
|
if ( !b_status_only && b_db && i_last_display_track != sub.track &&
|
||||||
(sub.audio_status == CDIO_MMC_READ_SUB_ST_PAUSED ||
|
(sub.audio_status == CDIO_MMC_READ_SUB_ST_PAUSED ||
|
||||||
sub.audio_status == CDIO_MMC_READ_SUB_ST_PLAY) &&
|
sub.audio_status == CDIO_MMC_READ_SUB_ST_PLAY) &&
|
||||||
b_cd ) {
|
b_cd ) {
|
||||||
@@ -676,8 +717,12 @@ get_track_info(track_t i_track)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define display_line(LINE_NO, COL_NO, format_str, field) \
|
#define display_line(LINE_NO, COL_NO, format_str, field) \
|
||||||
if (field && field[0]) \
|
if (field && field[0]) { \
|
||||||
mvprintw(LINE_NO, COL_NO, (char *) format_str, field);
|
mvprintw(LINE_NO, COL_NO, (char *) format_str " [%s]", \
|
||||||
|
field, \
|
||||||
|
b_cdtext_ ## field ? "CD-Text": "CDDB"); \
|
||||||
|
clrtoeol(); \
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
display_cdinfo(CdIo_t *p_cdio, track_t i_tracks, track_t i_first_track)
|
display_cdinfo(CdIo_t *p_cdio, track_t i_tracks, track_t i_first_track)
|
||||||
@@ -692,14 +737,14 @@ display_cdinfo(CdIo_t *p_cdio, track_t i_tracks, track_t i_first_track)
|
|||||||
len = sprintf(line, "%2u tracks (%02x:%02x min)",
|
len = sprintf(line, "%2u tracks (%02x:%02x min)",
|
||||||
(unsigned int) i_last_track,
|
(unsigned int) i_last_track,
|
||||||
toc[i_last_track+1].m, toc[i_last_track+1].s);
|
toc[i_last_track+1].m, toc[i_last_track+1].s);
|
||||||
if (data && i_first_track != CDIO_CDROM_LEADOUT_TRACK)
|
if (i_data && i_first_track != CDIO_CDROM_LEADOUT_TRACK)
|
||||||
sprintf(line+len,", audio=%u-%u", (unsigned int) i_first_audio_track,
|
sprintf(line+len,", audio=%u-%u", (unsigned int) i_first_audio_track,
|
||||||
(unsigned int) i_last_audio_track);
|
(unsigned int) i_last_audio_track);
|
||||||
|
|
||||||
display_line(LINE_ARTIST, 0, "CD Artist : %-70s", artist);
|
display_line(LINE_ARTIST, 0, "CD Artist : %s", artist);
|
||||||
display_line(LINE_CDNAME, 0, "CD Title : %-70s", title);
|
display_line(LINE_CDNAME, 0, "CD Title : %s", title);
|
||||||
display_line(LINE_GENRE, 0, "CD Genre : %-40s", genre);
|
display_line(LINE_GENRE, 0, "CD Genre : %s", genre);
|
||||||
display_line(LINE_YEAR, 0, "CD Year : %4s", year);
|
display_line(LINE_YEAR, 0, "CD Year : %s", year);
|
||||||
}
|
}
|
||||||
|
|
||||||
mvprintw(LINE_CDINFO, 0, (char *) "CD info: %0s", line);
|
mvprintw(LINE_CDINFO, 0, (char *) "CD info: %0s", line);
|
||||||
@@ -714,8 +759,8 @@ usage(char *prog)
|
|||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s is a simple curses CD player. It can pick up artist,\n"
|
"%s is a simple curses CD player. It can pick up artist,\n"
|
||||||
"CD name and song title from a workman database file or\n"
|
"CD name and song title from CD-Text info on the CD or\n"
|
||||||
"via cddb.\n"
|
"via CDDB.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"usage: %s [options] [device]\n"
|
"usage: %s [options] [device]\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -730,6 +775,8 @@ usage(char *prog)
|
|||||||
"for non-interactive use (only one of them):\n"
|
"for non-interactive use (only one of them):\n"
|
||||||
" -l list tracks\n"
|
" -l list tracks\n"
|
||||||
" -c print cover (PostScript to stdout)\n"
|
" -c print cover (PostScript to stdout)\n"
|
||||||
|
" -C close CD-ROM tray. If you use this option,\n"
|
||||||
|
" a CD-ROM device name must be specified.\n"
|
||||||
" -p play the whole CD\n"
|
" -p play the whole CD\n"
|
||||||
" -t n play track >n<\n"
|
" -t n play track >n<\n"
|
||||||
" -t a-b play all tracks between a and b (inclusive)\n"
|
" -t a-b play all tracks between a and b (inclusive)\n"
|
||||||
@@ -741,11 +788,6 @@ usage(char *prog)
|
|||||||
"to play it, and when it is done it ejects the CD. Start it that\n"
|
"to play it, and when it is done it ejects the CD. Start it that\n"
|
||||||
"way on a spare console and forget about it...\n"
|
"way on a spare console and forget about it...\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Title database access:\n"
|
|
||||||
" workman: checks $HOME/.workmandb\n"
|
|
||||||
" cddb remote: disabled by default, set CDDB_SERVER to \"server:port\"\n"
|
|
||||||
" to enable it.\n"
|
|
||||||
"\n"
|
|
||||||
"(c) 1997,98 Gerd Knorr <kraxel@goldbach.in-berlin.de>\n"
|
"(c) 1997,98 Gerd Knorr <kraxel@goldbach.in-berlin.de>\n"
|
||||||
"(c) 2005 Rocky Bernstein <rocky@panix.com>\n"
|
"(c) 2005 Rocky Bernstein <rocky@panix.com>\n"
|
||||||
, prog, prog);
|
, prog, prog);
|
||||||
@@ -759,6 +801,22 @@ print_keys()
|
|||||||
fprintf(stderr, "%s\n", key_bindings[i]);
|
fprintf(stderr, "%s\n", key_bindings[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
keypress_wait(CdIo_t *p_cdio)
|
||||||
|
{
|
||||||
|
int key;
|
||||||
|
action("press any key to continue");
|
||||||
|
while (1 != select_wait(b_cd ? 1 : 5)) {
|
||||||
|
read_subchannel(p_cdio);
|
||||||
|
display_status(true);
|
||||||
|
}
|
||||||
|
key = getch();
|
||||||
|
clrtobot();
|
||||||
|
action(NULL);
|
||||||
|
display_cdinfo(p_cdio, i_tracks, i_first_track);
|
||||||
|
i_last_display_track = CDIO_INVALID_TRACK;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
list_keys()
|
list_keys()
|
||||||
{
|
{
|
||||||
@@ -767,14 +825,7 @@ list_keys()
|
|||||||
mvprintw(LINE_TRACK_PREV+i, 0, (char *) "%s", key_bindings[i]);
|
mvprintw(LINE_TRACK_PREV+i, 0, (char *) "%s", key_bindings[i]);
|
||||||
clrtoeol();
|
clrtoeol();
|
||||||
}
|
}
|
||||||
{
|
keypress_wait(p_cdio);
|
||||||
int key;
|
|
||||||
action("press any key to continue");
|
|
||||||
key = getch();
|
|
||||||
clrtobot();
|
|
||||||
action(NULL);
|
|
||||||
i_last_display_track = CDIO_INVALID_TRACK;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -785,7 +836,7 @@ list_tracks(void)
|
|||||||
int s;
|
int s;
|
||||||
|
|
||||||
if (b_record) {
|
if (b_record) {
|
||||||
i_line=LINE_TRACK_PREV;
|
i_line=LINE_TRACK_PREV - 1;
|
||||||
for (i = i_first_track; i <= i_last_track; i++) {
|
for (i = i_first_track; i <= i_last_track; i++) {
|
||||||
char line[80];
|
char line[80];
|
||||||
s = cdio_audio_get_msf_seconds(&toc[i+1])
|
s = cdio_audio_get_msf_seconds(&toc[i+1])
|
||||||
@@ -806,14 +857,7 @@ list_tracks(void)
|
|||||||
mvprintw(i_line++, 0, line);
|
mvprintw(i_line++, 0, line);
|
||||||
clrtoeol();
|
clrtoeol();
|
||||||
}
|
}
|
||||||
{
|
keypress_wait(p_cdio);
|
||||||
int key;
|
|
||||||
action("press any key to continue");
|
|
||||||
switch (key = getch());
|
|
||||||
i_last_display_track = CDIO_INVALID_TRACK;
|
|
||||||
clrtobot();
|
|
||||||
action(NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1298,6 +1342,12 @@ main(int argc, char *argv[])
|
|||||||
printf("%s / %s\n", artist, title);
|
printf("%s / %s\n", artist, title);
|
||||||
play_track(1,CDIO_CDROM_LEADOUT_TRACK);
|
play_track(1,CDIO_CDROM_LEADOUT_TRACK);
|
||||||
break;
|
break;
|
||||||
|
case CLOSE_CD:
|
||||||
|
cdio_close_tray(psz_device, NULL);
|
||||||
|
break;
|
||||||
|
case LIST_KEYS:
|
||||||
|
case LIST_TRACKS:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fprintf(stderr,"no CD in drive (%s)\n", psz_device);
|
fprintf(stderr,"no CD in drive (%s)\n", psz_device);
|
||||||
@@ -1309,7 +1359,7 @@ main(int argc, char *argv[])
|
|||||||
int key;
|
int key;
|
||||||
if (!b_cd) read_toc(p_cdio);
|
if (!b_cd) read_toc(p_cdio);
|
||||||
read_subchannel(p_cdio);
|
read_subchannel(p_cdio);
|
||||||
display_status();
|
display_status(false);
|
||||||
|
|
||||||
if (1 == select_wait(b_cd ? 1 : 5)) {
|
if (1 == select_wait(b_cd ? 1 : 5)) {
|
||||||
switch (key = getch()) {
|
switch (key = getch()) {
|
||||||
@@ -1320,7 +1370,7 @@ main(int argc, char *argv[])
|
|||||||
case 'X':
|
case 'X':
|
||||||
case 'x':
|
case 'x':
|
||||||
nostop=1;
|
nostop=1;
|
||||||
/* fall */
|
/* fall through */
|
||||||
case 'Q':
|
case 'Q':
|
||||||
case 'q':
|
case 'q':
|
||||||
b_sig = true;
|
b_sig = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user