#!/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