This file is indexed.

/usr/lib/scsi/overview is in scsitools 0.12-3ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
#!/usr/bin/wish -f
# Copyright 1994 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.

set sdevice [lindex $argv 0]

set spindle_x 10
set disk_radius 400
set canvas_width 600
set canvas_height 350
# One less disk is actually shown s.t. the user is able to guess that some are missing
set max_disks 12
set disk_y 40
set disk_skip 30
set ratio 5

#Number of colors in spindle_colors, Note: Outermost color choosen is at index 0
set num_color 6
set spindle_colors {firebrick2 DarkOrange1 yellow1 green1 blue1 VioletRed2}
#Same but for active buttons
set spindle_colors_act {firebrick3 DarkOrange2 yellow2 green2 blue2 VioletRed3}
#Same but for texts
set spindle_colors_for {white white black black white white}

proc set_notch { { notch } } {
  global pages_sup sdevice
  if { ($pages_sup & (1 << 12)) } then {
     set line [ exec scsiinfo -nX $sdevice ]
     set line [ lreplace $line 3 3 $notch ]
# Use /bin/sh to cut $line in multiple pieces
     set line [ exec sh -c "scsiinfo -nXR $sdevice $line" ]
#    exec scsiinfo -nX $sdevice >/dev/tty
  }
}

proc arrow_horz { {y} {startx} {endx} {text} } {
  set center [expr ($endx+$startx)/2]
  set textid [.fra.c create text $center $y -text $text -justify center]
  set bbox [.fra.c bbox $textid]
  set ltext [lindex $bbox 0]
  set rtext [lindex $bbox 2]
  .fra.c create line $startx $y $ltext $y -arrow first 
  .fra.c create line $rtext $y $endx $y -arrow last 
  set yl [expr $y + 4]
  set yh [expr $y - 3]
  .fra.c create line $startx $yl $startx $yh
  .fra.c create line $endx $yl $endx $yh
}

proc arrow_vert { {x} {starty} {endy} {text} } {
  set center [expr ($endy+$starty)/2]
  set textid [.fra.c create text $x $center -text $text -justify center]
  set bbox [.fra.c bbox $textid]
  set utext [lindex $bbox 1]
  set dtext [lindex $bbox 3]
  .fra.c create line $x $starty $x $utext -arrow first 
  .fra.c create line $x $dtext $x $endy -arrow last 
  set xl [expr $x + 4]
  set xh [expr $x - 3]
  .fra.c create line $xl $starty $xh $starty
  .fra.c create line $xl $endy $xh $endy
}

proc draw_disk { {y} } {
  global spindle_x disk_radius spindle_colors num_color
  global not_drv not_num not_start not_end ratio

  if ($not_drv) {
    set maxsect [lindex $not_end 0]
    set color [lindex $spindle_colors 0]
    set out_color black
    for { set i 1 } {[expr $i <= $not_num]} { set i [expr $i+1] } {
      set radi [expr (($maxsect-[lindex $not_start $i])*$disk_radius)/$maxsect]
      .fra.c create oval [expr $spindle_x-$radi] [expr $y-$radi/$ratio]\
           [expr $spindle_x+$radi] [expr $y+$radi/$ratio] -fill $color -outline $out_color
      set color [lindex $spindle_colors [expr $i % $num_color]]
      set out_color $color
    }
  } else {
    .fra.c create oval [expr $spindle_x-$disk_radius] [expr $y-$disk_radius/$ratio]\
           [expr $spindle_x+$disk_radius] [expr $y+$disk_radius/$ratio] -fill DarkOrange -outline black
  }
}

proc cyl_mark { {cyl} {text} {offset 14} } {
  global spindle_x disk_radius cyls disk_y

  if ([expr $cyls*$cyl!=0]) {
    vert_mark [expr ($disk_radius*$cyl)/$cyls] "$text" $offset
  }
}

proc vert_mark { {xoffset} {text} {offset 25} } {
  global spindle_x disk_radius disk_y

  set destx [expr $xoffset+$spindle_x]
  .fra.c create text $destx [expr $disk_y-$offset]  -anchor s -text "$text" -justify center
  .fra.c create line $destx [expr $disk_y-$offset] $destx [expr $disk_y-7] -arrow last
}

proc show_help {} {
.but.help configure -state disabled

toplevel .help
frame .help.h
label .help.h.info -bitmap info -bg pink
message .help.h.message -aspect 200 -justify left -bg pink -text \
"Well, since this is a tool for experienced users there is not much to say here.\
Most things should explain themself. This page is most useful for notched disk drives.\
Then it will show a few things from several notches at one glance and allow to select the\
notched pages immediately for each notch. The middle button in the top row gives access\
to all pages. Notched pages are marked with a SlateGrey background. All pages are accessed\
with active notch 0.
The numbers on the notch buttons correspond to the alternating sectors for this notch.\
These are sectors that are used for automatic reallocation of bad sectors. The first number\
is the number of tracks that define a zone (0 if there is only one zone) and then the number\
of alternate sectors per zone, of alternate tracks per zone, and alternate tracks per lun\
each seperated by dashes.
Note that none of values shown is reread when you change something\
from this window.
If needed scrollbars will appear to show the whole drawing."
button .help.quit -text "Dismiss" -command "destroy .help"\
  -activeforeground white -activebackground red
pack .help.h.info .help.h.message -padx 10 -side left
pack .help.h -pady 10
pack .help.quit -pady 10 -ipadx 10

wm geometry .help +300+300
wm title .help "Quickhelp for Geometry Overview"
tkwait window .help
.but.help configure -state normal
}

