summaryrefslogtreecommitdiff
path: root/src/daisy-player.c
diff options
context:
space:
mode:
authorPaul Gevers <elbrus@debian.org>2014-06-23 21:40:52 +0200
committerPaul Gevers <elbrus@debian.org>2014-06-23 21:40:52 +0200
commit84838ff1b39fa8f05b1bf244cfb20d4a2de86872 (patch)
treee4a73a5666bb4bb20835e09f2879e6143f7520d0 /src/daisy-player.c
parente83ec173e9845f5efaa6607d42b04d364e190fe6 (diff)
Imported Upstream version 8.6.2
Diffstat (limited to 'src/daisy-player.c')
-rw-r--r--src/daisy-player.c92
1 files changed, 53 insertions, 39 deletions
diff --git a/src/daisy-player.c b/src/daisy-player.c
index 6de85c2..42aeeff 100644
--- a/src/daisy-player.c
+++ b/src/daisy-player.c
@@ -195,6 +195,7 @@ void get_bookmark (misc_t *misc, my_attribute_t *my_attribute,
misc->current_page_number = daisy[misc->playing].page_number;
misc->just_this_item = -1;
skip_left (misc, my_attribute, daisy);
+ skip_right (misc);
view_screen (misc, daisy);
return;
} // get_bookmark
@@ -2074,9 +2075,6 @@ int main (int argc, char *argv[])
printw (gettext ("Daisy-player - Version %s\n"), PACKAGE_VERSION);
printw (gettext ("A parser to play Daisy CD's with Linux\n"));
-// set the CD speed so it makes less noise
- set_drive_speed (&misc, 4);
-
printw (gettext ("Scanning for a Daisy CD..."));
refresh ();
misc.audiocd = 0;
@@ -2156,12 +2154,14 @@ int main (int argc, char *argv[])
magic_close (myt);
} // if there is an argument
else
-// try the default block device (/dev/sr0)
+// try misc.cd_dev
{
- char cmd[MAX_CMD], *str, *tmp;
- size_t s;
+ if (access (misc.cd_dev, R_OK) != 0)
+ failure (misc.cd_dev, errno);
+
+ char cmd[MAX_CMD], *tmp;
time_t start;
- FILE *r;
+ CdIo_t *cd;
snprintf (cmd, MAX_CMD, "eject -t %s", misc.cd_dev);
switch (system (cmd))
@@ -2170,41 +2170,47 @@ int main (int argc, char *argv[])
break;
} // switch
start = time (NULL);
- if ((r = fopen ("/run/udev/data/b11:0", "r")) == NULL)
-// block 11 = cdrom
- {
- int e;
-
- e = errno;
- endwin ();
- beep ();
- printf ("/run/udev/data/b11:0: %s\n\n", gettext (strerror (e)));
- usage ();
- } // if
tmp = strdup ("/tmp/daisy-player.XXXXXX");
strncpy (misc.daisy_mp, mkdtemp (tmp), MAX_STR);
- str = malloc (MAX_STR);
- s = MAX_STR - 1;
- while (1)
+ misc.found_cd = 0;
+ cd = NULL;
+ cdio_init ();
+ do
+ {
+ if (time (NULL) - start >= 30)
+ failure (gettext ("No Daisy CD in drive."), errno);
+ cd = cdio_open (misc.cd_dev, DRIVER_UNKNOWN);
+ } while (cd == NULL);
+ start = time (NULL);
+ do
{
- switch (getline (&str, &s, r))
- {
- default:
- break;
- } // switch
if (time (NULL) - start >= 30)
failure (gettext ("No Daisy CD in drive."), errno);
- if (feof (r))
+ switch (cdio_get_discmode (cd))
+ {
+ case CDIO_DISC_MODE_CD_DATA: /**< CD-ROM form 1 */
+ case CDIO_DISC_MODE_CD_XA: /**< CD-ROM XA form2 */
+ case CDIO_DISC_MODE_DVD_ROM: /**< DVD ROM (e.g. movies) */
+ case CDIO_DISC_MODE_DVD_RAM: /**< DVD-RAM */
+ case CDIO_DISC_MODE_DVD_R: /**< DVD-R */
+ case CDIO_DISC_MODE_DVD_RW: /**< DVD-RW */
+ case CDIO_DISC_MODE_HD_DVD_ROM: /**< HD DVD-ROM */
+ case CDIO_DISC_MODE_HD_DVD_RAM: /**< HD DVD-RAM */
+ case CDIO_DISC_MODE_HD_DVD_R: /**< HD DVD-R */
+ case CDIO_DISC_MODE_DVD_PR: /**< DVD+R */
+ case CDIO_DISC_MODE_DVD_PRW: /**< DVD+RW */
+ case CDIO_DISC_MODE_DVD_PRW_DL: /**< DVD+RW DL */
+ case CDIO_DISC_MODE_DVD_PR_DL: /**< DVD+R DL */
+ case CDIO_DISC_MODE_CD_MIXED:
{
- r = freopen ("/run/udev/data/b11:0", "r", r);
- continue;
- } // if
+// set the CD speed so it makes less noise
+ set_drive_speed (&misc, 4);
- if (strcasestr (str, "TRACK_COUNT_DATA"))
- {
- if (! get_mount_point (&misc))
+ do
// if not found a mounted cd, try to mount one
{
+ if (time (NULL) - start >= 30)
+ failure (gettext ("No Daisy CD in drive."), errno);
snprintf (cmd, MAX_CMD,
"udisksctl mount -b %s > /dev/null", misc.cd_dev);
switch (system (cmd))
@@ -2212,11 +2218,11 @@ int main (int argc, char *argv[])
break;
} // switch
get_mount_point (&misc);
- } // if
+ } while (! get_mount_point (&misc));
+ misc.found_cd = 1;
break;
} // TRACK_COUNT_DATA"
-
- if (strcasestr (str, "TRACK_COUNT_AUDIO"))
+ case CDIO_DISC_MODE_CD_DA: /**< CD-DA */
{
// probably an Audio-CD
misc.audiocd = 1;
@@ -2226,14 +2232,22 @@ int main (int argc, char *argv[])
refresh ();
strncpy (misc.bookmark_title, "Audio-CD", MAX_STR - 1);
strncpy (misc.daisy_title, "Audio-CD", MAX_STR - 1);
+// set the CD speed so it makes less noise
+ set_drive_speed (&misc, 4);
init_paranoia (&misc);
daisy = get_number_of_tracks (&misc);
get_toc_audiocd (&misc, daisy);
strncpy (misc.daisy_mp, "/tmp", MAX_STR - 1);
+ misc.found_cd = 1;
break;
- } // TRACK_COUNT_AUDIO
- } // while
- fclose (r);
+ } // TRACK_COUNT_AUDIO
+ case CDIO_DISC_MODE_CD_I:
+ case CDIO_DISC_MODE_DVD_OTHER:
+ case CDIO_DISC_MODE_NO_INFO:
+ case CDIO_DISC_MODE_ERROR:
+ failure (misc.cd_dev, errno);
+ } // switch
+ } while (misc.found_cd != 1);
} // if use misc.cd_dev
keypad (misc.screenwin, TRUE);
meta (misc.screenwin, TRUE);