195950Sphk#!/usr/local/bin/tclsh8.3
295935Sphk# $FreeBSD$
330477Sphk
495950Sphkset fo [open _.html w]
595950Sphk
630477Sphkproc do_file {file} {
730477Sphk	global names ops op
830477Sphk	set f [open $file]
930477Sphk
1030477Sphk	set s 0
1130477Sphk
1230477Sphk	while {[gets $f a] >= 0} {
1330477Sphk		if {$s == 0} {
1430477Sphk			if {[regexp {struct[ 	]*vnodeopv_entry_desc} "$a"]} {
1530477Sphk				regsub {.*vnodeopv_entry_desc[ 	]*} $a {} a
1630477Sphk				regsub {\[.*} $a {} a
1730477Sphk				regsub {_entries} $a {} a
1830477Sphk				set name $a
1930477Sphk				set names($a) 0
2030477Sphk				set s 1
2130477Sphk			}
2230477Sphk			continue
2330477Sphk		}
2430477Sphk		if {$s == 1} {
2530477Sphk			if {[regexp {NULL} "$a"]} {
2630477Sphk				set s 0
2730477Sphk				continue
2830477Sphk			}
2930477Sphk			if {![regexp {vop.*_desc} "$a"]} continue
3030477Sphk			regsub -all {[,&]} $a " " a
3195935Sphk			regsub -all {\(vop_t \*\)} $a " " a
3230477Sphk			set b [lindex $a 0]
3395935Sphk			if {"$b" == "/*"} {
3495935Sphk				set s 0
3595935Sphk				continue
3695935Sphk			}
3730477Sphk			#puts "$name>> [lindex $b 0] >> [lindex $b 3]"
3830477Sphk			set o [lindex $b 0]
3930477Sphk			regsub {_desc} $o "" o
4030477Sphk			set ops($o) 0
4195935Sphk			set op([list $name $o]) [lindex $b 1]
4230477Sphk			continue
4330477Sphk		}
4430477Sphk		puts "$s>> $a"
4530477Sphk	}
4630477Sphk	close $f
4730477Sphk}
4830477Sphk
49109317Sphkset fi [open "|find /usr/src/sys -type f -name *.c -print | xargs grep VNODEOP_SET" ]
5030477Sphkwhile {[gets $fi a] >= 0} {
5130477Sphk	puts stderr $a
5230477Sphk	if {[regexp {#define} $a]} continue
5330477Sphk	if {[regexp {mallocfs} $a]} continue
5430477Sphk	do_file [lindex [split $a :] 0]
5530477Sphk}
5630477Sphkclose $fi
5730477Sphk
5895950Sphkputs $fo {<HTML>
5930477Sphk<HEAD></HEAD><BODY>
6030477Sphk<TABLE BORDER WIDTH="100%" NOSAVE>
6130477Sphk}
6230477Sphk
6330477Sphkset opn [lsort [array names ops]]
6430477Sphkset a [lsort [array names names]]
6530477Sphk
6630477Sphkset tbn default_vnodeop
6730477Sphkforeach i $a {
6830477Sphk	if {$i == "default_vnodeop"} continue
6930477Sphk	lappend tbn $i
7030477Sphk}
7130477Sphk
7230477Sphkforeach i $opn {
7330477Sphk	if {$i == "vop_default"} continue
7430477Sphk	regsub "vop_" $i "" i
7530477Sphk        lappend fl [format "%12s" $i]
7630477Sphk}
7730477Sphk
7830477Sphklappend fl [format "%12s" default]
7930477Sphk
8095950Sphkputs $fo {<TR>}
8195950Sphkputs $fo {<TD>}
8295950Sphkputs $fo {</TD>}
8395950Sphkputs $fo "<TR>"
8495950Sphk        puts $fo "<TD></TD>"
8530477Sphk	foreach j $fl {
8695950Sphk		puts $fo "<TD>"
8730477Sphk
8830477Sphk		for {set i 0} {$i < 12} {incr i} {
8995950Sphk			puts $fo "[string index $j $i]<BR>"
9030477Sphk		}
9195950Sphk		puts $fo "</TD>"
9230477Sphk	}
9395950Sphkputs $fo "</TR>"
9430477Sphk
9530746Sphkset fnames(vop_defaultop) *
9695950Sphk
9795935Sphkset fnames(vop_null) -
9895950Sphkset fnames(vop_ebadf) b
9995950Sphkset fnames(vop_einval) i
10095950Sphkset fnames(vop_enotty) t
10195935Sphkset fnames(vop_panic) !
10295935Sphkset fnames(vfs_cache_lookup) C
10395950Sphkset fnames(vop_eopnotsupp) *
10430746Sphk
10530477Sphkset fn 0
10630477Sphkset nop(aa) 0
10730477Sphkunset nop(aa)
10830477Sphkforeach i $tbn {
10995950Sphk	puts $fo {<TR>}
11095950Sphk	puts $fo "<TD>$i</TD>"
11195935Sphk	set pfx [lindex [split $i _] 0]
11230477Sphk	foreach j $opn {
11330477Sphk		if {$j == "vop_default"} continue
11495935Sphk		set sfx [lindex [split $j _] 1]
11530477Sphk		if {![info exists op([list $i $j])]} {
11695950Sphk			puts $fo "<TD BGCOLOR=\"#d0d0d0\"></TD>"
11730477Sphk			continue
11830477Sphk		}
11930477Sphk		set t $op([list $i $j])
12030477Sphk
12130746Sphk		set c "#00ddd0"
12230746Sphk		if {[info exists fnames($t)]} {
12330746Sphk			set t $fnames($t)
12495935Sphk		} elseif { $t == "${pfx}_${sfx}" } {
12595935Sphk			set t "F"
12695935Sphk		} elseif { $t == "vop_${sfx}" } {
12795935Sphk			set t "V"
12895935Sphk		} elseif { $t == "vop_no${sfx}" } {
12995935Sphk			set t "N"
13095935Sphk		} elseif { $t == "vop_std${sfx}" } {
13195935Sphk			set t "S"
13295935Sphk		} elseif { $sfx == "cachedlookup" && $t == "${pfx}_lookup" } {
13395935Sphk			set t "L"
13430746Sphk		} else {
13530746Sphk			if {![info exists nop($t)]} {
13630746Sphk				incr fn
13730746Sphk				set nop($t) $fn
13830746Sphk				set nfn($fn) $t
13930746Sphk				set use($fn) 0
14030477Sphk			}
14130746Sphk			incr use($nop($t))
14230746Sphk			set t "<FONT SIZE=-1>$nop($t)</FONT>"
14395950Sphk			set c "#ffff00"
14430477Sphk		}
14595950Sphk		puts $fo "<TD BGCOLOR=\"$c\">$t</TD>"
14630477Sphk	}
14730477Sphk	set j vop_default
14830477Sphk	if {![info exists op([list $i $j])]} {
14995950Sphk		puts $fo "<TD></TD>"
15030477Sphk		continue
15130477Sphk	}
15295950Sphk	puts $fo "<TD>$op([list $i $j])</TD>"
15330477Sphk
15495950Sphk	puts $fo "</TR>"
15530477Sphk}
15695950Sphkputs $fo "</TABLE>"
15795950Sphkputs $fo "<HR>"
15895950Sphkputs $fo {<PRE>}
15930746Sphkforeach i [lsort [array names fnames]] {
16095950Sphk	puts $fo [format "%-2s %s" $fnames($i)  $i]
16130746Sphk}
16295950Sphkputs $fo [format "%-2s %s" "F" "<fs>_<vop>"]
16395950Sphkputs $fo [format "%-2s %s" "V" "vop_<vop>"]
16495950Sphkputs $fo [format "%-2s %s" "N" "vop_no<vop>"]
16595950Sphkputs $fo [format "%-2s %s" "S" "vop_std<vop>"]
16695950Sphkputs $fo [format "%-2s %s" "L" "<fs>_lookup"]
16795950Sphkputs $fo {
16830477Sphk</PRE>
16930477Sphk}
17095950Sphkputs $fo "<HR>"
17195950Sphkputs $fo {<TABLE BORDER NOSAVE>}
17230746Sphkset m 8
17330477Sphkfor {set i 1} {$i <= $fn} {incr i $m} {
17495950Sphk	puts $fo "<TR>"
17530477Sphk	for {set j 0} {$j < $m} {incr j} {
17630477Sphk		set k [expr $i + $j]
17730477Sphk		if {$k <= $fn} {
17895950Sphk			#puts $fo "<TD>$k</TD><TD><FONT SIZE=-1>$nfn($k)/$use($k)</FONT></TD>"
17995950Sphk			puts $fo "<TD>$k</TD><TD><FONT SIZE=-1>$nfn($k)</FONT></TD>"
18030477Sphk		}
18130477Sphk	}
18295950Sphk	puts $fo "</TR>"
18330477Sphk}
18495950Sphkputs $fo "</TABLE>"
18530477Sphk
18695950Sphkputs $fo "</TABLE>"
18795950Sphkputs $fo "</BODY>"
18895950Sphkputs $fo "</HTML>"
18995950Sphkforeach i $tbn {
19095950Sphk	if {$i == "default_vnodeop"} {
19195950Sphk		continue
19295950Sphk	}
19395950Sphk	foreach j $opn {
19495950Sphk		set sfx [lindex [split $j _] 1]
19595950Sphk		if {![info exists op([list $i $j])]} {
19695950Sphk			continue
19795950Sphk		}
19895950Sphk		set v $op([list $i $j])
19995950Sphk		if {$v != "vop_std$sfx"} {
20095950Sphk			continue
20195950Sphk		}
20295950Sphk		if {![info exists op([list default_vnodeop $j])]} {
20395950Sphk			continue
20495950Sphk		}
20595950Sphk		if {$op([list default_vnodeop $j]) != $v} {
20695950Sphk			continue
20795950Sphk		}
20895950Sphk		if {$op([list $i vop_default]) != "vop_defaultop"} {
20995950Sphk			continue
21095950Sphk		}
21195950Sphk		puts "Suspect: uses explicit default, $i $j $v $op([list $i vop_default])"
21295950Sphk	}
21395950Sphk}
214