proc notch_menu {number} {
set_notch $number
.not_men.headline configure -text "Notch #$number"
.not_men post 300 300
}

proc add_button {mask backmask index menu text command} {
global sdevice

if { ($mask & (1<<$index)) } then {
  if { ($backmask & (1<<$index)) } then {
    $menu add command -label "$text" -background SlateGray1 -activebackground SlateGray2\
      -command "exec /usr/lib/scsi/$command $sdevice"
  } else {
    $menu add command -label "$text"\
      -command "exec /usr/lib/scsi/$command $sdevice"
  }
}
}

proc add_items {menu mask {backmask 0}} {
add_button $mask $backmask 8 $menu "Cache Control Page" cache
add_button $mask $backmask 3 $menu "Format Device Page" format
add_button $mask $backmask 10 $menu "Control Mode Page" control
add_button $mask $backmask 1 $menu "Read-Write Error Recovery Page" error
add_button $mask $backmask 7 $menu "Verify Error Recovery Page" verify
add_button $mask $backmask 2 $menu "Disconnect/Reconnect Page" disconnect
add_button $mask $backmask 4 $menu "Rigid Disk Geometry Page" rigid
add_button $mask $backmask 9 $menu "Peripheral Device Page" peripheral
add_button $mask $backmask 12 $menu "Notch Page" notch
}

set line [ exec scsiinfo -XL $sdevice ]
set pages_sup [lindex $line 0]
set pages_notch [lindex $line 1]

#Force notch to 0 if possible.
set_notch 0

frame .h
label .h.info -bitmap hourglass -bg pink
message .h.message -width 300 -justify center -bg pink -text \
	"Analyzing device - $sdevice."

pack .h.info .h.message -padx 10 -side left

frame .but
button .but.help -text "Quick Help" \
	-activebackground green -command show_help
menubutton .but.base -relief raised\
  -text "Unnotched or Notch 0 pages" -menu .but.base.menu
menu .but.base.menu -postcommand "set_notch 0"
add_items .but.base.menu $pages_sup $pages_notch

button .but.quit -text Quit \
	-activeforeground white -activebackground red -command exit
pack .h .but -pady 10
pack .but.help .but.base .but.quit -side left -fill x -ipadx 20 -ipady 1 -padx 20 -pady 2
frame .fra 
canvas .fra.c -relief raised -width $canvas_width -height $canvas_height
pack .fra.c -expand yes -fill both
pack .fra -fill both
update

if { ($pages_sup & (1 << 4)) } then {
  set line [ exec scsiinfo -gX $sdevice ]
} else {
  set line {0 0 0 0 0 0 0 0 0}
}
set cyls [lindex $line 0]
set head [lindex $line 1]
set writepre [lindex $line 2]
set reduccur [lindex $line 3]
set land [lindex $line 5]
set rotrate [lindex $line 8]

if { ($pages_sup & (1 << 3)) } then {
  set line [ exec scsiinfo -fX $sdevice ]
} else {
  set line {0 0 0 0 0  0 0 0 0 0  0 0 0}
}

set trperzone [lindex $line 4]
set altern "[lindex $line 5]-[lindex $line 6]-[lindex $line 7]"
set bytesps [lindex $line 9]
set sectptr [lindex $line 8]

if { ($pages_sup & (1 << 12)) } then {
  set line [ exec scsiinfo -nX $sdevice ]
  set not_drv [lindex $line 0]
  set not_log [lindex $line 1]
  set not_num [lindex $line 2]
  set not_start [lindex $line 4]
  set not_end [lindex $line 5]

  for {set i 1} {$i <= $not_num} {set i [expr $i + 1] } {
    set_notch $i
    set line [ exec scsiinfo -nX $sdevice ]
    lappend not_start [lindex $line 4]
    lappend not_end [lindex $line 5]
    if { ($pages_notch & (1<<3)) } then {
      set line [ exec scsiinfo -fX $sdevice ]
      lappend altern "[lindex $line 5]-[lindex $line 6]-[lindex $line 7]"
      lappend sectptr [lindex $line 8]
      lappend trperzone [lindex $line 4]
    }
  }
  set_notch 0
} else {
  set not_drv 0
  set not_log 0
  set not_num 1
  set not_start {}
  set not_end {}
}

