New option -load session|track|sbsector|volid
This commit is contained in:
parent
e74c268e4b
commit
15e84acfa5
@ -417,7 +417,7 @@ An empty address string "" gives up the current device
|
|||||||
without aquiring a new one.
|
without aquiring a new one.
|
||||||
.TP
|
.TP
|
||||||
\fB\-indev\fR address
|
\fB\-indev\fR address
|
||||||
Set input drive and load eventual ISO image. If the new input drive differs
|
Set input drive and load an eventual ISO image. If the new input drive differs
|
||||||
from -outdev then switch from growing to modifying. The same rules and
|
from -outdev then switch from growing to modifying. The same rules and
|
||||||
restrictions apply as with -dev.
|
restrictions apply as with -dev.
|
||||||
.TP
|
.TP
|
||||||
@ -437,6 +437,33 @@ apply. See above paragraph "Libburn drives".
|
|||||||
An empty address string "" gives up the current output drive
|
An empty address string "" gives up the current output drive
|
||||||
without aquiring a new one. No writing is possible without an output drive.
|
without aquiring a new one. No writing is possible without an output drive.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-load\fR entity id
|
||||||
|
Load a particular (possibly outdated) ISO image from a -dev or -indev which
|
||||||
|
hosts more than one session. Usually all available sessions are shown with
|
||||||
|
option -toc.
|
||||||
|
.br
|
||||||
|
entity depicts the kind of addressing. id depicts the particular
|
||||||
|
address. The following entities are defined:
|
||||||
|
.br
|
||||||
|
"auto" with any id addresses the last session in -toc. This is the default.
|
||||||
|
.br
|
||||||
|
"session" with id being a number as of a line "ISO session", column "Idx".
|
||||||
|
.br
|
||||||
|
"track" with id being a number as of a line "ISO track", column "Idx".
|
||||||
|
.br
|
||||||
|
"lba" or "sbsector" with a number as of a line "ISO ...", column "sbsector".
|
||||||
|
.br
|
||||||
|
"volid" with a text as of a line "ISO ...", column "Volume Id".
|
||||||
|
.br
|
||||||
|
Adressing a non-existing entity or one which does not represent an ISO
|
||||||
|
image will either abandon -indev or at least lead to a blank image.
|
||||||
|
.br
|
||||||
|
If an input drive is set at the moment when -load is executed, then the
|
||||||
|
addressed ISO image is loaded immediately. Else, the setting will be pending
|
||||||
|
until the next -dev or -indev. After the image has been loaded once, the
|
||||||
|
setting is valid for -rollback until next -dev or -indev, where it
|
||||||
|
will be reset to "auto".
|
||||||
|
.TP
|
||||||
\fB\-rom_toc_scan\fR "on"|"off"
|
\fB\-rom_toc_scan\fR "on"|"off"
|
||||||
Read-only drives do not tell the actual media type but show any media as
|
Read-only drives do not tell the actual media type but show any media as
|
||||||
ROM (e.g. as DVD-ROM). The session history of MMC multi-session media might
|
ROM (e.g. as DVD-ROM). The session history of MMC multi-session media might
|
||||||
|
@ -2696,6 +2696,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
m->do_overwrite= 2;
|
m->do_overwrite= 2;
|
||||||
m->do_reassure= 0;
|
m->do_reassure= 0;
|
||||||
m->toc_emulation_flag= 0;
|
m->toc_emulation_flag= 0;
|
||||||
|
m->image_start_mode= 0;
|
||||||
|
m->image_start_value[0]= 0;
|
||||||
m->indev[0]= 0;
|
m->indev[0]= 0;
|
||||||
m->in_drive_handle= NULL;
|
m->in_drive_handle= NULL;
|
||||||
m->in_volset_handle= NULL;
|
m->in_volset_handle= NULL;
|
||||||
@ -3726,9 +3728,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
-options_from_file:${resume_state_file}_pos
|
-options_from_file:${resume_state_file}_pos
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int is_default, no_defaults, i, ret;
|
int is_default, no_defaults, i, ret, adr_mode;
|
||||||
char *line, sfe[5*SfileadrL], mode[80], *form, *treatment;
|
char *line, sfe[5*SfileadrL], mode[80], *form, *treatment;
|
||||||
static char channel_prefixes[4][4]= {".","R","I","M"};
|
static char channel_prefixes[4][4]= {".","R","I","M"};
|
||||||
|
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
|
||||||
|
static int max_load_mode= 4;
|
||||||
struct LstrinG *paths, *leafs;
|
struct LstrinG *paths, *leafs;
|
||||||
|
|
||||||
no_defaults= flag&1;
|
no_defaults= flag&1;
|
||||||
@ -4041,6 +4045,21 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
if(!(is_default && no_defaults))
|
if(!(is_default && no_defaults))
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
|
||||||
|
adr_mode= xorriso->image_start_mode & 0xffff;
|
||||||
|
if(adr_mode>=0 && adr_mode<=max_load_mode) {
|
||||||
|
is_default= (adr_mode==0);
|
||||||
|
sprintf(line,"-load %s ", load_names[adr_mode]);
|
||||||
|
if(adr_mode==0)
|
||||||
|
sprintf(line+strlen(line),"''\n");
|
||||||
|
else if(adr_mode>=1 && adr_mode<=3)
|
||||||
|
sprintf(line+strlen(line),"%s\n", xorriso->image_start_value);
|
||||||
|
else
|
||||||
|
sprintf(line+strlen(line),"%s\n",
|
||||||
|
Text_shellsafe(xorriso->image_start_value, sfe, 0));
|
||||||
|
if(!(is_default && no_defaults))
|
||||||
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
}
|
||||||
|
|
||||||
if(strcmp(xorriso->indev,xorriso->outdev)==0) {
|
if(strcmp(xorriso->indev,xorriso->outdev)==0) {
|
||||||
sprintf(line,"-dev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
sprintf(line,"-dev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
@ -8401,6 +8420,8 @@ int Xorriso_option_dev(struct XorrisO *xorriso, char *in_adr, int flag)
|
|||||||
ret= Xorriso_aquire_drive(xorriso, adr, (flag&3)|((flag&(8|16))>>1));
|
ret= Xorriso_aquire_drive(xorriso, adr, (flag&3)|((flag&(8|16))>>1));
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(ret);
|
return(ret);
|
||||||
|
if(xorriso->in_drive_handle == NULL)
|
||||||
|
xorriso->image_start_mode= 0; /* session setting is invalid by now */
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8984,6 +9005,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
|||||||
" growing to modifying.",
|
" growing to modifying.",
|
||||||
" -outdev address",
|
" -outdev address",
|
||||||
" Set output drive and switch from growing to modifying.",
|
" Set output drive and switch from growing to modifying.",
|
||||||
|
" -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id",
|
||||||
|
" Load a particular (outdated) ISO image from a -dev or",
|
||||||
|
" -indev which hosts more than one session.",
|
||||||
" -rom_toc_scan \"on\"|\"off\"",
|
" -rom_toc_scan \"on\"|\"off\"",
|
||||||
" Enable scanning for ISO sessions on read-only drives/media.",
|
" Enable scanning for ISO sessions on read-only drives/media.",
|
||||||
" -ban_stdio_write",
|
" -ban_stdio_write",
|
||||||
@ -9351,6 +9375,105 @@ int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Option -load session|track|sbsector value */
|
||||||
|
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
||||||
|
*/
|
||||||
|
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||||
|
char *adr_value, int flag)
|
||||||
|
{
|
||||||
|
double num;
|
||||||
|
int ret, l;
|
||||||
|
|
||||||
|
if(xorriso->volset_change_pending) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-load: Image changes pending. -commit or -rollback first");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
ret= Xorriso_reassure(xorriso, "-load", "loads an alternative image", 0);
|
||||||
|
if(ret<=0)
|
||||||
|
return(2);
|
||||||
|
if(strcmp(adr_mode, "auto")==0)
|
||||||
|
xorriso->image_start_mode= 0;
|
||||||
|
else if(strcmp(adr_mode, "session")==0)
|
||||||
|
xorriso->image_start_mode= 1;
|
||||||
|
else if(strcmp(adr_mode, "track")==0)
|
||||||
|
xorriso->image_start_mode= 2;
|
||||||
|
else if(strcmp(adr_mode, "lba")==0 || strcmp(adr_mode, "sbsector")==0)
|
||||||
|
xorriso->image_start_mode= 3;
|
||||||
|
else if(strcmp(adr_mode, "volid")==0)
|
||||||
|
xorriso->image_start_mode= 4;
|
||||||
|
else {
|
||||||
|
sprintf(xorriso->info_text, "-load: unknown address mode '%s'", adr_mode);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
l= strlen(adr_value);
|
||||||
|
if(l==0)
|
||||||
|
xorriso->image_start_mode= 0;
|
||||||
|
|
||||||
|
if(xorriso->image_start_mode>=1 && xorriso->image_start_mode<= 3) {
|
||||||
|
num= Scanf_io_size(adr_value, 0);
|
||||||
|
if(xorriso->image_start_mode==3 &&
|
||||||
|
(adr_value[l-1]<'0' || adr_value[l-1]>'9'))
|
||||||
|
num/= 2048.0;
|
||||||
|
sprintf(xorriso->image_start_value, "%.f", num);
|
||||||
|
} else {
|
||||||
|
if(strlen(adr_value)>80) {
|
||||||
|
sprintf(xorriso->info_text, "-load: address value too long (80 < %d)",
|
||||||
|
(int) strlen(adr_value));
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
strcpy(xorriso->image_start_value, adr_value);
|
||||||
|
}
|
||||||
|
xorriso->image_start_mode|= (1<<30); /* enable non-default msc1 processing */
|
||||||
|
if(strlen(xorriso->indev)>0) {
|
||||||
|
ret= Xorriso_option_rollback(xorriso, 1); /* Load image, no -reassure */
|
||||||
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Option -logfile */
|
||||||
|
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
|
||||||
|
char *fileadr, int flag)
|
||||||
|
{
|
||||||
|
int hflag,channel_no= 0, ret;
|
||||||
|
|
||||||
|
if(channel[0]==0) {
|
||||||
|
logfile_wrong_form:;
|
||||||
|
sprintf(xorriso->info_text,"Wrong form. Correct would be: -logfile \".\"|\"R\"|\"I\"|\"M\" file_address");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
hflag= 2;
|
||||||
|
if(channel[0]=='R')
|
||||||
|
channel_no= 1;
|
||||||
|
else if(channel[0]=='I')
|
||||||
|
channel_no= 2;
|
||||||
|
else if(channel[0]=='M')
|
||||||
|
channel_no= 3;
|
||||||
|
else if(channel[0]=='.')
|
||||||
|
hflag= 4;
|
||||||
|
else
|
||||||
|
goto logfile_wrong_form;
|
||||||
|
if(strcmp(fileadr,"-")==0 || fileadr[0]==0)
|
||||||
|
hflag|= (1<<15);
|
||||||
|
xorriso->logfile[channel_no][0]= 0;
|
||||||
|
ret= Write_to_channel(fileadr,channel_no,hflag);
|
||||||
|
if(ret<=0) {
|
||||||
|
sprintf(xorriso->info_text, "Cannot open logfile: %s", fileadr);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
|
} else if(!(hflag&(1<<15)))
|
||||||
|
if(Sfile_str(xorriso->logfile[channel_no], fileadr, 0)<=0)
|
||||||
|
return(-1);
|
||||||
|
return(ret>0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Options -ls alias -lsi and -lsl alias -lsli
|
/* Options -ls alias -lsi and -lsl alias -lsli
|
||||||
and -lsd alias -lsdi and -lsdl alias -lsdli
|
and -lsd alias -lsdi and -lsdl alias -lsdli
|
||||||
and -du alias -dui and -dus alias -dusi
|
and -du alias -dui and -dus alias -dusi
|
||||||
@ -9516,43 +9639,6 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Option -logfile */
|
|
||||||
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
|
|
||||||
char *fileadr, int flag)
|
|
||||||
{
|
|
||||||
int hflag,channel_no= 0, ret;
|
|
||||||
|
|
||||||
if(channel[0]==0) {
|
|
||||||
logfile_wrong_form:;
|
|
||||||
sprintf(xorriso->info_text,"Wrong form. Correct would be: -logfile \".\"|\"R\"|\"I\"|\"M\" file_address");
|
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
hflag= 2;
|
|
||||||
if(channel[0]=='R')
|
|
||||||
channel_no= 1;
|
|
||||||
else if(channel[0]=='I')
|
|
||||||
channel_no= 2;
|
|
||||||
else if(channel[0]=='M')
|
|
||||||
channel_no= 3;
|
|
||||||
else if(channel[0]=='.')
|
|
||||||
hflag= 4;
|
|
||||||
else
|
|
||||||
goto logfile_wrong_form;
|
|
||||||
if(strcmp(fileadr,"-")==0 || fileadr[0]==0)
|
|
||||||
hflag|= (1<<15);
|
|
||||||
xorriso->logfile[channel_no][0]= 0;
|
|
||||||
ret= Write_to_channel(fileadr,channel_no,hflag);
|
|
||||||
if(ret<=0) {
|
|
||||||
sprintf(xorriso->info_text, "Cannot open logfile: %s", fileadr);
|
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
|
||||||
} else if(!(hflag&(1<<15)))
|
|
||||||
if(Sfile_str(xorriso->logfile[channel_no], fileadr, 0)<=0)
|
|
||||||
return(-1);
|
|
||||||
return(ret>0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Option -mark */
|
/* Option -mark */
|
||||||
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag)
|
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag)
|
||||||
{
|
{
|
||||||
@ -10346,7 +10432,8 @@ ex:;
|
|||||||
|
|
||||||
|
|
||||||
/* Option -rollback */
|
/* Option -rollback */
|
||||||
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
/* @param flag bit0= do not -reassure
|
||||||
|
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||||
*/
|
*/
|
||||||
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag)
|
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag)
|
||||||
{
|
{
|
||||||
@ -10357,19 +10444,19 @@ int Xorriso_option_rollback(struct XorrisO *xorriso, int flag)
|
|||||||
which_will= "revoke the pending image changes";
|
which_will= "revoke the pending image changes";
|
||||||
else
|
else
|
||||||
which_will= "reload the image";
|
which_will= "reload the image";
|
||||||
ret= Xorriso_reassure(xorriso, "-rollback", which_will, 0);
|
if(!(flag&1)) {
|
||||||
if(ret<=0)
|
ret= Xorriso_reassure(xorriso, "-rollback", which_will, 0);
|
||||||
return(2);
|
if(ret<=0)
|
||||||
|
return(2);
|
||||||
|
}
|
||||||
|
|
||||||
if(Sfile_str(indev, xorriso->indev, 0)<=0)
|
if(Sfile_str(indev, xorriso->indev, 0)<=0)
|
||||||
return(-1);
|
return(-1);
|
||||||
ret= Xorriso_give_up_drive(xorriso, 1|8);
|
ret= Xorriso_give_up_drive(xorriso, 1|8);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(ret);
|
return(ret);
|
||||||
|
xorriso->image_start_mode&= ~(1<<31); /* reactivate eventual -load address */
|
||||||
ret= Xorriso_option_dev(xorriso, indev, 1|4);
|
ret= Xorriso_option_dev(xorriso, indev, 1|4);
|
||||||
/*
|
|
||||||
1|((xorriso->out_drive_handle==NULL)<<1));
|
|
||||||
*/
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11029,6 +11116,14 @@ next_command:;
|
|||||||
(*idx)++;
|
(*idx)++;
|
||||||
ret= Xorriso_option_joliet(xorriso, arg1, 0);
|
ret= Xorriso_option_joliet(xorriso, arg1, 0);
|
||||||
|
|
||||||
|
} else if(strcmp(cmd,"load")==0) {
|
||||||
|
(*idx)+= 2;
|
||||||
|
ret= Xorriso_option_load(xorriso, arg1, arg2, 0);
|
||||||
|
|
||||||
|
} else if(strcmp(cmd,"logfile")==0) {
|
||||||
|
(*idx)+= 2;
|
||||||
|
ret= Xorriso_option_logfile(xorriso, arg1, arg2, 0);
|
||||||
|
|
||||||
} else if(strcmp(cmd,"ls")==0 || strcmp(cmd,"lsi")==0 ||
|
} else if(strcmp(cmd,"ls")==0 || strcmp(cmd,"lsi")==0 ||
|
||||||
strcmp(cmd,"lsl")==0 || strcmp(cmd,"lsli")==0) {
|
strcmp(cmd,"lsl")==0 || strcmp(cmd,"lsli")==0) {
|
||||||
ret= Xorriso_option_lsi(xorriso, argc, argv, idx, (cmd[2]=='l'));
|
ret= Xorriso_option_lsi(xorriso, argc, argv, idx, (cmd[2]=='l'));
|
||||||
@ -11043,10 +11138,6 @@ next_command:;
|
|||||||
} else if(strcmp(cmd,"lsx")==0 || strcmp(cmd,"lslx")==0) {
|
} else if(strcmp(cmd,"lsx")==0 || strcmp(cmd,"lslx")==0) {
|
||||||
ret= Xorriso_option_lsx(xorriso, argc, argv, idx, (cmd[2]=='l'));
|
ret= Xorriso_option_lsx(xorriso, argc, argv, idx, (cmd[2]=='l'));
|
||||||
|
|
||||||
} else if(strcmp(cmd,"logfile")==0) {
|
|
||||||
(*idx)+= 2;
|
|
||||||
ret= Xorriso_option_logfile(xorriso, arg1, arg2, 0);
|
|
||||||
|
|
||||||
} else if(strcmp(cmd,"mark")==0) {
|
} else if(strcmp(cmd,"mark")==0) {
|
||||||
(*idx)++;
|
(*idx)++;
|
||||||
ret= Xorriso_option_mark(xorriso, arg1, 0);
|
ret= Xorriso_option_mark(xorriso, arg1, 0);
|
||||||
|
@ -360,6 +360,7 @@ Bug fixes towards xorriso-0.1.2.pl00:
|
|||||||
<LI>Emulated -toc on overwriteable media</LI>
|
<LI>Emulated -toc on overwriteable media</LI>
|
||||||
<LI>New TOC layout with volume id</LI>
|
<LI>New TOC layout with volume id</LI>
|
||||||
<LI>New option -rom_toc_scan for read-only drive problems</LI>
|
<LI>New option -rom_toc_scan for read-only drive problems</LI>
|
||||||
|
<LI>New option -load makes alternative sessions accessible</LI>
|
||||||
<!-- <LI>- none yet -</LI> -->
|
<!-- <LI>- none yet -</LI> -->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.05.12.081331"
|
#define Xorriso_timestamP "2008.05.12.082733"
|
||||||
|
Loading…
Reference in New Issue
Block a user