Index: libmpdemux/open.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpdemux/open.c,v retrieving revision 1.99 diff -u -r1.99 open.c --- libmpdemux/open.c 22 Aug 2004 18:47:48 -0000 1.99 +++ libmpdemux/open.c 16 Oct 2004 11:42:26 -0000 @@ -189,11 +189,40 @@ ifo_handle_t *vmg_file; tt_srpt_t *tt_srpt; ifo_handle_t *vts_file; - dvd_title = filename[6] == '\0' ? 1 : strtol(filename + 6,NULL,0); + + /** + * dvd://title:chapter-last_chapter:angle@dvd-device + * dvd://1:1-4:1@/dev/dvd + */ +#include + + const char *error; + pcre *pe; + int erroffset; + int rc; + int ovector[30]; + pe = pcre_compile("dvd:// (\\d+)?:? (\\d+)?-?(\\d+)?:? (\\d*(?![\\w\\.]+))? @ ?(.*)", + PCRE_EXTENDED,&error,&erroffset,NULL); + rc = pcre_exec(pe,NULL,filename,strlen(filename),0,0,ovector,30); + + const char **stringlist; + pcre_get_substring_list((char *)filename, ovector, rc,&stringlist); + + dvd_title = strlen(stringlist[1]) == 0 ? 1 : strtol(stringlist[1],NULL,0); + dvd_chapter = strlen(stringlist[2]) == 0 ? 1 : strtol(stringlist[2],NULL,0); + dvd_last_chapter = strlen(stringlist[3]) == 0 ? 0 : strtol(stringlist[3],NULL,0); + dvd_angle = strlen(stringlist[4]) == 0 ? 1 : strtol(stringlist[4],NULL,0); + dvd_device = strlen(stringlist[5]) == 0 ? strdup(DEFAULT_DVD_DEVICE) : strdup(stringlist[5]); + + pcre_free_substring_list(stringlist); + + +/* dvd_title = filename[6] == '\0' ? 1 : strtol( filename + 6 , NULL , 0 );*/ + /** * Open the disc. */ - if(!dvd_device) dvd_device=strdup(DEFAULT_DVD_DEVICE); +/* if(!dvd_device) dvd_device=strdup(DEFAULT_DVD_DEVICE);*/ #ifdef SYS_DARWIN /* Dynamic DVD drive selection on Darwin */ if (!strcmp(dvd_device, "/dev/rdiskN")) {