Package: scsitools Source: scsitools: Please split out tk_scsiformat into its own package so we dont pull in X server on the server. Version: 0.12-2.1 Severity: wishlist Tags: patch User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu precise ubuntu-patch
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Dear Maintainer, In Ubuntu we split out tk_scsiformat into its own package so server not installed X, so we can save disk space and keep system simple The attacheddd patch was applied to achieve the following: * Merge from Debian testing. Remaining changes: - debian/control, debian/rules: Split out tk_scsiformat into its own package so we dont pull in X server on the server. (LP: #552622) Thanks for considering the patch. - -- System Information: Debian Release: wheezy/sid APT prefers oneiric-updates APT policy: (500, 'oneiric-updates'), (500, 'oneiric-security'), (500, 'oneiric') Architecture: amd64 (x86_64) Kernel: Linux 3.0.0-14-generic (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAEBCAAGBQJPDCcXAAoJELmHbrCQs2xbT18P/203PtcIp/k9REKPG/0AvYsC PqSCGxiIaPRW+CZopMld2Z0MyfUmd50KpuhqImTgR3dE5yFSbvizY/YKXRckgvwG XAtJW6E3acIlaLJSPDCdpTkPOKU0iUdQkNIdw4r0F/FDxFeHBreB1uUkrJxqr/mK Acu2A7TcXGDTRCAfrYvEnd4rLY+DUo2SVh/9YT4exWJh00lTeRnV5OtXrny0bbKO n0Y1h5LOF9qd61RSyAADYIwnZaLv7gtQaxwP0cQx4S2xyozblZ/EIp/LjdD/YxK1 6spcbgdc2vakT5oSJpmTKWw+w0XiaAQK00PUuvADSoJjBVLajmJ4QWfilSoxgGh5 rWAHkBY6IHAbaNVJ6CNCpb6vILAXVdyaAZgS/gnyBSDxouE3DH9J9PFtRx+73Tmr NY+esEndwqS409/NEd9NazBp/gRBCjS5aEz4dDmBhh9eWHQGXUuPbndXGwyTLi62 ocrL820szEKSp8uacoyO4bnYrNy5TEXKXo8zFFeARmMaXIXPN90NtSy82B/wbM5a Vr0cRnhE1rHxi76QnT4RJwkWneQfTqKlrNh75mUIGvOfqmLAFnnP6+kMrjQ2qRxd u+p/fqMQOxKwtKrhp4fAC5Px5FseR9YtBvAk1+YdDxzYre8KJazI7gqKDUF9AKQD dIDIg9oECmsH6EUPKaOn =n0F1 -----END PGP SIGNATURE-----
diff -Nru scsitools-0.12/debian/changelog scsitools-0.12/debian/changelog diff -Nru scsitools-0.12/debian/control scsitools-0.12/debian/control --- scsitools-0.12/debian/control 2011-01-11 04:53:41.000000000 +0700 +++ scsitools-0.12/debian/control 2011-12-20 11:23:26.000000000 +0700 @@ -9,6 +10,23 @@ Architecture: any Depends: ${shlibs:Depends}, util-linux (>= 2.11b-3), sg3-utils (>= 1.24), ${misc:Depends} Conflicts: hwtools (<< 0.6) +Description: Collection of tools for SCSI hardware management + This package is a collection of tools for manipulating SCSI hardware: + . + scsiinfo: displays SCSI drive low-level information and modifies SCSI + drive settings, + scsidev: makes permanent SCSI LUN -> devicename connections, + scsifmt: low-level SCSI formatter, + sraw: benchmarks raw SCSI I/O rates bypassing the buffer cache, + scsi-spin: program to manually spin up and down a SCSI device. + . + Beware that, to be used properly, these tools require some knowledge of + what they're doing as they can cause damage to your system. + +Package: scsitools-gui +Architecture: any +Depends: ${shlibs:Depends}, util-linux (>= 2.11b-3), sg3-utils (>= 1.24), ${misc:Depends}, scsitools +Conflicts: hwtools (<< 0.6) Recommends: tk8.4 | wish Description: Collection of tools for SCSI hardware management This package is a collection of tools for manipulating SCSI hardware: @@ -22,3 +40,5 @@ . Beware that, to be used properly, these tools require some knowledge of what they're doing as they can cause damage to your system. + . + This package contains the graphical front-end for scsitools diff -Nru scsitools-0.12/debian/rules scsitools-0.12/debian/rules --- scsitools-0.12/debian/rules 2011-01-22 04:39:27.000000000 +0700 +++ scsitools-0.12/debian/rules 2011-12-20 11:23:26.000000000 +0700 @@ -6,6 +6,7 @@ #architecture := $(shell dpkg-architecture -qDEB_HOST_ARCH) p = scsitools +gui = scsitools-gui include /usr/share/quilt/quilt.make @@ -59,6 +60,12 @@ cp -a debian/README.scsi-spin debian/$(p)/usr/share/doc/scsitools/README.scsi-spin cp -a debian/kernel-source-2.2.14.espfix debian/$(p)/usr/share/doc/scsitools/ + # gui + mkdir -p debian/$(gui)/usr/sbin + mv debian/$(p)/usr/sbin/tk* debian/${gui}/usr/sbin + mkdir -p debian/${gui}/usr/share/man/man8 + cp scsiinfo/man8/tk_scsiformat.8 debian/${gui}/usr/share/man/man8 + binary-indep: # There are no architecture-independent files to be uploaded # generated by this package. If there were any they would be @@ -70,7 +77,7 @@ dh_installdebconf dh_installdocs scsidev/scsi.alias dh_installman scsiinfo/man8/scsiinfo.8 scsiinfo/man8/scsiformat.8 \ - scsiinfo/man8/tk_scsiformat.8 scsiinfo/man8/scsi-config.8 \ + scsiinfo/man8/scsi-config.8 \ scsidev/scsidev.8 \ rescan-scsi-bus/rescan-scsi-bus.8 \ sraw/sraw.8 debian/scsi-spin.8 diff -Nru scsitools-0.12/debian/scsi-tools-gui/usr/sbin/tk_scsiformat scsitools-0.12/debian/scsi-tools-gui/usr/sbin/tk_scsiformat --- scsitools-0.12/debian/scsi-tools-gui/usr/sbin/tk_scsiformat 1970-01-01 07:00:00.000000000 +0700 +++ scsitools-0.12/debian/scsi-tools-gui/usr/sbin/tk_scsiformat 2011-06-14 04:15:53.000000000 +0700 @@ -0,0 +1,1238 @@ +#!/bin/sh +# the next lines restarts using wish or abort with a message \ +type wish > /dev/null 2>&1 && exec wish -f "$0" "$@" || \ +echo "no /usr/bin/wish found: please install a tk8.x package." && exit 1 +#!/usr/bin/wish -f +# Based in parts on scsi-config by: +# Copyright 1993 Yggdrasil Computing, Incorporated +# Copyright 1997 Michael Weller (eow...@exp-math.uni-essen.de) +# You may copy this file according to the terms and conditions of version 2 +# of the GNU General Public License as published by the Free Software +# Foundation. + +# This variable is set if WE issued a format command. Only when set, we will +# issue an mkfs command if a format completes. +set format_initiator 0 + +set textwidth 28 +set winwidth 64 +set butwidth 18 +set butwidth2 25 +set sdevice $argv +set par_fov "-o" +set par_inter "0" +set par_query "" +set par_estim 600 +set par_initpat "" +set par_initmode "none" +set par_defform "-d" +set par_erase "" +set par_defects "" +set par_partstyle "-fdos" +set par_parttype "-y83" +set par_partmin "99999" +set par_geomdetect "" +set par_heads "64" +set par_sectors "32" +set par_mkfs "mke2fs -m0 -q <DEVICE>1" + +set par_mkfsnames [list \ + "None" \ + "Ext2 (standard)" \ + "Ext2 (no reserved blocks)" \ + "DOS-FAT (1K clusters, up to 32MB)" \ + "DOS-FAT (2K clusters, up to 64MB)" \ + "DOS-FAT (4K clusters, up to 128MB)" \ + "DOS-FAT (8K clusters), up to 256MB)" \ + "DOS-FAT (16K clusters, up to 512MB)" \ + ] +# Value for None is not a valid command at all: +set par_mkfscmds [list \ + "<DEVICE>1" \ + "mke2fs -q <DEVICE>1" \ + "mke2fs -m0 -q <DEVICE>1" \ + "mkdosfs -s2 <DEVICE>1" \ + "mkdosfs -s4 <DEVICE>1" \ + "mkdosfs -s8 <DEVICE>1" \ + "mkdosfs -s16 <DEVICE>1" \ + "mkdosfs -s32 <DEVICE>1" \ + ] +set vars2save [list par_fov par_inter par_query par_estim par_initpat par_initmode \ + par_defform par_erase par_partstyle par_parttype par_partmin par_geomdetect par_heads \ + par_sectors par_disprim par_nvram par_discert par_stop par_mkfs\ + ] + +set whoami [exec whoami] + +proc save_var {fd var} { + upvar #0 $var myval + puts $fd "set $var \"$myval\"" +} + +proc change_fov {} { + global par_fov + + if { [string compare $par_fov -o] != 0 } then { + if { [winfo exists .init_win] == 1 } then { + destroy .init_win + } + .f_opt.col1.init configure -state disabled + .f_opt.col1.disprim configure -state disabled + .f_opt.col1.nvram configure -state disabled + .f_opt.col2.discert configure -state disabled + .f_opt.col2.stop configure -state disabled + } else { + .f_opt.col1.init configure -state normal + .f_opt.col1.disprim configure -state normal + .f_opt.col1.nvram configure -state normal + .f_opt.col2.discert configure -state normal + .f_opt.col2.stop configure -state normal + } +} + +proc simple {} { + global par_inter par_fov par_erase par_defform par_defects par_query + + set par_inter "0" + set par_fov "" + set par_erase "" + change_fov + if { [winfo exists .defs_win] == 1 } { + destroy .defs_win + } + set par_defform "-d" + set par_defects "" + set par_query "-b" + block_change $par_query +} + +proc change_partmin {} { + global par_partmin + + if { [string compare $par_partmin ""] == 0} then { + set par_partmin 0 + } + .f_def.part.menu entryconfigure 9 -label "Maximal Partition Size ${par_partmin}MB" +} + +proc change_geom {geomdetect heads sectors} { + if { [string compare $geomdetect "-G"] == 0} then { + .f_def.part.menu entryconfigure 8 -label \ + "Disk Geometry is ${heads} Heads and ${sectors} Sectors" + } else { + .f_def.part.menu entryconfigure 8 -label "Autodetect Disk Geometry" + } +} + +proc change_mkfs {} { + global par_mkfscmds par_mkfs + + if { [lsearch -exact $par_mkfscmds "$par_mkfs"] >= 0 } then { + set label "Other" + } else { + set label "Other ($par_mkfs)" + } + .f_def.part.menu.mkfs entryconfigure [expr [llength $par_mkfscmds] + 2] -label "$label" +} + +proc bind_eedit {w} { + bind $w <Key-Delete> { + %W select clear + %W delete insert insert + } + bind $w <Key-BackSpace> { + %W select clear + %W delete [expr [%W index insert] - 1] \ + [expr [%W index insert] - 1] + } + bind $w <Key-Left> { + %W select clear + %W icursor [expr [%W index insert] - 1] + } + bind $w <Key-Right> { + %W select clear + %W icursor [expr [%W index insert] + 1] + } + bind $w <Button-2> { + catch { + %W insert insert [selection get] + } + } +} + +proc bind_entry {w} { + bind_eedit $w + bind $w <Key> { + if { [ string length [%W get] ] < 5 } { + if { [ string first %A "0123456789" ] >= 0 } then { + %W insert insert %A + } + } + } + bind $w <Control-Key> {set x 1} + bind $w <Meta-Key> {set x 1} + bind $w <Alt-Key> {set x 1} + bind $w <Control-Meta-Key> {set x 1} + bind $w <Control-Alt-Key> {set x 1} + bind $w <Meta-Alt-Control-Key> {set x 1} + bind $w <Button-2> { + catch { + set sel [selection get] + regsub -all "\[^0-9\]" $sel "" sel2 + %W insert insert $sel2 + %W delete 5 end + } + } +} + +proc bind_text {w} { + bind $w <Control-Key> {set x 1} + bind $w <Meta-Key> {set x 1} + bind $w <Alt-Key> {set x 1} + bind $w <Control-Meta-Key> {set x 1} + bind $w <Control-Alt-Key> {set x 1} + bind $w <Meta-Alt-Control-Key> {set x 1} + bind $w <Key-Delete> { + %W delete insert {insert + 1 chars} + %W yview -pickplace insert + } + bind $w <Key-BackSpace> { + %W delete {insert - 1 chars} insert + %W yview -pickplace insert + } + bind $w <Key-Left> { + %W mark set insert {insert - 1 chars} + %W yview -pickplace insert + } + bind $w <Key-Right> { + %W mark set insert {insert + 1 chars} + %W yview -pickplace insert + } + bind $w <Key-Up> { + %W mark set insert {insert - 1 lines} + %W yview -pickplace insert + } + bind $w <Key-Down> { + %W mark set insert {insert + 1 lines} + %W yview -pickplace insert + } +} + +proc block_change { block } { + if { [ string compare $block "-b" ] == 0 } then { + .f_block.f_estim configure -foreground black + .f_block.f_estim.t configure -state normal + .f_block.f_estim.t configure -background white + } else { + .f_block.f_estim configure -foreground gray70 + .f_block.f_estim.t configure -state disabled + .f_block.f_estim.t configure -background bisque + } +} + +proc copyrights {} { + global butwidth butwidth2 + if { [winfo exists .version] == 1 } { + raise .version + return; + } + toplevel .version + wm title .version "TkScsiformat Version Information" + wm group . + frame .version.header + label .version.header.label -bitmap info -bg pink + message .version.header.message -width 400 -bg pink -text \ + "Version Information." + + pack .version.header.label .version.header.message -side left -padx 15 + message .version.copy0 -width 400 -background yellow -justify center -text \ + { This is version 1.0, 20th Aug 1997 of tk_scsiformat.} + pack .version.header .version.copy0\ + -side top -pady 10 -padx 15 + + message .version.copy1 -width 400 -background green -justify left -text\ + {Copyright 1993 Yggdrasil Computing, Incorporated. +Copyright 1997 Michael Weller (eow...@exp-math.uni-essen.de).} + + message .version.copy2 -width 400 -justify center -text {This configuration\ + script may be copied and modified according to the terms and conditions\ + of version 2 of the GNU General Public License as published by the\ + Free Software Foundation (Cambridge, Massachusetts),\ + provided that this notice is not removed. + + This script was originally the control panel from the Yggdrasil\ + distribution. Eric Youngdale thought it looked pretty keen, and it was easy\ + to adapt, so he used it as the basis for the SCSI configuration manager.\ + + The configuration manager was extended by Michael Weller, and finally \ + this utility was written and based on it. + + Well, honestly, not more than ten or twenty lines are copied from scsi-config. \ + Thus repeating the copyrights above is probably not required. This is released \ + under GPL nevertheless, though. +} + + + button .version.dismiss -text "Dismiss" -activebackground green \ + -command {destroy .version} -width $butwidth2 + pack .version.copy1 .version.copy2 .version.dismiss\ + -side top -pady 10 -padx 15 + + tkwait window .version +} + +proc enter_init {} { + global butwidth2 par_initpat par_initmode textwidth winwidth + global my_initmode + + set my_initmode ${par_initmode} + + if { [winfo exists .init_win] == 1 } { + raise .init_win + return; + } + toplevel .init_win + wm title .init_win "Initialization of Logical Blocks" + wm group . + + frame .init_win.header + label .init_win.header.label -bitmap questhead -bg pink + message .init_win.header.message -width 400 -bg pink -text \ + "Initialization Pattern for the Logical Blocks." + + pack .init_win.header.label .init_win.header.message \ + -side left -padx 15 + pack .init_win.header -side top -pady 10 -padx 15 + + frame .init_win.row1 + frame .init_win.row2 + radiobutton .init_win.row1.log -text "of each logical block" \ + -variable my_initmode -value "-L" -width $textwidth + radiobutton .init_win.row1.phy -text "of each physical block" \ + -variable my_initmode -value "-P" -width $textwidth + radiobutton .init_win.row2.def -text "Don't write them anywhere" \ + -variable my_initmode -value "none" -width $textwidth + + pack .init_win.row1.log .init_win.row1.phy \ + -side left -pady 5 -padx 15 -ipadx 2 -pady 2 + pack .init_win.row2.def \ + -side left -pady 5 -padx 15 -ipadx 2 -pady 2 + + label .init_win.mess1 -width $winwidth -text \ + "Write the corresponding logical block number in the first 4 bytes:" + pack .init_win.mess1 -side top -pady 5 -padx 15 + pack .init_win.row1 -side top -pady 5 -padx 15 + pack .init_win.row2 -side top -pady 5 -padx 15 + + label .init_win.mess2 -width $winwidth -text \ + "Enter an (optional) sequence of hexnumbers to fill the blocks with:" + pack .init_win.mess2 -side top -pady 5 -padx 15 + + frame .init_win.frame + scrollbar .init_win.frame.yscroll -relief sunken \ + -command ".init_win.frame.page yview" + text .init_win.frame.page -width $winwidth -background white -relief sunken \ + -borderwidth 2 -height 8 -wrap char -exportselection 1 \ + -yscrollcommand ".init_win.frame.yscroll set" + .init_win.frame.page insert 1.0 $par_initpat + pack .init_win.frame.yscroll -side right -fill y + pack .init_win.frame.page -side top -expand 1 -fill both + + bind .init_win.frame.page <Key> { + if { [ string first %A " 0123456789abcdefgABCDEF" ] >= 0 } then { + .init_win.frame.page insert insert [string toupper %A] + .init_win.frame.page yview -pickplace insert + } + if { [ string first %A " " ] >= 0 } then { + .init_win.frame.page insert insert "\x0a" + .init_win.frame.page yview -pickplace insert + } + } + bind .init_win.frame.page <Button-2> { + catch { + set sel [string toupper [selection get]] + regsub -all "\[^ 0123456789ABCDEF\x0a\]" $sel "" sel2 + %W insert insert $sel2 + } + } + bind_text .init_win.frame.page + pack .init_win.frame -side top -pady 5 -padx 15 + frame .init_win.f_bot + button .init_win.f_bot.ok -text "Ok" \ + -activebackground green -command { + set par_initpat [ .init_win.frame.page get 1.0 end ] + set par_initmode $my_initmode + destroy .init_win + } -width $butwidth2 + button .init_win.f_bot.dismiss -text "Abort" \ + -activebackground red -activeforeground white \ + -command {destroy .init_win} -width $butwidth2 + pack .init_win.f_bot.ok .init_win.f_bot.dismiss \ + -side left -pady 15 -padx 15 -ipadx 2 -pady 2 + + pack .init_win.f_bot -side top -pady 10 -padx 15 + + tkwait window .init_win +} + +proc set_msg { form } { + switch -- $form { + -D { .defs_win.mess3 configure -text \ + {Enter defects in the format <integer>:<integer>:<integer> with three numbers \ + for cylinder, head, physical sector. Specifying sector -1 marks the whole \ + track as defect. You may preceed numbers with 0x or 0 for hexadecimal or \ + octal representation } + } + -B { .defs_win.mess3 configure -text \ + {Enter defects in the format <integer>:<integer>:<integer> with three numbers \ + for cylinder, head, bytes from index. This marks that number of bytes from \ + the index mark as bad. Specifying -1 marks the whole \ + track as defect. You may preceed numbers with 0x or 0 for hexadecimal or \ + octal representation } + } + -d { .defs_win.mess3 configure -text \ + {Enter defects in the format <integer> where <integer> is the number of the \ + defect logical block. You may preceed numbers with 0x or 0 for hexadecimal or \ + octal representation } + } + } +} + +proc enter_defs {} { + global butwidth2 par_defform par_defects textwidth winwidth + global my_defform + + set my_defform $par_defform + if { [winfo exists .defs_win] == 1 } { + raise .defs_win + return; + } + toplevel .defs_win + wm title .defs_win "Manual Defects Addition" + wm group . + frame .defs_win.header + label .defs_win.header.label -bitmap questhead -bg pink + message .defs_win.header.message -width 400 -bg pink -text \ + "Defects to be added manually." + + pack .defs_win.header.label .defs_win.header.message \ + -side left -padx 15 + pack .defs_win.header -side top -pady 10 -padx 15 + + frame .defs_win.row1 + frame .defs_win.row2 + radiobutton .defs_win.row1.phy -text "By Physical Sectors" \ + -variable my_defform -value "-D" -width $textwidth -command { set_msg $my_defform } + radiobutton .defs_win.row1.byt -text "By Bytes from Index" \ + -variable my_defform -value "-B" -width $textwidth -command { set_msg $my_defform } + radiobutton .defs_win.row2.def -text "By Logical Block Numbers" \ + -variable my_defform -value "-d" -width $textwidth -command { set_msg $my_defform } + + pack .defs_win.row1.phy .defs_win.row1.byt \ + -side left -pady 5 -padx 15 -ipadx 2 -pady 2 + pack .defs_win.row2.def \ + -side left -pady 5 -padx 15 -ipadx 2 -pady 2 + + label .defs_win.mess1 -width $winwidth -text \ + "Select the format in which you want to enter the defects:" + pack .defs_win.mess1 -side top -pady 5 -padx 15 + pack .defs_win.row1 -side top -pady 5 -padx 15 + pack .defs_win.row2 -side top -pady 5 -padx 15 + + label .defs_win.mess2 -width $winwidth -text \ + "Enter an (optional) sequence of of defects:" + pack .defs_win.mess2 -side top -pady 5 -padx 15 + + frame .defs_win.frame + scrollbar .defs_win.frame.yscroll -relief sunken \ + -command ".defs_win.frame.page yview" + text .defs_win.frame.page -width $winwidth -background white -relief sunken \ + -borderwidth 2 -height 8 -wrap char -exportselection 1 \ + -yscrollcommand ".defs_win.frame.yscroll set" + .defs_win.frame.page insert 1.0 $par_defects + pack .defs_win.frame.yscroll -side right -fill y + pack .defs_win.frame.page -side top -expand 1 -fill both + + bind .defs_win.frame.page <Key> { + if { [ string first %A " 0123456789abcdefgABCDEF:-" ] >= 0 } then { + .defs_win.frame.page insert insert [string toupper %A] + } + if { [ string compare %A " " ] == 0 } then { + .defs_win.frame.page insert insert "\x0a" + } + if { [ string first %A "xX" ] >= 0 } then { + .defs_win.frame.page insert insert "x" + } + .defs_win.frame.page yview -pickplace insert + } + bind .defs_win.frame.page <Button-2> { + catch { + set sel [string toupper [selection get]] + regsub -all "\[^ 0123456789ABCDEFX:\x0a-\]" $sel "" sel2 + regsub -all "X" $sel2 "x" sel + %W insert insert $sel + } + } + bind_text .defs_win.frame.page + pack .defs_win.frame -side top -pady 5 -padx 15 + + message .defs_win.mess3 -justify center -text "X" -background green \ + -aspect 800 + + set_msg $my_defform + + pack .defs_win.mess3 -side top -pady 5 -padx 15 + + frame .defs_win.f_bot + button .defs_win.f_bot.ok -text "Ok" \ + -activebackground green -command { + set par_defects [ .defs_win.frame.page get 1.0 end ] + set par_defform $my_defform + destroy .defs_win + } -width $butwidth2 + button .defs_win.f_bot.dismiss -text "Abort" \ + -activebackground red -activeforeground white \ + -command {destroy .defs_win} -width $butwidth2 + pack .defs_win.f_bot.ok .defs_win.f_bot.dismiss \ + -side left -pady 15 -padx 15 -ipadx 2 -pady 2 + + pack .defs_win.f_bot -side top -pady 10 -padx 15 + + tkwait window .defs_win +} + +proc handle_trans {w ontop} { + wm transient $w $ontop + wm withdraw $w + update idletasks + set x [expr [winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 \ + - [winfo vrootx [winfo parent $w]]] + set y [expr [winfo screenheight $w]/2 - [winfo reqheight $w]/2 \ + - [winfo vrooty [winfo parent $w]]] + wm geom $w +$x+$y + wm deiconify $w + + set oldFocus [focus] + grab $w + focus $w + + tkwait window $w + if { [string compare $ontop "."] != 0 } then { + grab $ontop + } + focus $oldFocus +} + +proc post_partsize {} { + global butwidth2 par_partmin + + toplevel .partsize + frame .partsize.f_bot + wm title .partsize "Maximal partition size" + wm group . + frame .partsize.header + label .partsize.header.label -bitmap questhead -bg pink + message .partsize.header.message -width 400 -bg pink -text \ + "Maximal partition size." + + pack .partsize.header.label .partsize.header.message \ + -side left -padx 15 + pack .partsize.header -side top -pady 10 -padx 15 + + message .partsize.expl -bg green -width 400 -text \ + "Enter the maximal partition size in Megabyte. If it is zero, \ + no partition is created and the partition table is left empty. \ + Otherwise a partition of this size is created as primary \ + partition 1. If the size does not fit the partition is made as \ + large as possible." + + pack .partsize.expl -side top -pady 10 -padx 15 + + label .partsize.f_inter -text "Maximal partition size in MB: " + entry .partsize.f_inter.t -width 5 -background white -relief sunken -borderwidth 2 \ + -exportselection 1 + .partsize.f_inter.t insert 0 $par_partmin + bind_entry .partsize.f_inter.t + place .partsize.f_inter.t -in .partsize.f_inter -anchor e -relx 1.0 -rely 0.5 + + pack .partsize.f_inter -side top -pady 20 -padx 15 + + button .partsize.f_bot.ok -text "Ok" \ + -activebackground green -command { + set par_partmin [ .partsize.f_inter.t get ] + change_partmin + destroy .partsize + } -width $butwidth2 + button .partsize.f_bot.dismiss -text "Abort" \ + -activebackground red -activeforeground white \ + -command {destroy .partsize} -width $butwidth2 + pack .partsize.f_bot.ok .partsize.f_bot.dismiss \ + -side left -pady 15 -padx 15 -ipadx 2 -pady 2 + + pack .partsize.f_bot -side top -pady 10 -padx 15 + + handle_trans .partsize . +} + +proc change_geodet { geodet } { + if { [ string compare $geodet "-G" ] == 0 } then { + .geom.hese.heads configure -foreground black + .geom.hese.heads.t configure -state normal + .geom.hese.heads.t configure -background white + .geom.hese.sectors configure -foreground black + .geom.hese.sectors.t configure -state normal + .geom.hese.sectors.t configure -background white + } else { + .geom.hese.heads configure -foreground gray70 + .geom.hese.heads.t configure -state disabled + .geom.hese.heads.t configure -background bisque + .geom.hese.sectors configure -foreground gray70 + .geom.hese.sectors.t configure -state disabled + .geom.hese.sectors.t configure -background bisque + } +} + +proc post_geom {} { + global winwidth butwidth2 par_geomdetect par_heads par_sectors textwidth + global my_geomdetect + + set my_geomdetect $par_geomdetect + + toplevel .geom + frame .geom.f_bot + wm title .geom "Disk Drive Geometry" + wm group . + frame .geom.header + label .geom.header.label -bitmap questhead -bg pink + message .geom.header.message -width 400 -bg pink -text \ + "Disk Drive Geometry." + + pack .geom.header.label .geom.header.message \ + -side left -padx 15 + pack .geom.header -side top -pady 10 -padx 15 + + message .geom.expl -bg green -width 400 -text \ + "Enter the geometry of the disk. Not the real one, but the one \ + DOS will see, s.t. the partition table can be build in a way that \ + DOS and other OS's will be able to handle it. Generally, linux \ + device drivers report the setting back which the corresponding adapters \ + use under DOS. If this fails, 64 heads and 32 are usually used. " + + pack .geom.expl -side top -pady 10 -padx 15 + + checkbutton .geom.auto -variable my_geomdetect -onvalue "" -offvalue "-G" \ + -text " Query Geometry from Scsidriver " -command {change_geodet $my_geomdetect} + + pack .geom.auto -side top -pady 20 -padx 15 + + frame .geom.hese + + label .geom.hese.heads -text "Heads: " + entry .geom.hese.heads.t -width 5 -background white -relief sunken -borderwidth 2 \ + -exportselection 1 + .geom.hese.heads.t insert 0 $par_heads + bind_entry .geom.hese.heads.t + place .geom.hese.heads.t -in .geom.hese.heads -anchor e -relx 1.0 -rely 0.5 + + label .geom.hese.sectors -text "Sectors: " + entry .geom.hese.sectors.t -width 5 -background white -relief sunken -borderwidth 2 \ + -exportselection 1 + .geom.hese.sectors.t insert 0 $par_sectors + bind_entry .geom.hese.sectors.t + place .geom.hese.sectors.t -in .geom.hese.sectors -anchor e -relx 1.0 -rely 0.5 + + pack .geom.hese.heads .geom.hese.sectors -side left -pady 15 -padx 15 + pack .geom.hese -side top + change_geodet $my_geomdetect + + button .geom.f_bot.ok -text "Ok" \ + -activebackground green -command { + set par_heads [ .geom.hese.heads.t get ] + set par_sectors [ .geom.hese.sectors.t get ] + set par_geomdetect $my_geomdetect + change_geom $par_geomdetect $par_heads $par_sectors + destroy .geom + } -width $butwidth2 + button .geom.f_bot.dismiss -text "Abort" \ + -activebackground red -activeforeground white \ + -command {destroy .geom} -width $butwidth2 + pack .geom.f_bot.ok .geom.f_bot.dismiss \ + -side left -pady 15 -padx 15 -ipadx 2 -pady 2 + + pack .geom.f_bot -side top -pady 10 -padx 15 + + handle_trans .geom . +} + +proc post_mkfs {} { + global butwidth2 par_mkfs + + toplevel .mkfs + frame .mkfs.f_bot + wm title .mkfs "Make FileSystem Command" + wm group . + frame .mkfs.header + label .mkfs.header.label -bitmap questhead -bg pink + message .mkfs.header.message -width 400 -bg pink -text \ + "Make FileSystem Command." + + pack .mkfs.header.label .mkfs.header.message \ + -side left -padx 15 + pack .mkfs.header -side top -pady 10 -padx 15 + + message .mkfs.expl -bg green -width 400 -text \ + "Enter a command to execute to make a filesystem on the freshly created partition.\ + The string <DEVICE> in the string will be replaced by the name of disk device\ + being formatted. Generally you'll have to use <DEVICE>1 to refer to the first\ + partition." + + pack .mkfs.expl -side top -pady 10 -padx 15 + + frame .mkfs.f_inter + scrollbar .mkfs.f_inter.s -relief sunken -orient horiz -command \ + ".mkfs.f_inter.t xview" + entry .mkfs.f_inter.t -background white -relief sunken -borderwidth 2 \ + -exportselection 1 -xscrollcommand ".mkfs.f_inter.s set" + .mkfs.f_inter.t insert 0 $par_mkfs + + bind_eedit .mkfs.f_inter.t + bind .mkfs.f_inter.t <Key-KP_Enter> { .mkfs.f_bot.ok invoke } + bind .mkfs.f_inter.t <Key-Return> { .mkfs.f_bot.ok invoke } + + pack .mkfs.f_inter.t .mkfs.f_inter.s -side top -fill both -expand yes + pack .mkfs.f_inter -side top -pady 20 -padx 15 -fill both -expand yes + + button .mkfs.f_bot.ok -text "Ok" \ + -activebackground green -command { + set par_mkfs [ .mkfs.f_inter.t get ] + change_mkfs + destroy .mkfs + } -width $butwidth2 + button .mkfs.f_bot.dismiss -text "Abort" \ + -activebackground red -activeforeground white \ + -command {destroy .mkfs} -width $butwidth2 + pack .mkfs.f_bot.ok .mkfs.f_bot.dismiss \ + -side left -pady 15 -padx 15 -ipadx 2 -pady 2 + + pack .mkfs.f_bot -side top -pady 10 -padx 15 + + handle_trans .mkfs . +} + +proc set_rands {} { + set tworands [exec /usr/lib/scsi/tworands] + .conf.equa.sol delete 0 end + .conf.equa.a configure -state normal + .conf.equa.b configure -state normal + .conf.equa.a delete 0 end + .conf.equa.b delete 0 end + .conf.equa.a insert 0 [lindex $tworands 0] + .conf.equa.b insert 0 [lindex $tworands 1] + .conf.equa.a configure -state disabled + .conf.equa.b configure -state disabled +} + +proc query_format {} { + global winwidth butwidth2 textwidth format_cmd sdevice par_fov par_inter par_query \ + par_estim par_initpat par_initmode par_defform par_defects par_erase par_partstyle \ + par_parttype par_partmin par_geomdetect par_heads par_sectors par_disprim par_nvram \ + par_discert par_stop + + + toplevel .conf + frame .conf.f_bot + wm title .conf "Format Confirmation Request" + wm group . + frame .conf.header + label .conf.header.label -bitmap warning -bg pink + message .conf.header.message -width 400 -bg pink -text \ + "Format Confirmation Request." + + pack .conf.header.label .conf.header.message \ + -side left -padx 15 + pack .conf.header -side top -pady 10 -padx 15 + + message .conf.expl -bg red -fg white -width 400 -justify center -text \ +"Formatting will erase all data on $sdevice, regardless on which \ +partition, and there will be NO way to recover your data. + +Therefore, please check now if you really want to format this device. \ +To ensure that your are really with me and know what you do, please \ +answer the simple question below." + + pack .conf.expl -side top -pady 10 -padx 15 + + frame .conf.equa + + entry .conf.equa.a -width 3 -relief sunken -borderwidth 2 -state disabled + label .conf.equa.times -text "*" + entry .conf.equa.b -width 3 -relief sunken -borderwidth 2 -state disabled + label .conf.equa.equa -text "=" + entry .conf.equa.sol -width 5 -background white -relief sunken -borderwidth 2 \ + -exportselection 1 + bind_entry .conf.equa.sol + set_rands + + pack .conf.equa.a .conf.equa.times .conf.equa.b .conf.equa.equa .conf.equa.sol \ + -side left -pady 10 -padx 3 + pack .conf.equa -side top + + message .conf.result -bg red -fg white -aspect 900 -text "Wrong! Please retry or bail out!" + + frame .conf.space + pack .conf.space -side top -pady 8 + + button .conf.f_bot.ok -text "Confirm" \ + -activebackground yellow -command { + if { [expr [.conf.equa.a get] * [.conf.equa.b get]] == [.conf.equa.sol get] } then { + destroy .conf + do_format $format_cmd + } else { + set_rands + pack .conf.result -after .conf.equa -side top -pady 2 -padx 15 + } + } -width $butwidth2 + button .conf.f_bot.show -text "Show ScsiFormat Command" \ + -activebackground green -command { + show_format "$format_cmd $sdevice" + } -width $butwidth2 + + pack .conf.f_bot.ok .conf.f_bot.show -side left -pady 15 -padx 15 -ipadx 2 -pady 2 + + button .conf.dismiss -text "Bail Out" \ + -activebackground red -activeforeground white \ + -command {destroy .conf} -width $butwidth2 + + pack .conf.f_bot -side top -padx 15 + pack .conf.dismiss -side top -pady 10 + + set format_cmd "/usr/sbin/scsiformat $par_erase -i$par_inter" + + regsub -all "\x0a" [string trim $par_defects] " " tmpstr + regsub -all " +" $tmpstr "," tmpstr + if { [string length $tmpstr] > 0 } then { + append format_cmd " $par_defform$tmpstr" + } + if { [string compare $par_partstyle "none"] != 0 } then { + append format_cmd " $par_partstyle $par_parttype -M$par_partmin" + } + if { [string compare $par_geomdetect "-G"] == 0 } then { + append format_cmd " $par_geomdetect${par_heads}x$par_sectors" + } + if { [string compare $par_fov "-o"] == 0} then { + append format_cmd " $par_fov" + if { [string compare $par_initmode "none"] != 0 } then { + append format_cmd " $par_initmode" + } + regsub -all "\[ \x0a\]" [string trim $par_initpat] "" tmpstr + if { [string length $tmpstr] > 0 } then { + append format_cmd " -I$tmpstr" + } + append format_cmd " $par_discert $par_disprim $par_stop $par_nvram" + } + if { [string compare $par_query "-b"] == 0 } then { + append format_cmd " -b$par_estim" + } + #trim unneccessary spaces: + regsub -all " +" [string trim $format_cmd] " " format_cmd + handle_trans .conf . +} + +proc show_format {cmd} { + global winwidth butwidth2 textwidth + + toplevel .showcmd + frame .showcmd.f_bot + wm title .showcmd "Show ScsiFormat Command" + wm group . + frame .showcmd.header + label .showcmd.header.label -bitmap info -bg pink + message .showcmd.header.message -width 400 -bg pink -text \ + "Show ScsiFormat Command." + + pack .showcmd.header.label .showcmd.header.message \ + -side left -padx 15 + pack .showcmd.header -side top -pady 10 -padx 15 + + message .showcmd.expl -width 400 -text \ + "This is the command which will perform the scsi low level format you requested:" + pack .showcmd.expl -side top -pady 10 -padx 15 + + message .showcmd.cmd -width 400 -text $cmd -relief sunken + pack .showcmd.cmd -side top -pady 10 -padx 15 + + button .showcmd.dismiss -text "Dismiss" \ + -activebackground red -activeforeground white \ + -command {destroy .showcmd} -width $butwidth2 + + pack .showcmd.dismiss -side top -pady 10 + + handle_trans .showcmd .conf +} + +proc do_format {fcmd} { + global par_query par_estim sdevice + global winwidth butwidth2 textwidth + global check_cmd format_initiator + + set security "-F'Ene Mene Meck, und Du bist weg!'" + append fcmd " $security -t0 -X $sdevice" + + if { [catch {exec sh -c "$fcmd" >& /var/run/scsiformat.[pid] } err] != 0 } then { + set fd [open /var/run/scsiformat.[pid] r] + set err "$err\x0a[read $fd]" + close $fd + exec rm /var/run/scsiformat.[pid] + show_err scsiformat $err + return; + } + exec rm /var/run/scsiformat.[pid] + set format_initiator 1 + show_busy +} + +proc show_err {cmd msg} { + global winwidth butwidth2 textwidth + + if { [winfo exists .error] == 1 } { + .error.msg configure -text $msg + raise .error + tkwait window .error + return; + } + toplevel .error + frame .error.f_bot + wm title .error "ScsiFormat Error" + wm group . + frame .error.header + label .error.header.label -bitmap error -bg pink + message .error.header.message -width 400 -bg pink -text \ + "Show $cmd Error Message." + + pack .error.header.label .error.header.message \ + -side left -padx 15 + pack .error.header -side top -pady 10 -padx 15 + + message .error.expl -width 600 -text \ + "$cmd returned the following error message:" + pack .error.expl -side top -pady 10 -padx 15 + + message .error.msg -width 600 -text $msg -relief sunken + pack .error.msg -side top -pady 10 -padx 15 + + button .error.dismiss -text "Dismiss" \ + -activebackground red -activeforeground white \ + -command {destroy .error} -width $butwidth2 + + pack .error.dismiss -side top -pady 10 + + tkwait window .error +} + +proc query_prog {} { + global sdevice errorCode wasbusy format_initiator par_mkfs + + set check_cmd "/usr/sbin/scsiformat -T -t1 -X $sdevice" + + if { [winfo exists .showprog] != 1 } { + return; + } + set errorCode [list CHILDSTATUS 0 0] + catch {exec sh -c "$check_cmd"} err + if { ([string compare [lindex $errorCode 0] CHILDSTATUS] != 0) + || ([lindex $errorCode 2] > 1) } then { + show_err scsiformat $err + } elseif { [lindex $errorCode 2] == 1 } then { + if {[catch { + .showprog.row2.start configure -text [lindex $err 0] + .showprog.row2.end configure -text [lindex $err 3] + set percent [lindex $err 1] + if { [string compare $percent "-"] != 0} then { + .showprog.expl configure -text [format "%.10g%% in %s" [expr 100 * $percent] \ + [lindex $err 2] ] + if { $percent >= 1.0 } then { set percent 1.0 } + } else { + .showprog.expl configure -text [lindex $err 2] + set percent 0 + } + place .showprog.slider.inner -in .showprog.slider -relwidth $percent -relheight 1.0 \ + -anchor nw -x 0 -y 0 + set wasbusy 1 + after 5000 query_prog}] != 0} then { +#Something weird went on. Like illegal device name, read-only device, etc.. + destroy .showprog + } + } else { + destroy .showprog + if { $format_initiator == 1} then { + set format_initiator 0 + if { [string compare $par_mkfs "<DEVICE>1"] != 0} then { + regsub "<DEVICE>" $par_mkfs "${sdevice}" cmd +# +#it seems that we have to wait even more... +# +#a mayor reason is that the format might have completed, but scsiformat is +#still creating the partion which will also include some sleep()'s +# + exec sync + exec sh -c "sleep 10" + set errorCode [list NONE 0 0] + catch {exec sh -c "$cmd"} err + if { ([string compare [lindex $errorCode 0] CHILDSTATUS] == 0) } then { + show_err "Filesystem maker"\ + "'$cmd' exited with errorcode - [lindex $errorCode 2]\x0a$err" + } + } + } + if { $wasbusy == 1 } then { + puts -nonewline stderr "\x0a" + flush stderr + } + } +} + +proc show_busy {} { + global textwidth wasbusy + + toplevel .showprog + frame .showprog.f_bot + wm title .showprog "Show ScsiFormat Progress" + wm group . + frame .showprog.header + label .showprog.header.label -bitmap hourglass -bg pink + message .showprog.header.message -width 400 -bg pink -text \ + "Formatting in Progress." + + pack .showprog.header.label .showprog.header.message \ + -side left -padx 15 + pack .showprog.header -side top -pady 10 -padx 15 + frame .showprog.space + pack .showprog.space -side top -pady 5 + frame .showprog.row1 + frame .showprog.row2 + pack .showprog.row1 .showprog.row2 -side top -expand yes -fill both -padx 4 + + label .showprog.row1.start -text "Started" -borderwidth -1 + pack .showprog.row1.start -side left + frame .showprog.row1.space + pack .showprog.row1.space -after .showprog.row1.start -side left -expand yes -fill both + label .showprog.row1.end -text "Estimated End" -borderwidth -1 + pack .showprog.row1.end -side right + + label .showprog.row2.start -borderwidth -1 + pack .showprog.row2.start -side left + frame .showprog.row2.space + pack .showprog.row2.space -after .showprog.row2.start -side left -expand yes -fill both + label .showprog.row2.end -borderwidth -1 + pack .showprog.row2.end -side right + + frame .showprog.slider -borderwidth 2 -height 20 -relief sunken + pack .showprog.slider -side top -expand yes -fill both -pady 4 -padx 4 + frame .showprog.slider.inner -borderwidth 2 -relief raised -bg SlateGray1 + + message .showprog.expl -width 400 -text "X" -borderwidth -1 + pack .showprog.expl -side top + frame .showprog.space2 + pack .showprog.space2 -side top -pady 2 + + set wasbusy 0 + query_prog + if { [winfo exists .showprog] != 1 } { + return; + } + handle_trans .showprog . +} + +wm title . "TkScsiformat Version 1.0" + +if { [string compare $whoami root] != 0} then { + frame .warn + frame .warn.h + label .warn.h.l -bitmap info -background pink + message .warn.h.m -aspect 200 -background pink -justify center -text \ + {You need to be root in order to format a SCSI device!} + pack .warn.h.l .warn.h.m -side left -padx 10 + button .warn.quit -text "Quit" -command exit \ + -activeforeground white -activebackground red + pack .warn.h .warn.quit -side top -pady 10 + pack .warn + tkwait window .warn +} + +if { [llength $argv] > 1 } then { + puts stderr "Usage: tk_scsiformat \[device\]" + exit +} + +while { [string compare [lindex $sdevice 0] ""] == 0 } { + frame .select + frame .select.h + label .select.h.l -bitmap questhead -background pink + message .select.h.m -justify center -aspect 500 -background pink -text \ + {Select a SCSI device to low level format.} + frame .select.f + button .select.f.quit -text " Quit " -command exit \ + -activeforeground white -activebackground red + button .select.f.continue -text " Continue " -activebackground green \ + -command {destroy .select} + pack .select.f.continue .select.f.quit -side left -padx 10 + pack .select.h.l .select.h.m -side left -padx 10 + pack .select.h -pady 10 + pack .select + set line [exec /sbin/scsiinfo -l] + set n 0 + foreach x $line { + if {[string first "/dev/sd" "$x"] != 0} continue; + radiobutton .select.$n -text "$x" -width 10 \ + -variable sdevice -value $x -anchor w + pack .select.$n -padx 3 + set n [expr $n+1] + } + if { $n == 0 } then { + .select.f.continue configure -state disabled + } else { + .select.0 select + } + pack .select.f -pady 10 + tkwait window .select +} + +set save_file "/usr/lib/scsi/scsiformat.defs.[file tail $sdevice]" +catch {source $save_file} + +frame .header +label .header.label -bitmap question -bg pink +message .header.message -width 400 -bg pink -text \ + "Scsi Low Level Format - $sdevice." + +pack .header.label .header.message -side left -padx 15 + +frame .f_bot1 +button .f_bot1.copyrights -activebackground green -text "Version Info" \ + -command { copyrights } -width $butwidth +button .f_bot1.filesave -activebackground green -text "Save Defaults" \ + -width $butwidth -command { + global vars2save save_file + set fd [open $save_file w] + foreach var $vars2save { save_var $fd $var } + close $fd + } +button .f_bot1.simple -activebackground green -text "Simple Format Cmd" \ + -command "simple" -width $butwidth +pack .f_bot1.copyrights .f_bot1.filesave .f_bot1.simple \ + -side left -padx 12 -ipadx 2 -ipady 2 -pady 5 + +frame .f_bot2 +button .f_bot2.format -text "Format" -command { query_format } \ + -activebackground yellow -activeforeground black -width $butwidth2 +button .f_bot2.quit -text "Quit" -command { exit } \ + -activebackground red -activeforeground white -width $butwidth2 +pack .f_bot2.format .f_bot2.quit -side left -padx 12 -ipadx 2 -ipady 2 -pady 5 + +frame .f_mand -width $winwidth +checkbutton .f_mand.erase -offvalue "" -onvalue "-e" -variable par_erase -text \ + "Erase Grown Defect List" -width [expr $textwidth - 1] + +label .f_mand.f_inter -text "Interleave (0 for default): " -width $textwidth +entry .f_mand.f_inter.t -width 5 -background white -relief sunken -borderwidth 2 \ + -exportselection 1 -textvariable par_inter +bind_entry .f_mand.f_inter.t +place .f_mand.f_inter.t -in .f_mand.f_inter -anchor e -relx 1.0 -rely 0.5 + +pack .f_mand.erase .f_mand.f_inter -side left -padx 12 -ipadx 2 -ipady 2 + +frame .f_def +button .f_def.defects -text "Add Defects Manually" -activebackground yellow -command enter_defs \ + -width [expr $textwidth] +menubutton .f_def.part -text "Simple Partioning" \ + -width [expr $textwidth] -relief raised -menu .f_def.part.menu \ + -activebackground SlateGray1 +menu .f_def.part.menu -background SlateGray1 -activebackground SlateGray2 +.f_def.part.menu add radiobutton -label "Don't touch Partion Sector" \ + -variable par_partstyle -value "none" +.f_def.part.menu add radiobutton -label "DOS Style Partion" \ + -variable par_partstyle -value "-fdos" +.f_def.part.menu add radiobutton -label "Tight Style Partion (not on Cylinder Boundary)" \ + -variable par_partstyle -value "-ftight" +.f_def.part.menu add separator +.f_def.part.menu add cascade -menu .f_def.part.menu.types -label "Partition type" +.f_def.part.menu add cascade -menu .f_def.part.menu.mkfs -label "Filesystem type" +.f_def.part.menu add separator +.f_def.part.menu add command -command post_geom +.f_def.part.menu add command -command post_partsize + +menu .f_def.part.menu.types -background SlateGray1 -activebackground SlateGray2 +.f_def.part.menu.types add radiobutton -variable par_parttype \ + -label "Linux/Minix" -value "-y81" +.f_def.part.menu.types add radiobutton -variable par_parttype \ + -label "Linux swap" -value "-y82" +.f_def.part.menu.types add radiobutton -variable par_parttype \ + -label "Linux native" -value "-y83" +.f_def.part.menu.types add radiobutton -variable par_parttype \ + -label "DOS 12-bit FAT" -value "-y01" +.f_def.part.menu.types add radiobutton -variable par_parttype \ + -label "DOS 16-bit FAT <32M" -value "-y52" +.f_def.part.menu.types add radiobutton -variable par_parttype \ + -label "DOS 16-bit FAT >=32M" -value "-y64" + +menu .f_def.part.menu.mkfs -background SlateGray1 -activebackground SlateGray2 +for {set i 0} {$i < [llength $par_mkfsnames]} {incr i} { + .f_def.part.menu.mkfs add radiobutton -variable par_mkfs -command change_mkfs \ + -label "[lindex $par_mkfsnames $i]" -value "[lindex $par_mkfscmds $i]" +} +.f_def.part.menu.mkfs add separator +.f_def.part.menu.mkfs add command -command post_mkfs +change_mkfs + +change_partmin +change_geom $par_geomdetect $par_heads $par_sectors + +pack .f_def.defects .f_def.part -side left -padx 12 -ipadx 2 -ipady 2 + +frame .f_opt -width $winwidth -relief raised -borderwidth 2 +checkbutton .f_opt.fov -offvalue "" -onvalue "-o" -variable par_fov -text \ + " Use Custom Format Parameters" -command change_fov -activebackground yellow \ + -width [expr $winwidth - 2] +pack .f_opt.fov -side top -padx 12 -ipadx 2 -ipady 2 -pady 5 +frame .f_opt.col1 +frame .f_opt.col2 + +button .f_opt.col1.init -text "Enter initialization pattern" -activebackground yellow \ + -command enter_init -width [expr $textwidth + 2] +checkbutton .f_opt.col1.disprim -offvalue "" -onvalue "-p" -variable par_disprim -text \ + "Ignore Primary Defects" -width $textwidth +checkbutton .f_opt.col1.nvram -offvalue "" -onvalue "-S" -variable par_nvram -text \ + "Erase MODE SELECT Nvram" -width $textwidth +pack .f_opt.col1.init .f_opt.col1.disprim .f_opt.col1.nvram \ + -side top -padx 12 -ipadx 2 -ipady 2 -pady 5 +checkbutton .f_opt.col2.discert -offvalue "" -onvalue "-c" -variable par_discert -text \ + "Disable Media Certification" -width $textwidth +checkbutton .f_opt.col2.stop -offvalue "" -onvalue "-s" -variable par_stop -text \ + "Stop On Missing Defectlist" -width $textwidth +label .f_opt.col2.dummy +pack .f_opt.col2.discert .f_opt.col2.stop .f_opt.col2.dummy \ + -side top -padx 12 -ipadx 2 -ipady 2 -pady 5 +pack .f_opt.col1 .f_opt.col2 -side left + +frame .f_block +checkbutton .f_block.par_block -offvalue "-b" -onvalue "" -variable par_query -text \ + "Query progress from target" -width $textwidth -command { block_change $par_query } + +label .f_block.f_estim -text "Estimated run time in sec: " -width $textwidth +entry .f_block.f_estim.t -width 5 -background white -relief sunken -borderwidth 2 \ + -exportselection 1 -textvariable par_estim +bind_entry .f_block.f_estim.t + +place .f_block.f_estim.t -in .f_block.f_estim -anchor e -relx 1.0 -rely 0.5 +pack .f_block.par_block .f_block.f_estim -side left -padx 12 -ipadx 2 -ipady 2 +block_change $par_query + +change_fov + +pack .header -padx 10 -pady 10 +pack .f_mand .f_def -pady 4 +pack .f_opt -padx 10 -pady 10 +pack .f_block -padx 10 -pady 4 +pack .f_bot1 .f_bot2 -padx 10 -pady 4 + +show_busy