The latest source package of xcdroast added a patch to make it call
wodim.  Unfortunately the binary package uploaded for i386 was built
without this patch, possibly due to some incorrect dependencies in
debian/rules.

I believe the other binary packages have been built with this patch and
a binNMU of the i386 binary package would fix it for installations with
an existing xcdroast configuration.

However, the patch doesn't cover:
- Scanning for devices during initial configuration of xcdroast
  (wodim output currently includes a finger-wagging emitted by libscg
  which confuses xcdroast).
- Recognition of wodim as capable of writing DVDs.
- A large number of references to cdrecord and cdrecord-proDVD in the
  code and the GUI.  (Joerg insists we mustn't refer to our version as
  cdrecord.  Also we should not confuse our users by referring to
  licence keys and other such non-free nonsense.)

I have prepared a replacement patch that seems to fix these problems.
However, I have not thoroughly tested it - my DVD burner is busy
duplicating the DebConf videos, and besides I don't even *like*
xcdroast.

#! /bin/sh /usr/share/dpatch/dpatch-run
## 13_cdrecord_to_wodim.dpatch by  <[EMAIL PROTECTED]>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Changes for the cdrecord -> wodim transition.

@DPATCH@
diff -ur xcdroast-0.98+0alpha15.orig/src/create.c 
xcdroast-0.98+0alpha15/src/create.c
--- xcdroast-0.98+0alpha15.orig/src/create.c    2003-10-30 11:28:10.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/create.c 2006-10-22 12:56:16.000000000 +0000
@@ -523,7 +523,7 @@
         gtk_widget_show(tbl);
         vbox = gtk_vbox_new(FALSE,10);
         gtk_table_attach_defaults(GTK_TABLE(tbl),vbox,1,2,0,1);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("CD-Information"));
        } else {
                f1 = gtk_frame_new(_("CD/DVD-Information"));
@@ -1260,7 +1260,7 @@
         gtk_widget_show(tbl);
         vbox = gtk_vbox_new(FALSE,10);
         gtk_table_attach_defaults(GTK_TABLE(tbl),vbox,0,1,0,1);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("CD-Information"));
        } else {
                f1 = gtk_frame_new(_("CD/DVD-Information"));
@@ -2979,7 +2979,7 @@
                 GTK_SIGNAL_FUNC(fixate_clicked), NULL);
         define_tooltip(b1,_("Just fixate (close) the CD, if for some reason 
the CD has been written but not fixated."));
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_button_new_with_label(_("Blank CD-RW"));
        } else {
                b1 = gtk_button_new_with_label(_("Blank CD/DVD+-RW"));
@@ -3086,7 +3086,7 @@
                 gtk_widget_show (menu_item);
                 i++;
         }
-        if (curset.isProDVD) {
+        if (curset.isDVD) {
                 i = 0;
                 tmpval = curset.cdrtype;
                 while (dvdtypes[i] != 0) {
@@ -5774,7 +5774,7 @@
        bootable_frame1 = NULL;
        bootable_frame2 = NULL;
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("Options to create a bootable CD"));
        } else {
                f1 = gtk_frame_new(_("Options to create a bootable CD/DVD"));
@@ -5794,7 +5794,7 @@
        gtk_box_pack_start(GTK_BOX(vbox),tbl,FALSE,FALSE,0);
         gtk_widget_show(tbl);
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                l1 = rightjust_gtk_label_new(_("Make CD bootable?"));
        } else {
                l1 = rightjust_gtk_label_new(_("Make CD/DVD bootable?"));
@@ -6792,7 +6792,7 @@
                        fill_session_available();
                        /* force recalc of session size if dvd */
                        /* so he will get the multisession warning */
-                       if (curset.cdrtype >= 1000 && curset.isProDVD == 1 && 
curset.multisession == 1) {
+                       if (curset.cdrtype >= 1000 && curset.isDVD == 1 && 
curset.multisession == 1) {
                                set_sessionsize_unknown();      
                        }
                        break;
@@ -7023,7 +7023,7 @@
                 gtk_widget_show (menu_item);
                 i++;
         }
-        if (curset.isProDVD) {
+        if (curset.isDVD) {
                 i = 0;
                 tmpval = curset.cdrtype;
                 while (dvdtypes[i] != 0) {
@@ -7174,7 +7174,7 @@
         gtk_widget_show(b1);
         define_tooltip(b1,_("Set additional write options for advanced 
users."));
        /* blank button */
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_button_new_with_label(_("Blank CD-RW"));
        } else {
                b1 = gtk_button_new_with_label(_("Blank CD/DVD+-RW"));
diff -ur xcdroast-0.98+0alpha15.orig/src/duplicate.c 
xcdroast-0.98+0alpha15/src/duplicate.c
--- xcdroast-0.98+0alpha15.orig/src/duplicate.c 2003-10-26 13:14:19.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/duplicate.c      2006-10-22 12:56:30.000000000 
+0000
@@ -1156,7 +1156,7 @@
        gtk_table_set_col_spacings(GTK_TABLE(tbl),10);
        gtk_box_pack_start(GTK_BOX(actionspace),tbl,TRUE,TRUE,10);
        gtk_widget_show(tbl);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("CD-Information"));
        } else {
                f1 = gtk_frame_new(_("CD/DVD-Information"));
@@ -1739,7 +1739,7 @@
        gtk_widget_show(tbl);
        vbox = gtk_vbox_new(FALSE,10);
        gtk_table_attach_defaults(GTK_TABLE(tbl),vbox,0,1,0,1);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("CD-Information"));
        } else {
                f1 = gtk_frame_new(_("CD/DVD-Information"));
@@ -2241,7 +2241,7 @@
        gtk_widget_show(tbl);
        vbox = gtk_vbox_new(FALSE,10);
        gtk_table_attach_defaults(GTK_TABLE(tbl),vbox,0,1,0,1);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("CD-Information"));
        } else {
                f1 = gtk_frame_new(_("CD/DVD-Information"));
@@ -3090,7 +3090,7 @@
        gtk_table_set_col_spacings(GTK_TABLE(tbl),10);
        gtk_box_pack_start(GTK_BOX(actionspace),tbl,TRUE,TRUE,10);
        gtk_widget_show(tbl);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                f1 = gtk_frame_new(_("CD to write"));
        } else {
                f1 = gtk_frame_new(_("CD/DVD to write"));
@@ -3107,7 +3107,7 @@
        hbox = gtk_hbox_new(TRUE,10);
        gtk_box_pack_start(GTK_BOX(actionspace),hbox,FALSE,TRUE,5);
        gtk_widget_show(hbox);
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_button_new_with_label(_("Write CD"));
        } else {
                b1 = gtk_button_new_with_label(_("Write CD/DVD"));
@@ -3118,7 +3118,7 @@
                GTK_SIGNAL_FUNC(writetracks_clicked), NULL);
        define_tooltip(b1,_("Writes all tracks specified by the TOC file to a 
CD."));
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_button_new_with_label(_("Blank CD-RW"));
        } else {
                b1 = gtk_button_new_with_label(_("Blank CD/DVD+-RW"));
@@ -3239,7 +3239,7 @@
                gtk_widget_show (menu_item);
                i++;
        }
-       if (curset.isProDVD) {
+       if (curset.isDVD) {
                i = 0;
                tmpval = curset.cdrtype;
                while (dvdtypes[i] != 0) {
@@ -3984,7 +3984,7 @@
        side_widgets[0] = b1;
        define_tooltip(b1,_("Displays information about the currently inserted 
CD and tracks stored on the harddrive."));
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_toggle_button_new_with_label(_("Read CD"));
        } else {
                b1 = gtk_toggle_button_new_with_label(_("Read CD/DVD"));
@@ -3996,7 +3996,7 @@
        side_widgets[1] = b1;
        define_tooltip(b1,_("Reads all tracks of a CD and copy them to the 
harddrive."));
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_toggle_button_new_with_label(_("Verify CD"));
        } else {
                b1 = gtk_toggle_button_new_with_label(_("Verify CD/DVD"));
@@ -4016,7 +4016,7 @@
        side_widgets[3] = b1;
        define_tooltip(b1,_("Plays audio tracks (.wav files) from the harddrive 
via soundcard."));
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                b1 = gtk_toggle_button_new_with_label(_("Write CD"));
        } else {
                b1 = gtk_toggle_button_new_with_label(_("Write CD/DVD"));
diff -ur xcdroast-0.98+0alpha15.orig/src/init.c 
xcdroast-0.98+0alpha15/src/init.c
--- xcdroast-0.98+0alpha15.orig/src/init.c      2006-10-24 01:44:02.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/init.c   2006-10-22 13:20:20.000000000 +0000
@@ -81,8 +81,10 @@
 gchar *language = NULL;
 GdkFont *fixedfont;
 
+#ifndef CDRECORDDVD_IS_FREE
 /* ProDVD key in global variable to let solaris-putenv access it */
 gchar security_key[MAXLINE];
+#endif
 
 /* give the setupdata-structure valid startvalues */
 
@@ -137,7 +139,9 @@
         setupdata.root_option_change_imagedirs = fullaccess;
         setupdata.root_option_change_logoptions = fullaccess;
 
+#ifndef CDRECORDDVD_IS_FREE
        setupdata.ProDVDkey = g_strdup("");     
+#endif
 
        setupdata.mainwindow.x = -1;
        setupdata.mainwindow.y = -1;
@@ -157,7 +161,7 @@
 gint cdrtypes[] = CDR_TYPES_MIN;
 gint i;
 
-       curset.isProDVD = 0;
+       curset.isDVD = 0;
        curset.support_ontheflyaudio = 0;
        curset.writer_devnr = -1;
        curset.reader_devnr = -1;
@@ -392,16 +396,16 @@
 }
 
 /* check if needed binaries are installed */
-/* return if proDVD version found */
+/* return if (pro)DVD version found */
 
 static gint check_binaries(gint noversioncheck) {
 gchar tmp[MAXLINE];
 gchar ver[MAXLINE];
 gchar link[MAXLINE];
 gint stat;
-gint out, isProDVD;
+gint out, isDVD;
        
-       isProDVD = 0;
+       isDVD = 0;
        check_executable(UNAME,UNAME2,0);
        check_executable(DF,DF2,0);
 
@@ -417,7 +421,7 @@
        }
        stat = check_version_cdrecord(CDRECORD_VERSION, 0, ver, &out);
        if (stat == 1 && !noversioncheck) {
-               g_warning("Invalid cdrecord version %s found.\n\tExpecting at 
least version %s\n\tStart xcdroast with the -n option to override (not 
recommended!)", ver, CDRECORD_VERSION);    
+               g_warning("Invalid " CDRECORD_NAME " version %s 
found.\n\tExpecting at least version %s\n\tStart xcdroast with the -n option to 
override (not recommended!)", ver, CDRECORD_VERSION);   
                gtk_exit(1);
        }
        if (stat == 2) {
@@ -425,8 +429,8 @@
                gtk_exit(1);
        }
 
-       /* check optional installation of ProDVD version */
-       get_spawn_path(CDRECORDPRODVD,tmp);
+       /* check optional installation of (Pro)DVD version */
+       get_spawn_path(CDRECORDDVD,tmp);
        if (is_file(tmp)) {
                if (check_islink(tmp, link)) {
 #if 0
@@ -435,9 +439,9 @@
                dodebug(3, "%s is a link to %s\n", tmp, link); 
 #endif
                }
-               stat = check_version_cdrecord(CDRECORD_PRODVD_VERSION, 1, ver, 
&isProDVD);
+               stat = check_version_cdrecord(CDRECORDDVD_VERSION, 1, ver, 
&isDVD);
                if (stat == 1 && !noversioncheck) {
-                       g_warning("Invalid cdrecord-ProDVD version %s 
found.\n\tExpecting at least version %s\n\tStart xcdroast with the -n option to 
override (not recommended!)", ver, CDRECORD_PRODVD_VERSION);      
+                       g_warning("Invalid " CDRECORDDVD_NAME " version %s 
found.\n\tExpecting at least version %s\n\tStart xcdroast with the -n option to 
override (not recommended!)", ver, CDRECORDDVD_VERSION);     
                        gtk_exit(1);
                }
        }
@@ -509,7 +513,7 @@
        g_snprintf(tmp,MAXLINE,"%s/%s", libdir, CDDBTOOL);
        check_executable(tmp,NULL,1);
 
-       return isProDVD;
+       return isDVD;
 }
 
 
@@ -702,7 +706,7 @@
        }
 
        /* check prodvd only when it is installed */
-       get_spawn_path(CDRECORDPRODVD,tmp);
+       get_spawn_path(CDRECORDDVD,tmp);
        if (is_file(tmp)) {
                if (check_nonroot_mode_cdrtools(tmp) == 0) {
                        nofail = 0;
@@ -769,7 +773,8 @@
 /*     g_print("\t-r <root config-file>  (currently: %s)\n", rootconfig); */
        g_print("\t-o : Disable multibyte font support\n");
        g_print("\t-n : Disable cdrtools version check (use at own risk)\n");
-       g_print("\t-w : Don't use cdrecord-ProDVD, even when it is 
available.\n");
+       if (strcmp(CDRECORD, CDRECORDDVD))
+               g_print("\t-w : Don't use " CDRECORDDVD_NAME ", even when it is 
available.\n");
 #if (defined(__MACH__) && defined(__APPLE__)) 
        g_print("\t-a : Don't display the autodiskmount daemon handling at 
startup\n");
 #else
@@ -797,7 +802,7 @@
 gchar *p1;
 gchar *alt_dev_string;
 gint c, usercnf, stat;
-gint isProDVD, ignoreProDVD;
+gint isDVD, ignoreDVD;
        
        if (!language) 
                language = g_strdup("");
@@ -807,7 +812,7 @@
        no_versioncheck = 0;
        support_ontheflyaudio = 0;
        c_locale_is_utf8 = 0;
-       ignoreProDVD = 0;
+       ignoreDVD = 0;
        alt_dev_string = NULL;
        strncpy(configdir, CONFIGDIR, MAXLINE);
        g_snprintf(rootconfig, MAXLINE, "%s/%s", SYSCONFDIR, ROOTCONFIG);
@@ -874,7 +879,7 @@
                break;
 
        case 'w':
-               ignoreProDVD = 1;
+               ignoreDVD = 1;
                break;
 
        case 'f':
@@ -974,17 +979,19 @@
 #endif 
 
        dodebug(3, "Checking for helper binaries (noversioncheck = %d)\n", 
no_versioncheck);
-       isProDVD = check_binaries(no_versioncheck);
+       isDVD = check_binaries(no_versioncheck);
 
-       if (isProDVD) {
-               if (ignoreProDVD) {
-                       isProDVD = 0;
-                       dodebug(1,"-> cdrecord.ProDVD detected but disabled\n");
-               } else {        
-                       dodebug(1,"-> cdrecord.ProDVD detected\n");
+       if (strcmp(CDRECORD, CDRECORDDVD)) {
+               if (isDVD) {
+                       if (ignoreDVD) {
+                               isDVD = 0;
+                               dodebug(1,"-> " CDRECORDDVD_NAME " detected but 
disabled\n");
+                       } else {        
+                               dodebug(1,"-> " CDRECORDDVD_NAME " detected\n");
+                       }
+               } else {
+                       dodebug(1,"-> " CDRECORDDVD_NAME " not detected\n");
                }
-       } else {
-               dodebug(1,"-> cdrecord.ProDVD not detected\n");
        }
        if (support_ontheflyaudio == 1) {
                dodebug(1, "   Enabled support for on-the-fly audio\n");
@@ -1025,7 +1032,7 @@
        tocfiles = (GList *) NULL;
        strcpy(xcdroast_version_loaded, "");
 
-       curset.isProDVD = isProDVD;
+       curset.isDVD = isDVD;
        curset.support_ontheflyaudio = support_ontheflyaudio;
 
        /* load iso-options if available */
@@ -1146,7 +1153,8 @@
        }
 #endif
 
-       if (curset.isProDVD == 1) {
+#ifndef CDRECORDDVD_IS_FREE
+       if (curset.isDVD == 1) {
                /* set key if we got one from the config-file */
                if (strcmp(setupdata.ProDVDkey,"")) {
 
@@ -1159,6 +1167,7 @@
 #endif
                }
        }
+#endif
 
        if (usercnf == 0) {
                /* load ok */
diff -ur xcdroast-0.98+0alpha15.orig/src/io.c xcdroast-0.98+0alpha15/src/io.c
--- xcdroast-0.98+0alpha15.orig/src/io.c        2006-10-24 01:44:15.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/io.c     2006-10-22 13:14:48.000000000 +0000
@@ -701,7 +701,7 @@
        strncpy(tmp2,dev,MAXLINE);
        convert_escape(tmp2);
 
-       g_snprintf(tmp,MAXLINE," -scanbus dev= \"%s\" 2>&1",tmp2);
+       g_snprintf(tmp,MAXLINE," -scanbus dev= \"%s\" 2>/dev/null",tmp2);
        strcat(line,tmp);
 
        dodebug(1, "calling: %s\n", line);
@@ -920,7 +920,7 @@
 
        /* traditional scanning first */
        get_wrap_path_cdrecord(line);
-       strcat(line," -scanbus 2>&1");
+       strcat(line," -scanbus 2>/dev/null");
 
        dodebug(1, "calling: %s\n", line);
         if ((fpin = popen(line,"r")) == NULL) {
@@ -978,7 +978,7 @@
        scsicount = 0;
 
        get_wrap_path_cdrecord(line);
-       g_snprintf(tmp,MAXLINE," dev=%s -scanbus 2>&1", transport);
+       g_snprintf(tmp,MAXLINE," dev=%s -scanbus 2>/dev/null", transport);
        strcat(line, tmp);
        
        dodebug(1, "calling: %s\n", line);
@@ -1273,7 +1273,7 @@
        drvcount = 0;
 
        get_wrap_path_cdrecord(line);
-       strcat(line," driver=help 2>&1");
+       strcat(line," driver=help 2>&1 | sed -n '/Driver types:/,//p'");
 
        dodebug(1, "calling: %s\n", line);
         if ((fpin = popen(line,"r")) == NULL) {
@@ -1480,9 +1480,9 @@
 
         if (!dev) return;
 
-       /* if prodvd available use it to get additional info */
-       if (curset.isProDVD) {
-               get_wrap_path("CDRECORDPRODVD", tmp);
+       /* if (pro)dvd available use it to get additional info */
+       if (curset.isDVD) {
+               get_wrap_path("CDRECORDDVD", tmp);
        } else {
                get_wrap_path("CDRECORD", tmp);
        }
@@ -2100,9 +2100,11 @@
        g_snprintf(tmp,MAXLINE,"OPTION_SELECTIONMODE = 
%d\n",setupdata.option_selectionmode);
        fputs(tmp,fd);
 
+#ifndef CDRECORDDVD_IS_FREE
        strcpy(tmp2,setupdata.ProDVDkey);
        g_snprintf(tmp,MAXLINE,"PRODVD_KEY = \"%s\"\n",convert_escape(tmp2));
        fputs(tmp,fd);
+#endif
 
        /* save geometry data? */
        if (setupdata.option_savepos) {
@@ -2217,6 +2219,7 @@
                if (fgets(line,MAXLINE,fd) == NULL)
                        break;
 
+#ifndef CDRECORDDVD_IS_FREE
                /* special case here to protect pro-dvd-key */
                if (strstr(line, "PRODVD_KEY") && strlen(line) > 50) {
                        strncpy(tmp,line,50);
@@ -2225,6 +2228,7 @@
                } else {
                        dodebug(10,"config: %s", line);
                }
+#endif
 
                /* skip empty or hashed lines */
                strip_string(line);
@@ -2504,6 +2508,7 @@
                if (strcmp("OPTION_SELECTIONMODE",id) == 0) {
                        setupdata.option_selectionmode = atoi(value);
                }
+#ifndef CDRECORDDVD_IS_FREE
                if (strcmp("PRODVD_KEY",id) == 0) {
                        /* dont overwrite evtuelly set value with empty key */
                        if (strcmp(value,"") != 0) {
@@ -2511,6 +2516,7 @@
                                setupdata.ProDVDkey = g_strdup(value);
                        }
                }
+#endif
                if (setupdata.option_savepos) {
                        if (strcmp("GEOMETRY_MAINWINDOW_X",id) == 0) {
                                setupdata.mainwindow.x = atoi(value);
@@ -5546,8 +5552,8 @@
        }
 
        /* build command line */
-       if (curset.isProDVD) {
-               get_wrap_path("CDRECORDPRODVD", tmp3);
+       if (curset.isDVD) {
+               get_wrap_path("CDRECORDDVD", tmp3);
        } else {
                get_wrap_path("CDRECORD", tmp3);
        }
@@ -5856,7 +5856,7 @@
        drvcount = 0;
 
        get_wrap_path_cdrecord(line);
-       strcat(line," blank=help 2>&1");
+       strcat(line," blank=help 2>&1 | sed -n '/Blanking options:/,//p'");
 
        dodebug(1, "calling: %s\n", line);
 
@@ -5980,19 +5980,21 @@
                        dialog_done = -1;
                }
 
+#ifndef CDRECORDDVD_IS_FREE
                /* or cdrecord died by signal? e.g. SIGALRM */
                if (WIFSIGNALED(ret) && read_done == 0) {
 
                        /* most likely invalid prodvd key */
-                       if (curset.isProDVD) {
+                       if (curset.isDVD) {
                                strncpy(tmp, "\nReceived ALARM from 
cdrecord-ProDVD. Aborting blank...\nInvalid ProDVD key?\n", MAXLINE);
 
                                convert_for_gtk2_textwidget(tmp);
                                gtk_text_insert(GTK_TEXT(readtrack_textview),
                                        fixedfont,NULL,NULL,tmp, strlen(tmp));
                                read_done = 1;
                        }
                }
+#endif
 
                 dodebug(10,"Finished in read_blank_out with status: %d\n", 
                         read_done);
@@ -6158,8 +6164,8 @@
                 strcat(tmp3, tmp4);
         }
        
-       if (curset.isProDVD) {
-               get_wrap_path("CDRECORDPRODVD", tmp5);
+       if (curset.isDVD) {
+               get_wrap_path("CDRECORDDVD", tmp5);
        } else {
                get_wrap_path("CDRECORD", tmp5);
        }
@@ -6367,14 +6343,16 @@
                        dialog_done = -1;
                }
 
+#ifndef CDRECORDDVD_IS_FREE
                /* or cdrecord died by signal? e.g. SIGALRM */
                if (WIFSIGNALED(ret) && read_done == 0) {
 
                        /* most likely invalid prodvd key */
-                       if (curset.isProDVD && curset.cdrtype > 1000) {
+                       if (curset.isDVD && curset.cdrtype > 1000) {
                                read_done = 2;
                        }
                }
+#endif
 
                 dodebug(10,"Finished in read_write_out with status: %d\n", 
                         read_done);
@@ -6400,22 +6408,24 @@
                return;
        }
 
+#ifndef CDRECORDDVD_IS_FREE
        /* prodvd and beginning to write soon? */
-       if (curset.isProDVD && curset.cdrtype > 1000) {
+       if (curset.isDVD && curset.cdrtype > 1000) {
                if (strstr(line,"Last chance to quit")) {
                        cdrtimer = gtk_timeout_add(1000, 
                                        cdrtimer_callback, NULL);
                }
 
                /* if we get that far, we are sure we are over the key
                   check */
                if (strstr(line,"1 second")) {
                        if (cdrtimer) {
                                gtk_timeout_remove(cdrtimer);
                                cdrtimer = 0;
                        }
                }
        }
+#endif
 
        /* skip all lines that contain "seconds." */
        if (n > 8) {
@@ -6706,14 +6712,16 @@
 }
 
 
+#ifndef CDRECORDDVD_IS_FREE
 /* display an error when useing prodvd and cdrecord aborts */
 
 static void display_invalid_prodvdkey() {
 
        if (curset.isProDVD && curset.cdrtype > 1000) {
                show_dialog(ICO_WARN, _("cdrecord-ProDVD terminated.\n\nMost 
likely because you have entered\nan invalid key. Please check if it is 
correct."), T_OK, NULL, NULL, 0);
        }
 }
+#endif
 
 
 /* call cdrecord to write some tracks */
@@ -6962,10 +6968,12 @@
        if (read_done != 0 || read_output_ctrl == 5) {
                gtk_label_set_text(GTK_LABEL(readtrack_info_label), _("Error 
writing tracks"));
                
gtk_label_set_text(GTK_LABEL(readtrack_small_info),_("Write-Error:"));
+#ifndef CDRECORDDVD_IS_FREE
                if (read_done == 2) {
                        /* invalid cdrecord key - show window */
                        display_invalid_prodvdkey();
                }
+#endif
                return 1;
        } else {
                /* all ok */
@@ -7560,10 +7566,12 @@
        if (read_done != 0 || read_output_ctrl == 5) {
                gtk_label_set_text(GTK_LABEL(readtrack_info_label), _("Error 
writing tracks"));
                
gtk_label_set_text(GTK_LABEL(readtrack_small_info),_("Write-Error:"));
+#ifndef CDRECORDDVD_IS_FREE
                 if (read_done == 2) {
                         /* invalid cdrecord key - show window */
                        display_invalid_prodvdkey();
                 }
+#endif
                return 1;
        } else {
                /* all ok */
@@ -7729,10 +7735,12 @@
        if (read_done != 0 || read_output_ctrl == 5) {
                gtk_label_set_text(GTK_LABEL(readtrack_info_label), _("Error 
writing tracks"));
                
gtk_label_set_text(GTK_LABEL(readtrack_small_info),_("Write-Error:"));
+#ifndef CDRECORDDVD_IS_FREE
                 if (read_done == 2) {
                         /* invalid cdrecord key - show window */
                        display_invalid_prodvdkey();
                 }
+#endif
                return 1;
        } else {
                /* all ok */
@@ -9882,10 +9888,12 @@
        if (read_done != 0 || read_output_ctrl == 5) {
                gtk_label_set_text(GTK_LABEL(readtrack_info_label), _("Error 
writing tracks"));
                
gtk_label_set_text(GTK_LABEL(readtrack_small_info),_("Write-Error:"));
+#ifndef CDRECORDDVD_IS_FREE
                 if (read_done == 2) {
                         /* invalid cdrecord key - show window */
                        display_invalid_prodvdkey();
                 }
+#endif
                return 1;
        } else {
                /* all ok */
@@ -9899,17 +9905,17 @@
 /* check the version of cdrecord */
 /* return 1 if not correct (to old) */
 
-gint check_version_cdrecord(gchar *match, gint dvd, gchar *found, gint 
*isProDVD) {
+gint check_version_cdrecord(gchar *match, gint dvd, gchar *found, gint *isDVD) 
{
 gchar line[MAXLINE];
 gchar vline[MAXLINE];
 gchar ver[MAXLINE];
 FILE *fpin;
 gchar *p;
 
-       *isProDVD = 0;
+       *isDVD = 0;
        strcpy(ver,"");
        if (dvd) {
-               get_wrap_path("CDRECORDPRODVD",line);
+               get_wrap_path("CDRECORDDVD",line);
        } else {
                get_wrap_path("CDRECORD",line);
        }
@@ -9913,7 +9913,7 @@
        } else {
                get_wrap_path("CDRECORD",line);
        }
-       strcat(line," -version 2>/dev/null");
+       strcat(line," -version 2>&1");
 
        dodebug(1, "calling: %s\n", line);
         if ((fpin = popen(line,"r")) == NULL) {
@@ -9954,7 +9954,7 @@
        } else {
                p = strstr(vline, "Cdrecord-ProDVD-Clone");
                if (p != NULL) {
-                       *isProDVD = 1;
+                       *isDVD = 1;
                        p = strtok(p+22, " ");
                        if (p != NULL) {
                                strcpy(ver,p);
@@ -9968,6 +9968,9 @@
                                        p = strtok(NULL, " ");
                                        if (p) {
                                                strcpy(ver,p);
+                                               if (strstr(ver,"-dvd")) {
+                                                       *isDVD = 1;
+                                               }
                                        }
                                }
                        }
@@ -10137,7 +10140,7 @@
 
        strcpy(ver,"");
        get_wrap_path("READCD",line);
-       strcat(line," -version 2>/dev/null");
+       strcat(line," -version 2>/dev/null | head -n 1");
 
        dodebug(1, "calling: %s\n", line);
         if ((fpin = popen(line,"r")) == NULL) {
diff -ur xcdroast-0.98+0alpha15.orig/src/main.c 
xcdroast-0.98+0alpha15/src/main.c
--- xcdroast-0.98+0alpha15.orig/src/main.c      2006-10-24 01:44:15.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/main.c   2006-10-22 13:15:10.000000000 +0000
@@ -227,7 +227,7 @@
        gtk_box_pack_start(GTK_BOX(sidespace), side_t,TRUE,TRUE,0);
 
        side_t_btn1 = gtk_button_new_with_label (_("Setup"));
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                side_t_btn2 = gtk_button_new_with_label (_("Duplicate CD"));
                side_t_btn3 = gtk_button_new_with_label (_("Create CD"));
        } else {
@@ -582,18 +582,20 @@
 */
 
         /* warn about non-existing LFS support in dvd mode */
-        if (curset.isProDVD == 1 && sizeof(off_t) != 8) {
+        if (curset.isDVD == 1 && sizeof(off_t) != 8) {
                 show_dialog(ICO_WARN, _("Warning: Your system is not able to 
create files larger\nthan 2 GB. Writing DVDs will therefore not possible."), 
T_OK, NULL, NULL, 0);
         }
 
+#ifndef CDRECORDDVD_IS_FREE
         /* if we are in DVD mode, check if the security-key is set */
-        if (curset.isProDVD == 1) {
+        if (curset.isDVD == 1) {
                 keyenv = getenv("CDR_SECURITY");
                 if (keyenv == NULL) {
                        show_dialog(ICO_WARN, _("Warning: You have not entered 
a cdrecord-ProDVD key in setup.\nPlease see the FAQ on how to obtain your free 
key.\nYou also have to renew the key every few months because it got an\nexpire 
date. You will not be able to properly write DVDs without it."), T_OK, NULL, 
NULL, 0); 
                 }
 
        }
+#endif
 
        dolog(1,"Starting X-CD-Roast\n");
 
diff -ur xcdroast-0.98+0alpha15.orig/src/main.h 
xcdroast-0.98+0alpha15/src/main.h
--- xcdroast-0.98+0alpha15.orig/src/main.h      2006-10-24 01:44:02.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/main.h   2006-10-22 13:15:19.000000000 +0000
@@ -193,7 +193,7 @@
 gint start_master_action();
 gint start_onthefly_master_action(gint write_devnr);
 
-gint check_version_cdrecord(gchar *match, gint dvd, gchar *found, gint 
*isProDVD);
+gint check_version_cdrecord(gchar *match, gint dvd, gchar *found, gint *isDVD);
 gint check_version_mkisofs(gchar *match, gchar *found);
 gint check_version_cdda2wav(gchar *match, gchar *found);
 gint check_version_readcd(gchar *match, gchar *found);
diff -ur xcdroast-0.98+0alpha15.orig/src/menus.c 
xcdroast-0.98+0alpha15/src/menus.c
--- xcdroast-0.98+0alpha15.orig/src/menus.c     2006-10-24 01:44:02.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/menus.c  2006-10-22 13:15:27.000000000 +0000
@@ -2702,7 +2702,7 @@
        gtk_container_set_border_width (GTK_CONTAINER (box1), 5);
         gtk_container_add(GTK_CONTAINER(dialog),box1);
 
-        if (!curset.isProDVD) {
+        if (!curset.isDVD) {
                f1 = gtk_frame_new(_("Blank CD-RW"));
         } else {
                f1 = gtk_frame_new(_("Blank CD/DVD+-RW"));
@@ -2812,7 +2812,7 @@
        gtk_box_pack_start(GTK_BOX(box1),box3,FALSE,TRUE,5);
        gtk_widget_show(box3);
 
-        if (!curset.isProDVD) {
+        if (!curset.isDVD) {
                button1 = gtk_button_new_with_label(_("Blank CD-RW"));
         } else {
                button1 = gtk_button_new_with_label(_("Blank CD/DVD+-RW"));
diff -ur xcdroast-0.98+0alpha15.orig/src/setup.c 
xcdroast-0.98+0alpha15/src/setup.c
--- xcdroast-0.98+0alpha15.orig/src/setup.c     2006-10-24 01:44:02.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/setup.c  2006-10-22 13:18:06.000000000 +0000
@@ -133,8 +133,10 @@
        g_free(bak_setupdata.cddb_proxy_host);
        setupdata.logfile = g_strdup(bak_setupdata.logfile);
        g_free(bak_setupdata.logfile);
+#ifndef CDRECORDDVD_IS_FREE
        setupdata.ProDVDkey = g_strdup(bak_setupdata.ProDVDkey);
        g_free(bak_setupdata.ProDVDkey);
+#endif
 
        /* restore and free also writerreader structure copy */
        if (bak_writerreader) {
@@ -264,6 +266,7 @@
        /* check_tilde(tmp); */
        setupdata.logfile = g_strdup(tmp);
 
+#ifndef CDRECORDDVD_IS_FREE
        g_free(setupdata.ProDVDkey);
        n = gtk_text_get_length(GTK_TEXT(prodvdkey_txt));
        buf = gtk_editable_get_chars(GTK_EDITABLE(prodvdkey_txt),0,n);
@@ -282,6 +285,7 @@
 #else  
         putenv(security_key);
 #endif
+#endif
 
        /* save the current window size if we are asked to */
        if (setupdata.option_savepos) {
@@ -306,8 +310,8 @@
        dolog(2, "Confirm setup\n");
 
        /* some lasts checks and warnings */
-       if (is_dvdwriter(setupdata.writer_devnr) && !curset.isProDVD) {
-               ret = show_dialog(ICO_WARN, _("Please note that you have to 
install ProDVD support before\nyou can write DVDs. Currently you will only be 
able to\nwrite regular CDs with your DVD-Writer."), T_OK,T_CANCEL, NULL, 0);
+       if (is_dvdwriter(setupdata.writer_devnr) && !curset.isDVD) {
+               ret = show_dialog(ICO_WARN, _("Please note that you have to 
install DVD support before\nyou can write DVDs. Currently you will only be able 
to\nwrite regular CDs with your DVD-Writer."), T_OK,T_CANCEL, NULL, 0);
                if (ret == 1) {
                        /* abort */
                        return;
@@ -331,7 +335,9 @@
                return;
 
        /* free memory of backup-config */
+#ifndef CDRECORDDVD_IS_FREE
        g_free(bak_setupdata.ProDVDkey);
+#endif
        g_free(bak_setupdata.logfile);
        g_free(bak_setupdata.cddb_host);
        g_free(bak_setupdata.cddb_proxy_host);
@@ -1138,7 +1144,7 @@
        gtk_box_pack_start(GTK_BOX(vbox2),tbl,FALSE,TRUE,0);
        gtk_widget_show(tbl);
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                l1 = rightjust_gtk_label_new(_("CD Writer Device:"));
        } else {
                l1 = rightjust_gtk_label_new(_("CD/DVD Writer Device:"));
@@ -2738,6 +2744,7 @@
        define_tooltip(check, _("When enabled, then multiple selections in 
lists are handled like the lists in Windows (hold CTRL-Key to select more than 
one entry and use SHIFT to select a whole range of entries)."));
 
 
+#ifndef CDRECORDDVD_IS_FREE
        f1 = gtk_frame_new(_("cdrecord-ProDVD key"));
        set_font_and_color_frame(f1,BOLDFONT,NULL);
        gtk_box_pack_start(GTK_BOX(vbox),f1,TRUE,TRUE,10);
@@ -2780,6 +2787,7 @@
                gtk_widget_set_sensitive(l1, FALSE);
                gtk_widget_set_sensitive(txt, FALSE);
        }
+#endif // !defined(CDRECORDDVD_IS_FREE)
 }
 
 
@@ -3184,7 +3192,7 @@
        gtk_container_add (GTK_CONTAINER (f1), tbl);
        gtk_widget_show(tbl);
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                check = gtk_check_button_new_with_label(_("change CD Writer 
Device"));
        } else {
                check = gtk_check_button_new_with_label(_("change CD/DVD Writer 
Device"));
@@ -3206,7 +3214,7 @@
        gtk_widget_show(check);
        define_tooltip(check, _("If enabled, then the user is allowed the 
change the write parameters for the CD Writer (e.g. Speed and 
FIFO-Buffer-Size)."));
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                check = gtk_check_button_new_with_label(_("change CD Reader 
Device"));
        } else {
                check = gtk_check_button_new_with_label(_("change CD/DVD Reader 
Device"));
@@ -3288,7 +3296,9 @@
        bak_setupdata.cddb_host = g_strdup(setupdata.cddb_host);
        bak_setupdata.cddb_proxy_host = g_strdup(setupdata.cddb_proxy_host);
        bak_setupdata.logfile = g_strdup(setupdata.logfile);
+#ifndef CDRECORDDVD_IS_FREE
        bak_setupdata.ProDVDkey = g_strdup(setupdata.ProDVDkey);
+#endif
 
        /* backup the dynamic part of the readerwriter structure too */
        bak_writerreader = g_new0(writerreader_bak_t *, MAXDEVICES);
@@ -3373,7 +3383,7 @@
        gtk_notebook_append_page(GTK_NOTEBOOK (notebook),f1,l1);
        draw_scsi_scan(f1);
 
-       if (!curset.isProDVD) {
+       if (!curset.isDVD) {
                l2 = gtk_label_new(_("CD Settings"));
        } else {
                l2 = gtk_label_new(_("CD/DVD Settings"));
diff -ur xcdroast-0.98+0alpha15.orig/src/xcdrdata.h 
xcdroast-0.98+0alpha15/src/xcdrdata.h
--- xcdroast-0.98+0alpha15.orig/src/xcdrdata.h  2003-05-26 20:55:44.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/xcdrdata.h       2006-10-22 13:18:26.000000000 
+0000
@@ -60,7 +60,9 @@
        gboolean root_option_change_imagedirs;
        gboolean root_option_change_logoptions;
 
+#ifndef CDRECORDDVD_IS_FREE
        gchar *ProDVDkey;
+#endif
        geometry_t mainwindow;
        geometry_t burnwindow;
        
@@ -120,7 +122,7 @@
 } writer_driver_t;
 
 typedef struct current_set {
-       gint isProDVD;
+       gint isDVD;
        gint support_ontheflyaudio;
        gint writer_devnr;
        gint reader_devnr;
diff -ur xcdroast-0.98+0alpha15.orig/src/xcdroast.h 
xcdroast-0.98+0alpha15/src/xcdroast.h
--- xcdroast-0.98+0alpha15.orig/src/xcdroast.h  2006-10-24 01:44:15.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/xcdroast.h       2006-10-24 01:43:05.000000000 
+0000
@@ -112,19 +112,23 @@
    then in $PREFIX (e.g. /usr/bin/cdrecord instead of 
    /usr/local/lib/xcdroast-0.98/bin/cdrecord) */
 
-#define CDRECORD "bin/cdrecord" 
-#define CDRECORDPRODVD "bin/cdrecord.prodvd" 
+#define CDRECORD "bin/wodim" 
+#define CDRECORDDVD "bin/wodim" 
 #define CDDA2WAV "bin/cdda2wav"
 #define READCD "bin/readcd"
 #define MKISOFS "bin/mkisofs"
 
+#define CDRECORD_NAME "wodim"
+#define CDRECORDDVD_NAME "wodim"
+#define CDRECORDDVD_IS_FREE
+
 /* MINIMUM required versions. Greater versions are now silently
    accepted. 
    Distribution-Vendors: DO NOT TOUCH THESE!
    IT WONT WORK WITH LOWER VERSIONS, EVEN WHEN YOU THINK IT DOES! */
  
 #define CDRECORD_VERSION "1.11a34"
-#define CDRECORD_PRODVD_VERSION "2.01.01"
+#define CDRECORDDVD_VERSION "2.01.01"
 #define CDRECORD_VERSION_WITH_ONTHFLYAUDIO "2.01.01"
 #define MKISOFS_VERSION "1.15a17"
 #define CDDA2WAV_VERSION "1.11a34"
diff -ur xcdroast-0.98+0alpha15.orig/src/xcdrwrap.c 
xcdroast-0.98+0alpha15/src/xcdrwrap.c
--- xcdroast-0.98+0alpha15.orig/src/xcdrwrap.c  2006-10-24 01:44:02.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/xcdrwrap.c       2006-10-22 13:18:50.000000000 
+0000
@@ -277,8 +277,8 @@
                strcpy(ret, CDRECORD);
                return ret;
        }
-       if (strncmp(cmd,"CDRECORDPRODVD",MAXLINE) == 0) {
-               strcpy(ret, CDRECORDPRODVD);
+       if (strncmp(cmd,"CDRECORDDVD",MAXLINE) == 0) {
+               strcpy(ret, CDRECORDDVD);
                return ret;
        }
        if (strncmp(cmd,"CDDA2WAV",MAXLINE) == 0) {
@@ -314,9 +314,9 @@
 #endif
                /* show found paths of helper apps */
                get_spawn_path(CDRECORD, tmp, 1);
-               printf("cdrecord found at: %s\n", tmp);
-               get_spawn_path(CDRECORDPRODVD, tmp, 1);
-               printf("cdrecord-ProDVD found at: %s\n", tmp);
+               printf(CDRECORD_NAME " found at: %s\n", tmp);
+               get_spawn_path(CDRECORDDVD, tmp, 1);
+               printf(CDRECORDDVD_NAME " found at: %s\n", tmp);
                get_spawn_path(CDDA2WAV, tmp, 1);
                printf("cdda2wav found at: %s\n", tmp);
                get_spawn_path(READCD, tmp, 1);
diff -ur xcdroast-0.98+0alpha15.orig/src/xtools.c 
xcdroast-0.98+0alpha15/src/xtools.c
--- xcdroast-0.98+0alpha15.orig/src/xtools.c    2006-10-24 01:44:02.000000000 
+0000
+++ xcdroast-0.98+0alpha15/src/xtools.c 2006-10-22 13:21:20.000000000 +0000
@@ -2376,7 +2376,7 @@
 
 /* reroute a command through the wrapper */
 /* cmd is one of "CDRECORD", "MKISOFS", "CDDA2WAV", "READCD" 
-   or "CDRECORDPRODVD" */
+   or "CDRECORDDVD" */
 
 gchar *get_wrap_path(gchar *cmd, gchar *ret) {
 gchar tmp[MAXLINE];
@@ -2388,15 +2388,15 @@
 }
 
 /* reroute the cdrecord command through the wrapper */
-/* determine automatically if proDVD version is needed or not */
+/* determine automatically if (pro)DVD version is needed or not */
 
 gchar *get_wrap_path_cdrecord(gchar *ret) {
 gchar tmp[MAXLINE];
 
        /* use DVD version if installed and media type > 1GB */
-       if (curset.isProDVD && curset.cdrtype > 1000) {
+       if (curset.isDVD && curset.cdrtype > 1000) {
                g_snprintf(tmp,MAXLINE,"%s/%s %s", libdir, WRAPPER, 
-                       "CDRECORDPRODVD");
+                       "CDRECORDDVD");
        } else {
                g_snprintf(tmp,MAXLINE,"%s/%s %s", libdir, WRAPPER, 
                        "CDRECORD");
@@ -2411,7 +2411,7 @@
 
 gint get_gracetime() {
 
-       if (curset.isProDVD && curset.cdrtype > 1000) {
+       if (curset.isDVD && curset.cdrtype > 1000) {
                /* use 10 seconds for prodvd, because the keycheck
                   can take a while... */
                return 10;
@@ -3522,7 +3522,7 @@
 
 /* return whether we have a empty CD-R or DVD-R in the drive */
 /* we are sure that there IS a medium there - but we dont know which type */
-/* check only if device is dvdwriter and we have prodvd installed */
+/* check only if device is dvdwriter and we have (pro)dvd installed */
 
 gchar *return_media_type(gint devnr) {
 gchar drvflags[MAXLINE], drvmodes[MAXLINE];
@@ -3532,7 +3532,7 @@
        isdvd = 0;
        i = get_writerreaderdevs_index(devnr);
 
-       if (i >= 0 && curset.isProDVD && writerreaderdevs[i]->is_dvdwriter) {
+       if (i >= 0 && curset.isDVD && writerreaderdevs[i]->is_dvdwriter) {
                if (convert_devnr2busid(devnr,tmp) != 0) {
                        g_error("non existing cdrom?");
                }
-- END --

-- 
Ben Hutchings -- [EMAIL PROTECTED] shortened to [EMAIL PROTECTED]
If you've signed my GPG key, please send a signature on and to the new uid.
Once a job is fouled up, anything done to improve it makes it worse.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to