You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.8 KiB
118 lines
2.8 KiB
#!/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
|
|
|