--- Begin Message ---
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-devel@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 (eowmob@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 (eowmob@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
--- End Message ---