if [expr $head == 0] {
  draw_disk $disk_y
} else {
  set disco [expr (($head + 1)/2) - 1]
  if { $disco >= $max_disks } then { set disco [expr $max_disks-1] }
  if { $disco < 1 } then { set disco 1 }
  for { set i $disco } {[expr $i >= 0]} { set i [expr $i-1] } {
    draw_disk [expr $disk_y+$i*$disk_skip]
  }
  set basey [expr $disk_radius/$ratio+$disk_y]
  arrow_vert [expr $spindle_x+30] $basey [expr $basey+$disco*$disk_skip] "$head heads"
}

.fra.c create line $spindle_x $disk_y $spindle_x [expr $disk_y - 20] -width 7
.fra.c create oval [expr $spindle_x-3] [expr $disk_y-2] [expr $spindle_x+3] [expr $disk_y+2]\
   -fill black
.fra.c create oval [expr $spindle_x-3] [expr $disk_y-22] [expr $spindle_x+3] [expr $disk_y-18]\
   -fill black

if [expr $cyls != 0] {
  arrow_horz $disk_y [expr $spindle_x+3] [expr $spindle_x+$disk_radius] "$cyls cylinders"
}

if [expr $rotrate != 0] {
  .fra.c create arc [expr $spindle_x-44] [expr $disk_y-44/$ratio]\
           [expr $spindle_x+44] [expr $disk_y+44/$ratio]\
           -width 3 -start -60 -extent 330 -style arc -fill black
  .fra.c create line [expr $spindle_x-5] [expr $disk_y+44/$ratio]\
           [expr $spindle_x+5] [expr $disk_y+44/$ratio] -arrow last -width 3
  .fra.c create text [expr $spindle_x+5] [expr $disk_y+15] -anchor w -justify center\
           -text "$rotrate rotations per minute"
}

frame .fra.c.buttons

if ($not_drv) {
  for { set i $not_num } {[expr $i >= 1]} { set i [expr $i-1] } {
    set maxsect [lindex $not_end 0]
    set radi [expr ((2*$maxsect-[lindex $not_end $i]-[lindex $not_start $i])\
      *$disk_radius)/(2*$maxsect)]
    vert_mark $radi [lindex $sectptr $i] 
#While looping through the notches create notch_buttons
    set backcolor [lindex $spindle_colors [expr ($i-1)%$num_color]]
    set actcolor [lindex $spindle_colors_act [expr ($i-1)%$num_color]]
    set forecolor [lindex $spindle_colors_for [expr ($i-1)%$num_color]]

    menubutton .fra.c.buttons.$i -background $backcolor -activebackground $actcolor\
        -relief raised -text "Notch #$i: [lindex $trperzone $i], [lindex $altern $i]"\
        -menu .fra.c.buttons.$i.menu -foreground $forecolor -activeforeground $forecolor
    menu .fra.c.buttons.$i.menu -postcommand "set_notch $i" -background $backcolor\
        -activebackground $actcolor -disabledforeground $forecolor -foreground $forecolor\
        -activeforeground $forecolor
    .fra.c.buttons.$i.menu add command -label "Start: [lindex $not_start $i]" -state disabled
    .fra.c.buttons.$i.menu add command -label "End: [lindex $not_end $i]" -state disabled
    add_items .fra.c.buttons.$i.menu $pages_notch
    pack .fra.c.buttons.$i -side bottom -fill x -padx 10
  }
  .fra.c create text [expr $spindle_x+$disk_radius] [expr $disk_y-25] -text "- Sectors per track"\
    -justify left -anchor sw
} else {
  vert_mark [expr $disk_radius/2] "$sectptr sectors per track"
}

cyl_mark $writepre "Write precomp.($writepre)"
cyl_mark $reduccur "Red. current($reduccur)"
cyl_mark $land "Landing zone($land)"

.fra.c create window [expr $disk_radius+15] $disk_y -window .fra.c.buttons -anchor nw
.fra.c addtag alltag all
set bb [ .fra.c bbox alltag ]

#The following are mostly needed for the window item in the canvas.
#they are fully experimental and probably only needed due to a bug in the
#bbox canvas code for windows.. anyway nothing serious can go wrong..

set xbound [expr [lindex $bb 2]+50]
set ybound [expr [lindex $bb 3]+5]
set packed 1

if {( $ybound+20 > $canvas_height )} then {
  if {( $packed )} then {
    pack forget .fra.c
    set packed 0
  }
  .fra.c configure -scrollregion "0 0 $xbound $ybound" -yscroll ".fra.yscroll set"
  scrollbar .fra.yscroll -relief sunken -command ".fra.c yview"
  pack .fra.yscroll -side right -fill y
}
if {( $xbound+20 > $canvas_width )} then {
  if {( $packed )} then {
    pack forget .fra.c
    set packed 0
  }
  .fra.c configure -scrollregion "0 0 $xbound $ybound" -xscroll ".fra.hscroll set"
  scrollbar .fra.hscroll -orient horiz -relief sunken -command ".fra.c xview"
  pack .fra.hscroll -side bottom -fill x
}
if {( !$packed )} then {
  pack .fra.c -in .fra -expand yes -fill both
  set packed 1
}

.h.info configure -bitmap info
.h.message configure -text "Disk Drive Geometry Overview - $sdevice."