Improved xorriso-tcltk dialog about overwriting of existing files

This commit is contained in:
Thomas Schmitt 2013-01-03 10:18:30 +00:00
parent 110b27a4ec
commit 8fabbf7a95
3 changed files with 288 additions and 183 deletions

View File

@ -1,8 +1,9 @@
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
xorriso-tcltk xorriso-tcltk
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Copyright (C) 2012, Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org Copyright (C) 2012 - 2013
Provided under GNU GPL version 2 or later. Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org
Provided under BSD license: Use, modify, and distribute as you like.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
xorriso-tcltk is mainly a proof of concept for a frontend that operates xorriso-tcltk is mainly a proof of concept for a frontend that operates

View File

@ -1,8 +1,9 @@
#!/usr/bin/wish #!/usr/bin/wish
# #
# xorriso-tcltk # xorriso-tcltk
# Copyright (C) 2012, Thomas Schmitt <scdbackup@gmx.net>, libburnia project. # Copyright (C) 2012 - 2013
# Provided under GNU GPL version 2 or later. # Thomas Schmitt <scdbackup@gmx.net>, libburnia project.
# Provided under BSD license: Use, modify, and distribute as you like.
# #
# This is mainly a proof of concept for xorriso serving under a frontend. # This is mainly a proof of concept for xorriso serving under a frontend.
# It exercises several fundamental gestures of communication: # It exercises several fundamental gestures of communication:
@ -17,8 +18,14 @@
# Further it has to perform integer arithmetics and string manipulations. # Further it has to perform integer arithmetics and string manipulations.
# And, well, a graphical widget set would be nice. # And, well, a graphical widget set would be nice.
set own_version "1.2.5" set own_version "1.2.5"
# Minimum version of xorriso to be used as backend provess.
# Older versions of xorriso do not offer commands -msg_op and -launch_frontend
set min_xorriso_version "1.2.5"
proc print_usage {argv0} { proc print_usage {argv0} {
puts stderr "Usage:" puts stderr "Usage:"
puts stderr " $argv0 \[options\]" puts stderr " $argv0 \[options\]"
@ -698,10 +705,9 @@ proc isofs_filetype {path} {
# enough. This is done before sending xorriso the setup commands. # enough. This is done before sending xorriso the setup commands.
# #
proc check_xorriso_version {} { proc check_xorriso_version {} {
global sieve_ret result_list pre_msglist xorriso_version global sieve_ret result_list pre_msglist xorriso_version min_xorriso_version
global reply_conn global reply_conn
set min_version "1.2.5"
set version "0.0.0 (= unknown)" set version "0.0.0 (= unknown)"
set disp_en_mem [set_display_msg 0] set disp_en_mem [set_display_msg 0]
@ -719,11 +725,11 @@ proc check_xorriso_version {} {
set xorriso_version [wait_for_msg "xorriso version : " "R"] set xorriso_version [wait_for_msg "xorriso version : " "R"]
if {"$xorriso_version" < "$min_version"} { if {"$xorriso_version" < "$min_xorriso_version"} {
puts stderr "xorriso-tcltk: xorriso-$xorriso_version is too old." puts stderr "xorriso-tcltk: xorriso-$xorriso_version is too old."
puts stderr "xorriso-tcltk: Need at least version $min_version" puts stderr "xorriso-tcltk: Need at least version $min_xorriso_version"
window_ack \ window_ack \
"xorriso-$xorriso_version is too old. Need at least version $min_version" \ "xorriso-$xorriso_version is too old. Need at least version $min_xorriso_version" \
"red" "embedded" "red" "embedded"
central_exit 2 central_exit 2
} }
@ -1007,6 +1013,9 @@ set burn_write_defect_mgt 0
# Answer of yes/no window # Answer of yes/no window
set answer_of_yesno "" set answer_of_yesno ""
# Semi-persistent answers of yes/no window
set yesno_to_all 0
# The hard disk filesystem address to be mapped into isodir_adr # The hard disk filesystem address to be mapped into isodir_adr
set insert_from_adr "" set insert_from_adr ""
@ -1026,7 +1035,7 @@ set extract_to_adr ""
set extract_underneath 1 set extract_underneath 1
# Whether to insert at or under the selected .isolist item # Whether to insert at or under the selected .isolist item
set extract_from_selected 0 set extract_from_selected 1
# Whether to temporarily enforce rwx permissions for target directories on disk # Whether to temporarily enforce rwx permissions for target directories on disk
set extract_auto_chmod 0 set extract_auto_chmod 0
@ -1298,7 +1307,7 @@ proc scan_for_drives {} {
# Refresh the display after some xorriso may have changed the status # Refresh the display after some xorriso may have changed the status
# Called by the "Refresh state" display button and others. # Called by the "Refresh disp" button and others.
# #
proc refresh_state {} { proc refresh_state {} {
refresh_indev refresh_indev
@ -1526,7 +1535,7 @@ proc isodir_up {} {
# Rename resp. move the files which are selected in the .isolist box. # Rename resp. move the files which are selected in the .isolist box.
# The target is defined by the .isomanip_move_target text field. # The target is defined by the .isomanip_move_target text field.
# Called when the "Rename to:" button is hit. # Called when the "Move to:" button is hit.
# #
proc isomanip_mv {} { proc isomanip_mv {} {
global .isolist global .isolist
@ -1569,25 +1578,29 @@ proc isomanip_mv {} {
enforce_overwrite_settings "isofs" enforce_overwrite_settings "isofs"
reset_highest_cmd_sev reset_highest_cmd_sev
reset_yesno_to_all
set multi_source 0
if {[llength $selected] != 1} {set multi_source 1}
foreach i "$selected" { foreach i "$selected" {
set name [lindex "$isolist_names" "$i"] set name [lindex "$isolist_names" "$i"]
if {"$isodir_is_pwd" == 0} { if {"$isodir_is_pwd" == 0} {
set name [combine_dir_and_name "$isodir_adr" "$name"] set name [combine_dir_and_name "$isodir_adr" "$name"]
} }
set name_ftype [isofs_filetype $name]
# Ask for confirmation if overwriting is about to happen # Ask for confirmation if overwriting is about to happen
if {"$target_ftype" == "d"} { if {"$target_ftype" == "d"} {
set eff_target [combine_dir_and_name "$target" "$name"] set eff_target [combine_dir_and_name "$target" "$name"]
set eff_target_ftype [get_iso_filetype "$eff_target"] set eff_target_ftype [get_iso_filetype "$eff_target"]
if {[handle_iso_overwriting \
"$eff_target" "$eff_target_ftype" 0 "" ""] == "0"} {
return ""
}
} else { } else {
if {[handle_iso_overwriting \ set eff_target $target
"$target" "$target_ftype" 0 "" ""] == "0"} { set eff_target_ftype $target_ftype
return "" }
} if {[handle_overwriting "isofs" $eff_target $eff_target_ftype \
"isofs" $name $name_ftype $multi_source \
"" ""] == "0"} {
if {$multi_source == 0} { return "" }
continue
} }
send_marked_cmd "-mv [make_text_shellsafe "$name"] [make_text_shellsafe "$target"] --" send_marked_cmd "-mv [make_text_shellsafe "$name"] [make_text_shellsafe "$target"] --"
} }
@ -1602,7 +1615,7 @@ proc isomanip_mv {} {
# Create an empty ISO directory with address given by variable # Create an empty ISO directory with address given by variable
# isomanip_move_target. # isomanip_move_target.
# Called when the "Make directory" button is hit or by other functions. # Called when the "Make dir" button is hit or by other functions.
# #
proc isomanip_mkdir {} { proc isomanip_mkdir {} {
global isomanip_move_target isodir_adr isodir_return_name global isomanip_move_target isodir_adr isodir_return_name
@ -1797,7 +1810,7 @@ proc isodir_verify {} {
# Verify the MD5 checksums of the data files orch are selected or which # Verify the MD5 checksums of the data files orch are selected or which
# sit in the trees underneath the selected items in the isolist box. # sit in the trees underneath the selected items in the isolist box.
# Called when the "Verify" in the "ISO selection:" line is hit. # Called when the "Verify" in the "Selection:" line is hit.
# #
proc isomanip_verify {} { proc isomanip_verify {} {
global .isolist global .isolist
@ -1906,13 +1919,13 @@ proc iso_rollback {} {
# Inquire an accurate prediction of free space after writing a session with # Inquire an accurate prediction of free space after writing a session with
# the pending changes of the ISO image. # the pending changes of the ISO image.
# Called when button "Refresh avail:" is hit. # Called when button "Avail:" is hit.
# #
proc refresh_avail {} { proc refresh_avail {} {
global result_list highest_cmd_sev global result_list highest_cmd_sev
global sieve_ret global sieve_ret
if {[assert_outdev "refreshing available space count"] <= 0} {return ""} if {[assert_outdev "refreshing available space prediction"] <= 0} {return ""}
set line "n.a." set line "n.a."
reset_highest_cmd_sev reset_highest_cmd_sev
@ -1932,12 +1945,35 @@ proc refresh_avail {} {
# Warn and prompt the user for confirmation if there is the risk to overwrite # Warn and prompt the user for confirmation if there is the risk to overwrite
# existing files in the ISO image model. # existing files on hard disk or in the ISO image model.
# Called from several procedures which change the ISO tree. # Called from several procedures which cause side effects on directory trees.
# #
proc handle_iso_overwriting {target target_ftype from_is_dir proc handle_overwriting {target_fs target target_ftype
selected_adr selected_ftype} { source_fs source source_ftype multi_source
global overwrite_iso_dirs selected_adr selected_ftype} {
global overwrite_iso_files overwrite_iso_dirs overwrite_disk_files
if {"$target_fs" == "localfs"} {
set to_fs "hard disk"
set overwrite_fs "disk"
set overwrite_dirs 0
set overwrite_files "$overwrite_disk_files"
} else {
set to_fs "ISO"
set overwrite_fs "ISO"
set overwrite_dirs $overwrite_iso_dirs
set overwrite_files "$overwrite_iso_files"
}
if {$source_fs == "localfs"} {
set from_fs "hard disk"
} else {
set from_fs "ISO"
}
if {$multi_source == 1} {
set what_window window_yesno_ever
} else {
set what_window window_yesno
}
# >>> Nicer would be: # >>> Nicer would be:
# >>> Check if any file will get overwritten. Not only the direct target. # >>> Check if any file will get overwritten. Not only the direct target.
@ -1945,30 +1981,42 @@ proc handle_iso_overwriting {target target_ftype from_is_dir
if {"$target_ftype" != ""} { if {"$target_ftype" != ""} {
if {"$target_ftype" == "d"} { if {"$target_ftype" == "d"} {
if {"$from_is_dir" == 1} { if {"$source_ftype" == "d"} {
if {[window_yesno \ if {[$what_window \
"'$target'\n\nReally merge with existing ISO directory ?"] \ "Really merge existing $to_fs directory\n\n[make_text_shellsafe $target]\n\nwith $from_fs directory\n[make_text_shellsafe $source]\n?"] \
!= 1} { return "0" } != 1} { return "0" }
} else { } else {
if {"$overwrite_iso_dirs" == 1} { if {"$target_fs" != "isofs"} {
if {[window_yesno \ xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : Will not replace directories on hard disk by file of other type"
"'$target'\n\nReally overwrite existing ISO directory ?"] \ return "0"
}
if {"$overwrite_dirs" == 1} {
if {[$what_window \
"Really overwrite $to_fs directory\n\n[make_text_shellsafe $target]\n\nby $from_fs file\n[make_text_shellsafe $source]\n?"] \
!= 1} { return "0" } != 1} { return "0" }
} else { } else {
xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : You would have to enable \"Overwriting of ISO directories\"" xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : You would have to enable \"Overwrite $overwrite_fs dirs\""
return "0" return "0"
} }
} }
} else { } else {
if {[window_yesno "'$target'\n\nReally overwrite existing ISO file ?"] \ if {"$overwrite_files" == 1} {
!= 1} { return "0" } if {[$what_window \
"Really overwrite $to_fs file\n\n[make_text_shellsafe $target]\n\nby $from_fs file\n[make_text_shellsafe $source]\n?"] != 1} {
return "0"
}
} else {
xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : You would have to enable \"Overwrite $overwrite_fs files\""
return "0"
}
} }
} }
if {"$selected_adr" != "$target" && "$selected_adr" != "" && \ if {"$selected_adr" != "$target" && "$selected_adr" != "" && \
"$selected_ftype" != "d" && "$selected_ftype" != ""} { "$selected_ftype" != "d" && "$selected_ftype" != ""} {
if {[window_yesno \ if {[$what_window \
"'$selected_adr'\n\nReally replace existing ISO file by a directory ?"] \ "Really replace existing $to_fs file\n\n[make_text_shellsafe $target]\n\nby $from_fs directory\n[make_text_shellsafe $source]\n?"] != 1} {
!= 1} { return "0" } return "0"
}
} }
return "1" return "1"
} }
@ -2002,15 +2050,17 @@ proc insert_from {} {
} else { } else {
set target "$isodir_adr" set target "$isodir_adr"
} }
set from_is_dir [localfs_isdir "$insert_from_adr"] set source_ftype [localfs_filetype "$insert_from_adr"]
set name [file tail "$insert_from_adr"] set name [file tail "$insert_from_adr"]
if {"$insert_underneath" == 1 || "$from_is_dir" == 0} { if {"$insert_underneath" == 1 || $source_ftype == "d"} {
set target [combine_dir_and_name "$target" "$name"] set target [combine_dir_and_name "$target" "$name"]
} }
set target_ftype [get_iso_filetype "$target"] set target_ftype [get_iso_filetype "$target"]
if {[handle_iso_overwriting "$target" "$target_ftype" "$from_is_dir" \ reset_yesno_to_all
"$selected_adr" "$selected_ftype"] == "0"} { if {[handle_overwriting "isofs" "$target" "$target_ftype" \
"localfs" $insert_from_adr $source_ftype 0 \
"$selected_adr" "$selected_ftype"] == "0"} {
return "" return ""
} }
@ -2069,41 +2119,8 @@ proc extract_to {} {
set sources [list "$isodir_adr"] set sources [list "$isodir_adr"]
} }
# Warn of directory mergers. They can cause mess-up on hard disk.
set merge_counter 0
set merge_source ""
set merge_target ""
foreach i "$sources" {
if {[isofs_filetype "$i"] != "d"} {
continue
}
if {"$extract_underneath" == 1} {
set name [file tail "$i"]
set target [combine_dir_and_name "$extract_to_adr" "$name"]
} else {
set target "$extract_to_adr"
}
if {[localfs_isdir "$target"] == 1} {
incr merge_counter
set merge_source "$i"
set merge_target "$target"
}
}
if {"$merge_counter" > 0} {
if {"$sources" == "/" || "$sources" == "{}"} {
if {[window_yesno "Really unpack ISO root directory into hard disk directory\n$merge_target\n?"] \
!= 1} { return "" }
} else {
set and_others ""
if {"$merge_counter" > 1} {
set and_others "and do so at $merge_counter more occasions"
}
if {[window_yesno "Really unpack ISO directory\n [lindex "$sources" 0]\n into hard disk directory\n $merge_target\n$and_others ?"] \
!= 1} { return "" }
}
}
reset_highest_cmd_sev reset_highest_cmd_sev
reset_yesno_to_all
enforce_overwrite_settings "localfs" enforce_overwrite_settings "localfs"
set disp_en_mem [set_display_msg 0] set disp_en_mem [set_display_msg 0]
if {"$extract_auto_chmod" == 1} { if {"$extract_auto_chmod" == 1} {
@ -2111,22 +2128,33 @@ proc extract_to {} {
} else { } else {
send_marked_cmd "-osirrox on:sort_lba_off:auto_chmod_off" send_marked_cmd "-osirrox on:sort_lba_off:auto_chmod_off"
} }
set_display_msg "$disp_en_mem" set_display_msg $disp_en_mem
foreach i "$sources" { set multi_source 0
if {"$extract_underneath" == 1} { if {[llength $sources] != 1} {set multi_source 1}
set name [file tail "$i"] foreach i $sources {
set target [combine_dir_and_name "$extract_to_adr" "$name"] if {$extract_underneath == 1} {
set name [file tail $i]
set target [combine_dir_and_name $extract_to_adr $name]
} else { } else {
if {[llength "$sources"] != 1} { if {[llength $sources] != 1} {
xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : You must select exactly one ISO file as extraction source" xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : You must select exactly one ISO file as extraction source"
return "" return ""
} }
set target "$extract_to_adr" set target $extract_to_adr
} }
if {"$i" == ""} { if {$i == ""} {
set i "/" set i "/"
} }
send_marked_cmd "-extract [make_text_shellsafe "$i"] [make_text_shellsafe "$target"]" set target_ftype [localfs_filetype $target]
set from_is_dir 0
set source_ftype [isofs_filetype $i]
if {[handle_overwriting "localfs" $target $target_ftype \
"isofs" $i $source_ftype $multi_source \
"" ""] == 0} {
continue
}
send_marked_cmd \
"-extract [make_text_shellsafe $i] [make_text_shellsafe $target]"
} }
browse_tree_populate "localfs" browse_tree_populate "localfs"
} }
@ -2443,7 +2471,7 @@ proc destroy_browse_disk {w} {
# the hard disk filesystem. # the hard disk filesystem.
# #
proc browse_disk_open_dir {tr name} { proc browse_disk_open_dir {tr name} {
if {[localfs_isdir "$name"] != 1} {return ""} if {[localfs_filetype "$name"] != "d"} {return ""}
set lslist [localfs_ls "$name"] set lslist [localfs_ls "$name"]
browse_tree_fill_dir $tr "$name" "$lslist" browse_tree_fill_dir $tr "$name" "$lslist"
} }
@ -2684,13 +2712,22 @@ proc restore_isolist_selection {} {
# #
proc destroy_yesno {w answer} { proc destroy_yesno {w answer} {
global yesno_window_is_active answer_of_yesno yesno_window_geometry global yesno_window_is_active answer_of_yesno yesno_window_geometry
global yesno_to_all
if {"$w" != ""} { if {$w != ""} {
set yesno_window_geometry [wm geometry $w] set yesno_window_geometry [wm geometry $w]
destroy "$w" destroy $w
} }
set yesno_window_is_active 0 set yesno_window_is_active 0
set answer_of_yesno "$answer" set answer_of_yesno $answer
if {$answer == 2} {
set yesno_to_all 1
set answer_of_yesno 1
}
if {$answer == -1} {
set yesno_to_all -1
set answer_of_yesno 0
}
} }
@ -2712,10 +2749,10 @@ proc window_yesno {question} {
set_window_position $w "$yesno_window_geometry" set_window_position $w "$yesno_window_geometry"
label $w.question -text "$question" label $w.question -text "$question"
button $w.yes -text "yes" -command "destroy_yesno $w 1" \ button $w.yes -text "yes" -command "destroy_yesno $w 1" \
-borderwidth 10 -padx 20 -pady 20 -relief ridge -borderwidth 4 -padx 20 -pady 20
button $w.no -text "no" -command "destroy_yesno $w 0" \ button $w.no -text "no" -command "destroy_yesno $w 0" \
-borderwidth 10 -padx 20 -pady 20 -relief ridge -borderwidth 4 -padx 20 -pady 20
pack $w.yes $w.question $w.no -side left -expand 1 -fill both pack $w.yes $w.question $w.no -side left
update idletasks update idletasks
tkwait variable answer_of_yesno tkwait variable answer_of_yesno
@ -2723,6 +2760,60 @@ proc window_yesno {question} {
} }
# Pop-up a window which asks for yes, yes-to-all, no, or no-to-all.
# Return 1 if answer is yes.
#
proc window_yesno_ever {question} {
global answer_of_yesno yesno_window_is_active yesno_window_geometry
global yesno_to_all
set w {.yesno_window}
if {"$yesno_window_is_active" == 1} {
raise $w
xorriso_tcltk_errmsg "xorriso-tcltk : SORRY : You still need to answer an older yes/no question"
return "0"
}
if {$yesno_to_all == 1} {
return "1"
}
if {$yesno_to_all == -1} {
return "0"
}
set yesno_window_is_active 1
set answer_of_yesno ""
toplevel $w -borderwidth 20 -class Dialog
wm title $w "xorriso-tcltk yes/no"
set_window_position $w "$yesno_window_geometry"
frame $w.yes_frame
frame $w.no_frame
label $w.question -text "$question"
button $w.yes -text "yes" -command "destroy_yesno $w 1" \
-borderwidth 4 -padx 20 -pady 20 -relief raised
button $w.no -text "no" -command "destroy_yesno $w 0" \
-borderwidth 4 -padx 20 -pady 20 -relief raised
button $w.yes_to_all -text "yes to all" -command "destroy_yesno $w 2"
bind_help $w.yes_to_all "yes to all"
button $w.no_to_all -text "no to all" -command "destroy_yesno $w -1"
bind_help $w.no_to_all "no to all"
pack $w.yes $w.yes_to_all -in $w.yes_frame -side top -expand 1 -fill both
pack $w.no $w.no_to_all -in $w.no_frame -side top -expand 1 -fill both
pack $w.yes_frame $w.question $w.no_frame \
-in $w -side left -expand 1 -fill both
update idletasks
tkwait variable answer_of_yesno
return "$answer_of_yesno"
}
proc reset_yesno_to_all {} {
global yesno_to_all
set yesno_to_all 0
}
# Destroy the notification pop-up window. # Destroy the notification pop-up window.
# #
proc destroy_ack {w} { proc destroy_ack {w} {
@ -3054,7 +3145,7 @@ proc init_gui {} {
# The xorriso headline with End button, xorriso version, busy/ready indicator, # The xorriso headline with End button, xorriso version, busy/ready indicator,
# command line, and "Refresh state display" button. # command line, and "Refresh disp" button.
# #
proc init_input {} { proc init_input {} {
global borderwidth busy_text_exists xorriso_version logging global borderwidth busy_text_exists xorriso_version logging
@ -3080,9 +3171,9 @@ proc init_input {} {
set busy_text_exists 1 set busy_text_exists 1
pack .busy_text -in .busy pack .busy_text -in .busy
button .refresh_state -text "Refresh state display" \ button .refresh_state -text "Refresh disp" \
-command "refresh_state" -command "refresh_state"
bind_help .refresh_state "Refresh state display" bind_help .refresh_state "Refresh disp"
checkbutton .log_pipes_switch -text "Log pipes" \ checkbutton .log_pipes_switch -text "Log pipes" \
-indicatoron 1 -selectcolor "" \ -indicatoron 1 -selectcolor "" \
@ -3113,7 +3204,7 @@ proc init_cmdline {} {
label .cmdline_text -width 10 -text "Command:" label .cmdline_text -width 10 -text "Command:"
bind_help .cmdline_text "Command:" bind_help .cmdline_text "Command:"
entry .cmdline_entry -width 60 -relief sunken -bd 1 \ entry .cmdline_entry -width 56 -relief sunken -bd 1 \
-textvariable cmdline -textvariable cmdline
bind_entry_keys .cmdline_entry {cmdline_return} bind_entry_keys .cmdline_entry {cmdline_return}
bind_help .cmdline_entry "Command:" bind_help .cmdline_entry "Command:"
@ -3275,9 +3366,9 @@ proc init_drivebox {} {
-in .drive_picker_line_2 -side left -expand 1 -fill x -in .drive_picker_line_2 -side left -expand 1 -fill x
pack .drive_picker_line_1 .drive_picker_line_2 \ pack .drive_picker_line_1 .drive_picker_line_2 \
-in .drive_picker -side top -expand 1 -fill x -anchor w -in .drive_picker -side top -expand 1 -fill x -anchor w
pack .drive_scan .drive_drop_both \ pack .drive_scan .drive_calm \
-in .drive_aux_buttons_line_1 -side left -expand 1 -fill none -in .drive_aux_buttons_line_1 -side left -expand 1 -fill none
pack .drive_calm .iso_rollback_button \ pack .drive_drop_both .iso_rollback_button \
-in .drive_aux_buttons_line_2 -side left -expand 1 -fill x -in .drive_aux_buttons_line_2 -side left -expand 1 -fill x
pack .drive_aux_buttons_line_1 .drive_aux_buttons_line_2 \ pack .drive_aux_buttons_line_1 .drive_aux_buttons_line_2 \
-in .drive_aux_buttons -side top -expand 1 -fill x -anchor w -in .drive_aux_buttons -side top -expand 1 -fill x -anchor w
@ -3318,14 +3409,14 @@ proc init_indev {} {
button .indev_eject -text "Eject" -command {eject_indev} button .indev_eject -text "Eject" -command {eject_indev}
bind_help .indev_eject "Eject (indev)" bind_help .indev_eject "Eject (indev)"
label .indev_label -width 22 -text "Input drive or image " label .indev_label -width 16 -text "Input drive/image "
bind_help .indev_label "Input drive or image" bind_help .indev_label "Input drive/image"
entry .indev_entry -width 40 -relief sunken -bd 1 \ entry .indev_entry -width 36 -relief sunken -bd 1 \
-textvariable indev_adr -textvariable indev_adr
bind_entry_keys .indev_entry {indev_return} bind_entry_keys .indev_entry {indev_return}
bind_help .indev_entry "Input drive or image" bind_help .indev_entry "Input drive/image"
label .indev_summary -width 65 -text "" -relief ridge -borderwidth 2 label .indev_summary -width 60 -text "" -relief ridge -borderwidth 2
bind_help .indev_summary "input drive info" bind_help .indev_summary "input drive info"
create_browser_button .indev_browse_button \ create_browser_button .indev_browse_button \
"indev_adr" "localfs" "Browse disk (indev)" "indev_adr" "localfs" "Browse disk (indev)"
@ -3348,15 +3439,15 @@ proc init_outdev {} {
button .outdev_eject -text "Eject" -command {eject_outdev} button .outdev_eject -text "Eject" -command {eject_outdev}
bind_help .outdev_eject "Eject (outdev)" bind_help .outdev_eject "Eject (outdev)"
label .outdev_label -width 22 -text "Output drive or image" label .outdev_label -width 16 -text "Output drive/image"
bind_help .outdev_label "Output drive or image" bind_help .outdev_label "Output drive/image"
entry .outdev_entry -width 40 -relief sunken -bd 1 \ entry .outdev_entry -width 36 -relief sunken -bd 1 \
-textvariable outdev_adr -textvariable outdev_adr
bind_entry_keys .outdev_entry {outdev_return} bind_entry_keys .outdev_entry {outdev_return}
bind_help .outdev_entry "Output drive or image" bind_help .outdev_entry "Output drive/image"
create_browser_button .outdev_browse_button \ create_browser_button .outdev_browse_button \
"outdev_adr" "localfs" "Browse disk (outdev)" "outdev_adr" "localfs" "Browse disk (outdev)"
label .outdev_summary -width 65 -text "" -relief ridge -borderwidth 2 label .outdev_summary -width 60 -text "" -relief ridge -borderwidth 2
bind_help .outdev_summary "output drive info" bind_help .outdev_summary "output drive info"
pack .outdev_eject .outdev_label .outdev_entry \ pack .outdev_eject .outdev_label .outdev_entry \
-in .outdev -side left -expand 1 -fill both -in .outdev -side left -expand 1 -fill both
@ -3486,22 +3577,22 @@ proc init_isomanip {} {
frame .isomanip -borderwidth $borderwidth frame .isomanip -borderwidth $borderwidth
frame .isomanip_move -borderwidth 0 frame .isomanip_move -borderwidth 0
label .isomanip_prefix -text "ISO selection:" label .isomanip_prefix -text "Selection:"
bind_help .isomanip_prefix "ISO selection:" bind_help .isomanip_prefix "Selection:"
button .isomanip_verify_button -width 8 -text "Verify" \ button .isomanip_verify_button -text "Verify" \
-command {isomanip_verify} -command {isomanip_verify}
bind_help .isomanip_verify_button "Verify (selection)" bind_help .isomanip_verify_button "Verify (selection)"
button .isomanip_rm_r_button -width 8 -text "Delete" \ button .isomanip_rm_r_button -text "Delete" \
-command {isomanip_rm_r} -command {isomanip_rm_r}
bind_help .isomanip_rm_r_button "Delete" bind_help .isomanip_rm_r_button "Delete"
button .isomanip_move_button -text "Rename to:" \ button .isomanip_move_button -text "Move to:" \
-command {isomanip_mv} -command {isomanip_mv}
bind_help .isomanip_move_button "Rename to:" bind_help .isomanip_move_button "Move to:"
button .isomanip_mkdir_button -width 8 -text "Make dir" \ button .isomanip_mkdir_button -text "Make dir" \
-command {isomanip_mkdir} -command {isomanip_mkdir}
bind_help .isomanip_mkdir_button "Make dir" bind_help .isomanip_mkdir_button "Make dir"
entry .isomanip_move_target -width 60 -relief sunken -bd 1 \ entry .isomanip_move_target -width 58 -relief sunken -bd 1 \
-textvariable isomanip_move_target -textvariable isomanip_move_target
# bind_entry_keys .isomanip_move_target {isomanip_mv} # bind_entry_keys .isomanip_move_target {isomanip_mv}
bind_entry_keys .isomanip_move_target "" bind_entry_keys .isomanip_move_target ""
@ -3509,12 +3600,12 @@ proc init_isomanip {} {
create_browser_button .isomanip_move_target_button \ create_browser_button .isomanip_move_target_button \
"isomanip_move_target" "isofs" "Browse ISO (move target)" "isomanip_move_target" "isofs" "Browse ISO (move target)"
button .avail_button -text "Refresh avail:" \ button .avail_button -text "Avail:" \
-command {refresh_avail} -command {refresh_avail}
bind_help .avail_button "Refresh avail:" bind_help .avail_button "Avail:"
frame .avail_label_frame -relief ridge -borderwidth 2 frame .avail_label_frame -relief ridge -borderwidth 2
label .avail_label -width 10 -text "" label .avail_label -width 10 -text ""
bind_help .avail_label "Refresh avail:" bind_help .avail_label "Avail:"
pack .avail_label -in .avail_label_frame pack .avail_label -in .avail_label_frame
pack .isomanip_prefix .isomanip_verify_button .isomanip_rm_r_button \ pack .isomanip_prefix .isomanip_verify_button .isomanip_rm_r_button \
@ -3839,7 +3930,7 @@ The GUI window is separated into three main areas:
- Click the \"Scan for drives\" button in the middle area. - Click the \"Scan for drives\" button in the middle area.
- Select a drive and click the \"Pick output drive\" button. - Select a drive and click the \"Pick output drive\" button.
- If the information field in the \"Output drive or image\" line begins by - If the information field in the \"Output drive/image\" line begins by
\"appendable\" or \"closed\" and if the medium is CD-RW, DVD-RW, DVD+RW, or \"appendable\" or \"closed\" and if the medium is CD-RW, DVD-RW, DVD+RW, or
BD-RE then click the \"Blank\" button to erase the old data. BD-RE then click the \"Blank\" button to erase the old data.
(Blanking of \"DVD-RW sequential recording\" will last very long.) (Blanking of \"DVD-RW sequential recording\" will last very long.)
@ -3860,14 +3951,14 @@ The GUI window is separated into three main areas:
Write a directory as only content to an ISO image data file on hard disk Write a directory as only content to an ISO image data file on hard disk
- Go to the text field beneath \"Output drive or image\" and toggle - Go to the text field beneath \"Output drive/image\" and toggle
the address of the image file. Or click on the \"/\" button to the right the address of the image file. Or click on the \"/\" button to the right
of the field to get a file browser. of the field to get a file browser.
- You may click on a name in the browser and bring it into the text field - You may click on a name in the browser and bring it into the text field
by button \"Edit\". by button \"Edit\".
- When the intended file address is composed, hit the Return key in the - When the intended file address is composed, hit the Return key in the
text field. text field.
- If the information field in the \"Output drive or image\" line begins by - If the information field in the \"Output drive/image\" line begins by
\"appendable\" or \"closed\" then you addressed an existing data file. \"appendable\" or \"closed\" then you addressed an existing data file.
Warning: Applying the \"Blank\" button to it would damage its content ! Warning: Applying the \"Blank\" button to it would damage its content !
You probably do not want this in this special use case. You probably do not want this in this special use case.
@ -3880,7 +3971,7 @@ The GUI window is separated into three main areas:
- Click the \"Scan for drives\" button in the middle area. - Click the \"Scan for drives\" button in the middle area.
- Select a drive and click the \"Pick output drive\" button. - Select a drive and click the \"Pick output drive\" button.
- If the information field in the \"Output drive or image\" line begins by - If the information field in the \"Output drive/image\" line begins by
\"appendable\" or \"closed\" and if the medium is CD-RW, DVD-RW, DVD+RW, or \"appendable\" or \"closed\" and if the medium is CD-RW, DVD-RW, DVD+RW, or
BD-RE then click the \"Blank\" button to erase the old data. BD-RE then click the \"Blank\" button to erase the old data.
(Blanking of \"DVD-RW sequential recording\" will last very long.) (Blanking of \"DVD-RW sequential recording\" will last very long.)
@ -3900,12 +3991,12 @@ The GUI window is separated into three main areas:
- Like above, \"Scan for drives\" but click button \"Pick drive for both roles\" - Like above, \"Scan for drives\" but click button \"Pick drive for both roles\"
in order to load the directory tree of the existing ISO filesystem. in order to load the directory tree of the existing ISO filesystem.
For an ISO image data file, bring its name into the input fields of both For an ISO image data file, bring its name into the input fields of both
lines \"Input drive or image\" and \"Output drive or image\". lines \"Input drive/image\" and \"Output drive/image\".
You should now see in both info fields texts which begin by \"appendable\". You should now see in both info fields texts which begin by \"appendable\".
- Go to the \"Insert from disk:\" line in the lower area. - Go to the \"Insert from disk:\" line in the lower area.
Use the means described in the first use case to add more directories or Use the means described in the first use case to add more directories or
data files. data files.
- If you are interested in \"Delete\" or \"Rename to:\" buttons in the - If you are interested in \"Delete\" or \"Move to:\" buttons in the
bottom line of the GUI: Click them by the rightmost mouse button to see bottom line of the GUI: Click them by the rightmost mouse button to see
their help texts. their help texts.
- When all intended changes are done: Click \"Write ISO session\" and - When all intended changes are done: Click \"Write ISO session\" and
@ -3918,7 +4009,7 @@ The GUI window is separated into three main areas:
- Like above, \"Scan for drives\" but click button \"Pick input drive\" - Like above, \"Scan for drives\" but click button \"Pick input drive\"
in order to load the directory tree of the existing ISO filesystem. in order to load the directory tree of the existing ISO filesystem.
For an ISO image data file, bring its name into the input field of the For an ISO image data file, bring its name into the input field of the
lines \"Input drive or image\" and \"Output drive or image\". lines \"Input drive/image\" and \"Output drive/image\".
You should now see in both info fields texts which begin by \"appendable\". You should now see in both info fields texts which begin by \"appendable\".
- Go to the \"ISO directory:\" line in the lower area. - Go to the \"ISO directory:\" line in the lower area.
Either toggle in the address of the directory you want to extract or Either toggle in the address of the directory you want to extract or
@ -3947,8 +4038,9 @@ filesystems on optical media (CD, DVD, BD) or in disk files.
Dependencies: Dependencies:
xorriso, Tcl language, Tk GUI toolkit, optionally Tcl/Tk package BWidget xorriso, Tcl language, Tk GUI toolkit, optionally Tcl/Tk package BWidget
Copyright (C) 2012, Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org Copyright (C) 2012 - 2013
Provided under GNU GPL version 2 or later." Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org
Provided under BSD license: Use, modify, and distribute as you like."
} }
if {"$what" == "End"} { if {"$what" == "End"} {
return \ return \
@ -3981,9 +4073,9 @@ do i/o via standard input and standard output or via named pipes.
Further it has to perform integer arithmetics and string manipulations. Further it has to perform integer arithmetics and string manipulations.
And, well, a graphical widget set would be nice." And, well, a graphical widget set would be nice."
} }
if {"$what" == "Refresh state display"} { if {"$what" == "Refresh disp"} {
return \ return \
"The \"Refresh state display\" button causes several text fields and list "The \"Refresh disp\" button causes several text fields and list
boxes to update their display after manually transmitted commands may boxes to update their display after manually transmitted commands may
have changed the state of drives or ISO model." have changed the state of drives or ISO model."
} }
@ -3996,12 +4088,6 @@ and the frontend is still waiting for its reply messages."
return \ return \
"The \"Command:\" field can be used to send commands to xorriso. "The \"Command:\" field can be used to send commands to xorriso.
See the manual page of xorriso for its concepts and commands." See the manual page of xorriso for its concepts and commands."
}
if {"$what" == "Refresh state display"} {
return \
"The \"Refresh state display\" button causes the other two main areas to update
their display after manually transmitted commands may have changed the state
of drives or ISO model."
} }
if {"$what" == "Log pipes"} { if {"$what" == "Log pipes"} {
return \ return \
@ -4060,7 +4146,7 @@ granting for a permanent solution.)"
return \ return \
"The \"Pick input drive\" button executes command -indev and obtains some "The \"Pick input drive\" button executes command -indev and obtains some
information about the medium status. This info is displayed in the information about the medium status. This info is displayed in the
\"Input drive or image\" line. \"Input drive/image\" line.
Further it causes the display of the ISO image model to be updated. Further it causes the display of the ISO image model to be updated.
The medium in the input drive must be blank or contain a valid ISO 9660 The medium in the input drive must be blank or contain a valid ISO 9660
@ -4070,13 +4156,13 @@ model of xorriso. If there is a valid ISO filesystem in the input drive
then its directory tree gets loaded underneath that model root directory. then its directory tree gets loaded underneath that model root directory.
The input drive may also be a data file on hard disk if that file contains The input drive may also be a data file on hard disk if that file contains
an ISO 9660 filesystem image. See field \"Input drive or image\"." an ISO 9660 filesystem image. See field \"Input drive/image\"."
} }
if {"$what" == "Pick output drive"} { if {"$what" == "Pick output drive"} {
return \ return \
"The \"Pick output drive\" button executes command -outdev and obtains some "The \"Pick output drive\" button executes command -outdev and obtains some
information about the medium status. This info is displayed in the information about the medium status. This info is displayed in the
\"Output drive or image\" line. \"Output drive/image\" line.
The output drive may be empty or loaded with a medium, that may be blank, The output drive may be empty or loaded with a medium, that may be blank,
appendable or closed. appendable or closed.
@ -4085,7 +4171,7 @@ blank or appendable. Button \"Blank\" can bring appendable or closed media
into blank state. into blank state.
The output drive may also be a data file on hard disk. See field The output drive may also be a data file on hard disk. See field
\"Output drive or image\"." \"Output drive/image\"."
It is considered appendable if it contains an ISO 9660 filesystem image. It is considered appendable if it contains an ISO 9660 filesystem image.
It is considered blank if it is empty or marked as blank by button \"Blank\". It is considered blank if it is empty or marked as blank by button \"Blank\".
It is considered closed if it contains other data." It is considered closed if it contains other data."
@ -4094,7 +4180,7 @@ It is considered closed if it contains other data."
return \ return \
"The \"Pick drive for both roles\" button executes command -dev and obtains some "The \"Pick drive for both roles\" button executes command -dev and obtains some
information about the medium status. This info is displayed in the information about the medium status. This info is displayed in the
\"Input drive or image\" line and in the \"Output drive or image\" line. \"Input drive/image\" line and in the \"Output drive/image\" line.
Further it causes the display of the ISO image model to be updated. Further it causes the display of the ISO image model to be updated.
The medium in the drive must be blank or contain a valid ISO 9660 filesystem. The medium in the drive must be blank or contain a valid ISO 9660 filesystem.
@ -4106,7 +4192,7 @@ and renaming. When this is done, the changes get written to the drive
via button \"Write ISO session\". via button \"Write ISO session\".
The drive may also be a data file on hard disk. The drive may also be a data file on hard disk.
See fields \"Input drive or image\" and \"Output drive or image\". See fields \"Input drive/image\" and \"Output drive/image\".
It is considered appendable if it contains an ISO 9660 filesystem image. It is considered appendable if it contains an ISO 9660 filesystem image.
It is considered blank if it is empty or marked as blank by button \"Blank\". It is considered blank if it is empty or marked as blank by button \"Blank\".
It is considered closed if it contains other data." It is considered closed if it contains other data."
@ -4114,7 +4200,7 @@ It is considered closed if it contains other data."
if {"$what" == "Give up drives"} { if {"$what" == "Give up drives"} {
return \ return \
"The \"Give up drives\" button executes commands -indev \"\" -outdev \"\" "The \"Give up drives\" button executes commands -indev \"\" -outdev \"\"
and clears both \"... drive or image\" lines, as well as the ISO model." and clears both \"... drive/image\" lines, as well as the ISO model."
} }
if {"$what" == "Calm drives"} { if {"$what" == "Calm drives"} {
return \ return \
@ -4137,9 +4223,9 @@ A double-click on a drive item has the same effect as button
\"Pick drive for both roles\". \"Pick drive for both roles\".
" "
} }
if {"$what" == "Input drive or image"} { if {"$what" == "Input drive/image"} {
return \ return \
"The \"Input drive or image\" field displays the address of the input drive. "The \"Input drive/image\" field displays the address of the input drive.
Editing the drive address and pressing the Return key causes the execution Editing the drive address and pressing the Return key causes the execution
of command -indev with the field content as drive address. of command -indev with the field content as drive address.
@ -4150,18 +4236,18 @@ same file.
} }
if {"$what" == "input drive info"} { if {"$what" == "input drive info"} {
return \ return \
"The text field beneath the \"Input drive or image\" field displays the medium "The text field beneath the \"Input drive/image\" field displays the medium
status of the input drive. It tells about the writability, the medium type, status of the input drive. It tells about the writability, the medium type,
the number of ISO sessions, and the amount of readable data." the number of ISO sessions, and the amount of readable data."
} }
if {"$what" == "Eject (indev)"} { if {"$what" == "Eject (indev)"} {
return \ return \
"The \"Eject\" button beneath the \"Input drive or image\" field excutes "The \"Eject\" button beneath the \"Input drive/image\" field excutes
command -eject \"in\"." command -eject \"in\"."
} }
if {"$what" == "Output drive or image"} { if {"$what" == "Output drive/image"} {
return \ return \
"The \"Output drive or image\" field displays the address of the output drive. "The \"Output drive/image\" field displays the address of the output drive.
Editing the drive address and pressing the Return key causes the execution Editing the drive address and pressing the Return key causes the execution
of command -outdev with the field content as drive address. of command -outdev with the field content as drive address.
@ -4172,13 +4258,13 @@ same file.
} }
if {"$what" == "output drive info"} { if {"$what" == "output drive info"} {
return \ return \
"The text beneath the \"Output drive or image\" field displays the medium "The text beneath the \"Output drive/image\" field displays the medium
status of the output drive. It tells about the writability, the medium type, status of the output drive. It tells about the writability, the medium type,
the number of ISO sessions, and the amount of free space." the number of ISO sessions, and the amount of free space."
} }
if {"$what" == "Eject (outdev)"} { if {"$what" == "Eject (outdev)"} {
return \ return \
"The \"Eject\" button beneath the \"Output drive or image\" field excutes "The \"Eject\" button beneath the \"Output drive/image\" field excutes
command -eject \"out\"." command -eject \"out\"."
} }
if {"$what" == "Blank"} { if {"$what" == "Blank"} {
@ -4339,14 +4425,14 @@ tree browser to select a source address in the hard disk filesystem.
} }
if {"$what" == "Browse disk (indev)"} { if {"$what" == "Browse disk (indev)"} {
return \ return \
"The \"/\" button in the \"Input drive or image\" line pops up a file tree "The \"/\" button in the \"Input drive/image\" line pops up a file tree
browser to select a source address in the hard disk filesystem. browser to select a source address in the hard disk filesystem.
[tell_file_browser_help 1]" [tell_file_browser_help 1]"
} }
if {"$what" == "Browse disk (outdev)"} { if {"$what" == "Browse disk (outdev)"} {
return \ return \
"The \"/\" button in the \"Output drive or image\" line pops up a file tree "The \"/\" button in the \"Output drive/image\" line pops up a file tree
browser to select a source address in the hard disk filesystem. browser to select a source address in the hard disk filesystem.
[tell_file_browser_help 1]" [tell_file_browser_help 1]"
@ -4360,7 +4446,7 @@ browser to select the current directory in the ISO filesystem model.
} }
if {"$what" == "Browse ISO (move target)"} { if {"$what" == "Browse ISO (move target)"} {
return \ return \
"The \"/\" button in the \"ISO selection:\" line pops up a file tree "The \"/\" button in the \"Selection:\" line pops up a file tree
browser to select the current directory in the ISO filesystem model. browser to select the current directory in the ISO filesystem model.
[tell_file_browser_help 1]" [tell_file_browser_help 1]"
@ -4444,7 +4530,7 @@ no w-permission."
if {"$what" == "Overwrite disk files"} { if {"$what" == "Overwrite disk files"} {
return \ return \
"The \"Overwrite disk files\" switch controls whether existing files may be "The \"Overwrite disk files\" switch controls whether existing files may be
overwritten by extraction on hard disk. See xorriso command -overwrite \"on\". overwritten by extraction to hard disk. See xorriso command -overwrite \"on\".
This is DANGEROUS, of course, but comes in handy with restoring of backups. This is DANGEROUS, of course, but comes in handy with restoring of backups.
@ -4467,7 +4553,7 @@ and button \"Accept\"."
if {"$what" == "Permissions:"} { if {"$what" == "Permissions:"} {
return \ return \
"The \"Permissions\" menu allows to choose a global policy to adjust "The \"Permissions\" menu allows to choose a global policy to adjust
the access permissions of the files in the emerging ISO session. the access permissions of the files when an ISO session gets written.
The default policy \"as is\" leaves the permissions as they are. The default policy \"as is\" leaves the permissions as they are.
Usually they have been imported from hard disk or from a loaded ISO image. Usually they have been imported from hard disk or from a loaded ISO image.
@ -4486,9 +4572,9 @@ If there is any x-permission, then all three x get granted. s- and t-bits
get removed. get removed.
" "
} }
if {"$what" == "Refresh avail:"} { if {"$what" == "Avail:"} {
return \ return \
"The \"Refresh avail:\" button triggers command -tell_media_space. It makes "The \"Avail:\" button triggers command -tell_media_space. It makes
a time consuming exact prediction of the free space on the medium in the a time consuming exact prediction of the free space on the medium in the
output drive. For this purpose, the size of an ISO session with the pending output drive. For this purpose, the size of an ISO session with the pending
changes is computed. changes is computed.
@ -4506,7 +4592,7 @@ schedules them for being copied with the next \"Write ISO session\" run.
The switches \"Underneath\" and \"Selected\" control what ISO address The switches \"Underneath\" and \"Selected\" control what ISO address
the inserted files shall have. You may use buttons \"Delete\" and the inserted files shall have. You may use buttons \"Delete\" and
\"Rename to:\" for further adjustments. \"Move to:\" for further adjustments.
" "
} }
if {"$what" == "Underneath (insert)"} { if {"$what" == "Underneath (insert)"} {
@ -4567,20 +4653,20 @@ role with extraction or insertion of files.
Most of the buttons underneath the box operate on the selected items Most of the buttons underneath the box operate on the selected items
unconditionally." unconditionally."
} }
if {"$what" == "ISO selection:"} { if {"$what" == "Selection:"} {
return \ return \
"The ISO selection consists of the items which are selected in the list box "The ISO selection consists of the items which are selected in the list box
above the \"ISO selection:\" line. above the \"Selection:\" line.
If the respective \"Selected\" switches are enabled, then the ISO selection If the respective \"Selected\" switches are enabled, then the ISO selection
is source of file extraction and target of file insertion. is source of file extraction and target of file insertion.
In any case it is the old nome of the \"Rename to:\" button, the victim In any case it is the old nome of the \"Move to:\" button, the victim
of the \"Delete\" button, and the subject of the \"Verify\" button." of the \"Delete\" button, and the subject of the \"Verify\" button."
} }
if {"$what" == "Verify (selection)"} { if {"$what" == "Verify (selection)"} {
return \ return \
"The \"Verify\" button in the \"ISO selection:\" line executes command "The \"Verify\" button in the \"Selection:\" line executes command
-md5_check_r \"SORRY\" with each of the selected items. -md5_check_r \"SORRY\" with each of the selected items.
This reads the content of all data files which are selected or underneath This reads the content of all data files which are selected or underneath
@ -4600,9 +4686,9 @@ in earlier sessions if they were not freshly inserted after loading the
ISO model from the input drive. ISO model from the input drive.
" "
} }
if {"$what" == "Rename to:"} { if {"$what" == "Move to:"} {
return \ return \
"The \"Rename to:\" button uses command -mv to move each of the selected "The \"Move to:\" button uses command -mv to move each of the selected
items to the address that is given by the text field right to the button. items to the address that is given by the text field right to the button.
If this address points to an existing ISO directory, then the items will If this address points to an existing ISO directory, then the items will
@ -4613,16 +4699,35 @@ given address."
if {"$what" == "Make dir"} { if {"$what" == "Make dir"} {
return \ return \
"The \"Make dir\" button executes command -mkdir with the address in the "The \"Make dir\" button executes command -mkdir with the address in the
text field to its left (the same as used by \"Rename to:\"). text field to its left (the same as used by \"Move to:\").
Useful to create a target directory before moving the selection." Useful to create a target directory before moving the selection."
} }
if {"$what" == "rename and mkdir target"} { if {"$what" == "rename and mkdir target"} {
return \ return \
"The text field between the \"Rename to:\" button and the \"Make dir\" button "The text field between the \"Move to:\" button and the \"Make dir\" button
serves both buttons by providing the target address for renaming serves both buttons by providing the target address for renaming
resp. directory creation." resp. directory creation."
} }
if {"$what" == "yes to all"} {
return \
"The \"yes to all\" button appears in the yes/no window if a GUI action is
about to overwrite a file object and more such overwrite situations are
to be expected.
If the button is clicked, then all further yes/no questions of that GUI
action will be answered automatically with yes."
}
if {"$what" == "no to all"} {
return \
"The \"no to all\" button appears in the yes/no window if a GUI action is
about to overwrite a file object and more such overwrite situations are
to be expected.
If the button is clicked, then all further yes/no questions of that GUI
action will be answered automatically with no."
}
return "--- No help text found for topic '$what'" return "--- No help text found for topic '$what'"
} }
@ -4888,12 +4993,16 @@ proc yell_xorriso_tcltk {} {
# Tells whether an absolute path leads to a directory on hard disk # Tells whether an absolute path leads to a directory on hard disk
# #
proc localfs_isdir {path} { proc localfs_filetype {path} {
catch {file lstat "$path" stbuf} catch {file lstat "$path" stbuf}
if {[info exists stbuf] == 1} { if {[info exists stbuf] == 1} {
if {$stbuf(type) == "directory"} {return 1} set t [string range $stbuf(type) 0 0]
if {[string first "$t" "bcdls"] != -1} {return "$t"}
if {"$stbuf(type)" == "file"} {return "-"}
if {"$stbuf(type)" == "fifo"} {return "p"}
return "?"
} }
return 0 return ""
} }
@ -4902,7 +5011,7 @@ proc localfs_isdir {path} {
proc localfs_ls {dir} { proc localfs_ls {dir} {
set result "" set result ""
if {[localfs_isdir "$dir"] == 0} {return ""} if {[localfs_filetype "$dir"] != "d"} {return ""}
set conn [open "|ls {$dir}" r] set conn [open "|ls {$dir}" r]
while {1} { while {1} {
set ret [gets $conn line] set ret [gets $conn line]
@ -4910,14 +5019,9 @@ proc localfs_ls {dir} {
break break
} }
set adr [combine_dir_and_name "$dir" "$line"] set adr [combine_dir_and_name "$dir" "$line"]
set filetype [localfs_filetype "$adr"]
# >>> Obtain all types, not only "d" and "?" if {"$filetype" == ""} {set filetype "?"}
lappend result "$filetype $line"
if {[localfs_isdir "$adr"] == 1} {
lappend result "d $line"
} else {
lappend result "? $line"
}
} }
catch {close $conn} catch {close $conn}
return "$result" return "$result"

View File

@ -1 +1 @@
#define Xorriso_timestamP "2013.01.02.183011" #define Xorriso_timestamP "2013.01.03.101633"