From a2493b97e497cb490452b35163d0df1b1532b3e7 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 8 Jan 2012 19:14:42 +0000 Subject: [PATCH] New cdrskin option cd_start_tno= --- cdrskin/cdrskin.1 | 16 +++++++++++++++- cdrskin/cdrskin.c | 28 +++++++++++++++++++++++++++- cdrskin/cdrskin_timestamp.h | 2 +- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/cdrskin/cdrskin.1 b/cdrskin/cdrskin.1 index 639bcf8..851a15b 100644 --- a/cdrskin/cdrskin.1 +++ b/cdrskin/cdrskin.1 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH CDRSKIN 1 "Jan 06, 2012" +.TH CDRSKIN 1 "Jan 08, 2012" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -516,6 +516,8 @@ Non-CDRWIN commands ARRANGER, COMPOSER, MESSAGE are supported. Cue sheet file commands CATALOG and ISRC may be overridden by option mcn= and by input_sheet_v07t= purpose specifiers "UPC / EAN" and "ISRC". This does not affect their appearance in CD-TEXT, but only on Q sub-channel. +.br +The track numbers may be overridden by option cd_start_tno=. .TP .BI \-dao Alias for option -sao. Write CD in Session at Once mode @@ -982,6 +984,16 @@ taken as plain block number with block size 2048 byte. (E.g ...=1000 or ...=1000s means block 1000, ...=1m means block 512, ...=4096b means block number 2) .TP +.BI cd_start_tno= number +Set the number which shall be written as CD track number with the first +track of the session. The following tracks will then get written with +consequtive CD track numbers. The resulting number of the last track +must not exceed 99. The lowest possible start number is 1, which is also +the default. +.br +This setting applies only to CD SAO writing. It overrides the track number +settings caused by options cuefile= or input_sheet_v07t=. +.TP .BI \--demand_a_drive Exit with a nonzero value if no drive can be found during a bus scan. .TP @@ -1212,6 +1224,8 @@ used as CD-TEXT language blocks 1 to 7. .br This option will get into effect only if no option textfile= is given. The write mode must be SAO on CD. All tracks must be -audio tracks. +.br +The track numbers may be overridden by option cd_start_tno=. .TP .BI \--list_formats List the available format descriptors as reported by the drive for the diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index 8d2b68c..aa8b0da 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -2783,6 +2783,8 @@ set_dev:; " --any_track allow source_addresses to match '^-.' or '='\n"); printf( " assert_write_lba= abort if not next write address == lba\n"); + fprintf(stderr, + " cd_start_tno= set number of first track in CD SAO session\n"); fprintf(stderr, " --cdtext_dummy show CD-TEXT pack array instead of writing CD\n"); fprintf(stderr, @@ -3426,6 +3428,9 @@ struct CdrskiN { /** a guess about what track might be processing right now */ int supposed_track_idx; + /** The number of the first track in a CD SAO session */ + int cd_start_tno; + int fifo_enabled; /** Optional fifo between input fd and libburn. It uses a pipe(2) to transfer data to libburn. This fifo may be actually the start of a chain of fifos @@ -3588,6 +3593,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag) o->tracklist[i]= NULL; o->track_counter= 0; o->supposed_track_idx= -1; + o->cd_start_tno= 0; o->fifo_enabled= 1; o->fifo= NULL; o->fifo_outlet_fd= -1; @@ -6902,6 +6908,11 @@ burn_failed:; burn_write_opts_set_mediacatalog(o, (unsigned char *) skin->mcn); burn_write_opts_set_has_mediacatalog(o, 1); } + if(skin->cd_start_tno >= 1 && skin->cd_start_tno <= 99) { + ret= burn_session_set_start_tno(session, skin->cd_start_tno, 0); + if(ret <= 0) + goto burn_failed; + } ret= Cdrskin_activate_write_mode(skin,o,disc,0); if(ret<=0) goto burn_failed; @@ -7381,7 +7392,7 @@ sorry_failed_to_eject:; */ int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag) { - int i,k,l,ret, idx= -1; + int i,k,l,ret, idx= -1, cd_start_tno; double value,grab_and_wait_value= -1.0, num; char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= ""; struct stat stbuf; @@ -7631,6 +7642,21 @@ unsupported_blank_option:; } else if(strcmp(argv[i],"--bragg_with_audio")==0) { /* OBSOLETE 0.2.3 : was handled in Cdrpreskin_setup() */; + } else if(strncmp(argv[i], "-cd_start_tno", 14)==0) { + value_pt= argv[i] + 14; + goto set_cd_start_tno; + } else if(strncmp(argv[i], "cd_start_tno=", 13) ==0 ) { + value_pt= argv[i] + 13; +set_cd_start_tno:; + cd_start_tno= -1; + sscanf(value_pt, "%d", &cd_start_tno); + if(cd_start_tno < 1 || cd_start_tno > 99) { + fprintf(stderr, + "cdrskin: FATAL : cd_start_tno= gives a number outside [1 ... 99]\n"); + return(0); + } + skin->cd_start_tno= cd_start_tno; + } else if(strcmp(argv[i],"--cdtext_dummy")==0) { skin->cdtext_test= 2; diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 27ca08f..149d75c 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2012.01.08.154822" +#define Cdrskin_timestamP "2012.01.08.191443"