New option textfile_to_v07t=

This commit is contained in:
Thomas Schmitt 2013-05-19 11:49:24 +00:00
parent 7f8d8a04d0
commit ca3f994dcb
2 changed files with 92 additions and 22 deletions

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Version 1.3.1, May 17, 2013" .TH CDRSKIN 1 "Version 1.3.1, May 19, 2013"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -1339,6 +1339,17 @@ is possible with the given options.
This option redirects to stderr all message output except its own result This option redirects to stderr all message output except its own result
string and eventual output of -msinfo. string and eventual output of -msinfo.
.TP .TP
.BI textfile_to_v07t= path
Read a CD-TEXT pack file (e.g. cdtext.dat from a run with -v -v -toc)
and print its content in the human readable format that is described
with option input_sheet_v07t=.
.br
The program run ends immediately thereafter.
No drive scan will happen and no drive will be aquired.
.br
To avoid the cdrskin start message in the output, run:
cdrskin textfile_to_v07t=cdtext.dat | grep -v '^cdrskin'
.TP
.BI --two_channel .BI --two_channel
Indicate for subsequent tracks that they were mastered with two channels. Indicate for subsequent tracks that they were mastered with two channels.
.TP .TP

View File

@ -1952,6 +1952,9 @@ struct CdrpreskiN {
emulated and cdrecord-incompatible ATA: addresses. */ emulated and cdrecord-incompatible ATA: addresses. */
int old_pseudo_scsi_adr; int old_pseudo_scsi_adr;
/** Whether to omit bus scanning */
int do_not_scan;
/** Whether bus scans shall exit!=0 if no drive was found */ /** Whether bus scans shall exit!=0 if no drive was found */
int scan_demands_drive; int scan_demands_drive;
@ -2032,6 +2035,7 @@ int Cdrpreskin_new(struct CdrpreskiN **preskin, int flag)
o->no_whitelist= 0; o->no_whitelist= 0;
o->no_convert_fs_adr= 0; o->no_convert_fs_adr= 0;
o->old_pseudo_scsi_adr= 0; o->old_pseudo_scsi_adr= 0;
o->do_not_scan= 0;
o->scan_demands_drive= 0; o->scan_demands_drive= 0;
o->abort_on_busy_drive= 0; o->abort_on_busy_drive= 0;
o->drive_exclusive= 1; o->drive_exclusive= 1;
@ -2512,7 +2516,9 @@ return:
#ifndef Cdrskin_extra_leaN #ifndef Cdrskin_extra_leaN
if(argc>1) { if(argc>1) {
if(strcmp(argv[1],"--no_rc")==0 || strcmp(argv[1],"-version")==0 || if(strcmp(argv[1],"--no_rc")==0 || strcmp(argv[1],"-version")==0 ||
strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-help")==0) strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-help")==0 ||
strncmp(argv[1], "textfile_to_v07t=", 17) == 0 ||
strncmp(argv[1], "-textfile_to_v07t=", 18) == 0)
flag|= 2; flag|= 2;
} }
if(!(flag&2)) { if(!(flag&2)) {
@ -2906,6 +2912,9 @@ set_dev:;
" and no tsize= was specified.\n"); " and no tsize= was specified.\n");
printf( printf(
" --tell_media_space print maximum number of writeable data blocks\n"); " --tell_media_space print maximum number of writeable data blocks\n");
printf(" textfile_to_v07t=file_path\n");
printf(
" print CD-TEXT file in Sony format and exit.\n");
printf(" --two_channel indicate that audio tracks have 2 channels\n"); printf(" --two_channel indicate that audio tracks have 2 channels\n");
printf( printf(
" write_start_address=<num> write to given byte address (DVD+RW)\n"); " write_start_address=<num> write to given byte address (DVD+RW)\n");
@ -3090,6 +3099,11 @@ see_cdrskin_eng_html:;
} else if(strcmp(argpt,"-tao")==0) { } else if(strcmp(argpt,"-tao")==0) {
strcpy(o->write_mode_name,"TAO"); strcpy(o->write_mode_name,"TAO");
} else if(strncmp(argpt, "-textfile_to_v07t=", 18) == 0) {
o->do_not_scan= 1;
} else if(strncmp(argpt ,"textfile_to_v07t=", 17) == 0) {
o->do_not_scan= 1;
} else if(strcmp(argv[i],"-V")==0 || strcmp(argpt, "-Verbose") == 0) { } else if(strcmp(argv[i],"-V")==0 || strcmp(argpt, "-Verbose") == 0) {
burn_set_scsi_logging(2 | 4); /* log SCSI to stderr */ burn_set_scsi_logging(2 | 4); /* log SCSI to stderr */
@ -3346,6 +3360,7 @@ struct CdrskiN {
int do_atip; int do_atip;
int do_list_speeds; int do_list_speeds;
int do_list_formats; int do_list_formats;
int do_list_v07t;
#ifdef Libburn_develop_quality_scaN #ifdef Libburn_develop_quality_scaN
int do_qcheck; /* 0= no , 1=nec_optiarc_rep_err_rate */ int do_qcheck; /* 0= no , 1=nec_optiarc_rep_err_rate */
@ -3597,6 +3612,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
o->do_atip= 0; o->do_atip= 0;
o->do_list_speeds= 0; o->do_list_speeds= 0;
o->do_list_formats= 0; o->do_list_formats= 0;
o->do_list_v07t= 0;
#ifdef Libburn_develop_quality_scaN #ifdef Libburn_develop_quality_scaN
o->do_qcheck= 0; o->do_qcheck= 0;
@ -4835,35 +4851,55 @@ int Cdrskin_obtain_nwa(struct CdrskiN *skin, int *nwa, int flag)
0= CD Lead-in 0= CD Lead-in
1= session and tracks 1= session and tracks
2= textfile= 2= textfile=
bit4-7= output format
0= -vv -toc
1= Sony CD-TEXT Input Sheet Version 0.7T
*/ */
int Cdrskin_print_text_packs(struct CdrskiN *skin, unsigned char *text_packs, int Cdrskin_print_text_packs(struct CdrskiN *skin, unsigned char *text_packs,
int num_packs, int flag) int num_packs, int flag)
{ {
int i, j, from; int i, j, from, fmt, ret, char_code= 0;
char *from_text= ""; char *from_text= "", *result= NULL;
unsigned char *pack; unsigned char *pack;
from= flag & 15; from= flag & 15;
fmt= (flag >> 4) & 15;
if(from == 0) if(from == 0)
from_text= " from CD Lead-in"; from_text= " from CD Lead-in";
else if(from == 1) else if(from == 1)
from_text= " from session and tracks"; from_text= " from session and tracks";
else if(from == 2) else if(from == 2)
from_text= " from textfile= or cuefile= CDTEXTFILE"; from_text= " from textfile= or cuefile= CDTEXTFILE";
printf("CD-TEXT data%s:\n", from_text); if (fmt == 1) {
for(i= 0; i < num_packs; i++) { ret = burn_make_input_sheet_v07t(text_packs, num_packs, 0, 0, &result,
pack= text_packs + 18 * i; &char_code, 0);
printf("%4d :", i); if(ret <= 0)
for(j= 0; j < 18; j++) { goto ex;
if(j >= 4 && j <= 15 && pack[j] >= 32 && pack[j] <= 126 && if(char_code == 0x80)
pack[0] != 0x88 && pack[0] != 0x89 && pack[0] != 0x8f) fprintf(stderr,
printf(" %c", pack[j]); "cdrskin : WARNING : Double byte characters encountered.\n");
else for(i = 0; i < ret; i++)
printf(" %2.2x", pack[j]); printf("%c", result[i]);
} else {
printf("CD-TEXT data%s:\n", from_text);
for(i= 0; i < num_packs; i++) {
pack= text_packs + 18 * i;
printf("%4d :", i);
for(j= 0; j < 18; j++) {
if(j >= 4 && j <= 15 && pack[j] >= 32 && pack[j] <= 126 &&
pack[0] != 0x88 && pack[0] != 0x89 && pack[0] != 0x8f)
printf(" %c", pack[j]);
else
printf(" %2.2x", pack[j]);
}
printf("\n");
} }
printf("\n");
} }
return(1); ret= 1;
ex:;
if(result != NULL)
free(result);
return(ret);
} }
@ -8664,6 +8700,23 @@ set_textfile:;
if(ret <= 0) if(ret <= 0)
return(ret); return(ret);
} else if(strncmp(argpt, "-textfile_to_v07t=", 18) == 0) {
value_pt= argpt + 18;
goto textfile_to_v07t;
} else if(strncmp(argpt ,"textfile_to_v07t=", 17) == 0) {
value_pt= argpt + 17;
textfile_to_v07t:;
ret= Cdrskin_read_textfile(skin, value_pt, 0);
if(ret <= 0)
return(ret);
ret= Cdrskin_print_text_packs(skin, skin->text_packs,
skin->num_text_packs, (1 << 4) | 2);
if(ret <= 0)
return(ret);
if(i != 1 || argc != 2)
fprintf(stderr, "cdrskin: WARNING : Program run ended by option textfile_to_v07t=. Other options may have been ignored.\n");
return(2);
} else if(strcmp(argpt,"-toc")==0) { } else if(strcmp(argpt,"-toc")==0) {
skin->do_atip= 2; skin->do_atip= 2;
if(skin->verbosity>=Cdrskin_verbose_cmD) if(skin->verbosity>=Cdrskin_verbose_cmD)
@ -8900,7 +8953,7 @@ ignore_unknown:;
@param o Returns the CdrskiN object created @param o Returns the CdrskiN object created
@param lib_initialized Returns whether libburn was initialized here @param lib_initialized Returns whether libburn was initialized here
@param exit_value Returns after error the proposal for an exit value @param exit_value Returns after error the proposal for an exit value
@param flag Unused yet @param flag bit0= do not scan for devices
@return <=0 error, 1 success @return <=0 error, 1 success
*/ */
int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin, int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
@ -8956,7 +9009,8 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
Cleanup_set_handlers(Cleanup_handler_handlE, Cleanup_handler_funC, Cleanup_set_handlers(Cleanup_handler_handlE, Cleanup_handler_funC,
2 | 8); 2 | 8);
printf("cdrskin: scanning for devices ...\n"); if(!(flag & 1))
printf("cdrskin: scanning for devices ...\n");
fflush(stdout); fflush(stdout);
if(skin->preskin->verbosity<Cdrskin_verbose_debuG) if(skin->preskin->verbosity<Cdrskin_verbose_debuG)
@ -8982,6 +9036,9 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
skin->n_drives= 1; skin->n_drives= 1;
skin->driveno= 0; skin->driveno= 0;
burn_drive_release(skin->drives[0].drive, 0); burn_drive_release(skin->drives[0].drive, 0);
} else if(flag & 1){
skin->n_drives= 0;
skin->driveno= 0;
} else { } else {
while (!burn_drive_scan(&(skin->drives), &(skin->n_drives))) { while (!burn_drive_scan(&(skin->drives), &(skin->n_drives))) {
usleep(20000); usleep(20000);
@ -8997,7 +9054,8 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
/* This prints the eventual queued messages */ /* This prints the eventual queued messages */
Cdrpreskin_queue_msgs(skin->preskin,0); Cdrpreskin_queue_msgs(skin->preskin,0);
printf("cdrskin: ... scanning for devices done\n"); if(!(flag & 1))
printf("cdrskin: ... scanning for devices done\n");
fflush(stdout); fflush(stdout);
ex:; ex:;
return((*exit_value)==0); return((*exit_value)==0);
@ -9159,7 +9217,7 @@ no_drive:;
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int ret,exit_value= 0,lib_initialized= 0,i,result_fd= -1; int ret,exit_value= 0,lib_initialized= 0,i,result_fd= -1, do_not_scan;
struct CdrpreskiN *preskin= NULL, *h_preskin= NULL; struct CdrpreskiN *preskin= NULL, *h_preskin= NULL;
struct CdrskiN *skin= NULL; struct CdrskiN *skin= NULL;
char *lean_id= ""; char *lean_id= "";
@ -9207,10 +9265,11 @@ int main(int argc, char **argv)
{exit_value= 11; goto ex;} {exit_value= 11; goto ex;}
if(ret==2) if(ret==2)
{exit_value= 0; goto ex;} {exit_value= 0; goto ex;}
ret= Cdrskin_create(&skin,&preskin,&exit_value,0); do_not_scan= preskin->do_not_scan; /* preskin will vanish in Cdrskin_create */
ret= Cdrskin_create(&skin,&preskin,&exit_value, preskin->do_not_scan);
if(ret<=0) if(ret<=0)
{exit_value= 2; goto ex;} {exit_value= 2; goto ex;}
if(skin->n_drives<=0) { if(skin->n_drives<=0 && !do_not_scan) {
fprintf(stderr,"cdrskin: NOTE : No usable drive detected.\n"); fprintf(stderr,"cdrskin: NOTE : No usable drive detected.\n");
if(getuid()!=0) { if(getuid()!=0) {
fprintf(stderr, fprintf(stderr,