119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
#!/bin/sh
 | 
						|
#$Id$
 | 
						|
# Create Adobe-PostScript file that graphically displays the output of
 | 
						|
# dumpe2fs(8). Use "dumpe2fs | dconf" to create a PostScript file on stdout.
 | 
						|
# Developed and tested for Linux 1.0.
 | 
						|
# Copyright (c) 1994
 | 
						|
# Ulrich Windl
 | 
						|
# ALte Regensburger Strasse 11a
 | 
						|
# D-93149 Nittenau, Germany
 | 
						|
# <Ulrich.Windl@rz.uni-regensburg.de>
 | 
						|
SELF=`basename $0`
 | 
						|
AWKFILE=/tmp/${SELF}.awk
 | 
						|
TEMPFILE=/tmp/${SELF}.tmp
 | 
						|
echo '
 | 
						|
BEGIN {
 | 
						|
	print "B"
 | 
						|
}
 | 
						|
/^Inode count:/ {
 | 
						|
	ic=$3; next
 | 
						|
}
 | 
						|
/^Block count:/ {
 | 
						|
	bc=$3; next
 | 
						|
}
 | 
						|
/^First block:/ {
 | 
						|
	fb=$3; next
 | 
						|
}
 | 
						|
/^Block size:/ {
 | 
						|
	bs=$3; next
 | 
						|
}
 | 
						|
/^Blocks per group:/ {
 | 
						|
	bpg=$4
 | 
						|
	printf("BC %d\n", bpg)
 | 
						|
	printf("GC %d\n", (bc + bpg - 1) / bpg)
 | 
						|
	next
 | 
						|
}
 | 
						|
/^Inodes per group:/ {
 | 
						|
	ipg=$4; next
 | 
						|
}
 | 
						|
/^Last write time:/ {
 | 
						|
	lwtime=$0; gsub("Last write time:[ ]+", "", lwtime)
 | 
						|
	printf("T %s\n", lwtime)
 | 
						|
	next
 | 
						|
}
 | 
						|
/^Group [0-9]+:/ {
 | 
						|
	group=$2; gsub(":", "", group)
 | 
						|
	block=""
 | 
						|
	group_start=group*bpg+fb
 | 
						|
	group_end=group_start+bpg
 | 
						|
	printf("G %d : %d - %d\n", group, group_start, group_end)
 | 
						|
	next
 | 
						|
}
 | 
						|
/^[ ]+Free blocks: / {
 | 
						|
	for ( i=3; i < NF; ++i ) {
 | 
						|
		block=$i; gsub(",", "", block)
 | 
						|
		if ( index(block, "-") == 0 ) block=block "-" block
 | 
						|
		pos=index(block, "-")
 | 
						|
		printf("FB %d-%d\n",
 | 
						|
		       substr(block, 0, pos) - group_start,
 | 
						|
		       substr(block, pos + 1) - group_start)
 | 
						|
	}
 | 
						|
	if ( block == "" ) printf("Group %d is full\n", group)
 | 
						|
	print "----"
 | 
						|
	next
 | 
						|
}
 | 
						|
END {
 | 
						|
	printf("E %s\n", lwtime)
 | 
						|
}' >$AWKFILE
 | 
						|
awk -f $AWKFILE $* >$TEMPFILE
 | 
						|
echo '
 | 
						|
BEGIN {
 | 
						|
        printf("%%!PS-Adobe\n")
 | 
						|
        printf("%%%%BoundingBox: 0 0 1 1\n")
 | 
						|
	printf("/rect {/y2 exch def /x2 exch def /y1 exch def /x1 exch def\n")
 | 
						|
	printf("       newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto\n")
 | 
						|
	printf("       x1 y2 lineto closepath} def\n")
 | 
						|
	printf("/fb {rect gsave 1.0 setgray fill grestore} def\n")
 | 
						|
	printf("/dg {rect gsave gsave 0.0 setgray fill grestore\n")
 | 
						|
	printf("     0.5 setgray stroke grestore} def\n")
 | 
						|
	printf("/textxy {moveto show} bind def\n")
 | 
						|
	printf("0.0001 setlinewidth\n")
 | 
						|
}
 | 
						|
$1 == "GC" && NF == 2 {
 | 
						|
	number_of_groups=$2
 | 
						|
	printf("/Times-Roman findfont %g scalefont setfont\n",
 | 
						|
	       1.0 / number_of_groups)
 | 
						|
	next
 | 
						|
}
 | 
						|
$1 == "BC" && NF == 2 {
 | 
						|
	blocks_per_group=$2; next
 | 
						|
}
 | 
						|
$1 == "T" && NF > 1 {
 | 
						|
	printf("(%s) %g %g textxy\n",
 | 
						|
	       substr($0, 2), 0, 1.02)
 | 
						|
	next
 | 
						|
}
 | 
						|
$1 == "G" && NF == 6 && $3 == ":" && $5 == "-" {
 | 
						|
	group_index=$2
 | 
						|
	gs=$4
 | 
						|
	ge=$6
 | 
						|
	height=1.0 / number_of_groups
 | 
						|
	vstart=group_index * height
 | 
						|
	printf("%% group %d of %d:\n0 %g 1 %g dg\n",
 | 
						|
	       group_index, number_of_groups, vstart, vstart + height)
 | 
						|
	printf("(Group %s) 1.02 %g textxy\n", group_index, vstart)
 | 
						|
	next
 | 
						|
}
 | 
						|
$1 == "FB" && NF == 2 {
 | 
						|
	pos = index($2, "-")
 | 
						|
	printf("%% hole %s\n%g %g %g %g fb\n",
 | 
						|
	       $2, substr($2, 0, pos) / blocks_per_group, vstart,
 | 
						|
	       (substr($2, pos + 1) + 1) / blocks_per_group, vstart + height)
 | 
						|
	next
 | 
						|
}
 | 
						|
END {
 | 
						|
    	printf("%%%%EOF\n")
 | 
						|
}
 | 
						|
' >$AWKFILE
 | 
						|
awk -f $AWKFILE $TEMPFILE
 |