1 #!/bin/sh 2 #$Id$ 3 # Create Adobe-PostScript file that graphically displays the output of 4 # dumpe2fs(8). Use "dumpe2fs | dconf" to create a PostScript file on stdout. 5 # Developed and tested for Linux 1.0. 6 # Copyright (c) 1994 7 # Ulrich Windl 8 # ALte Regensburger Strasse 11a 9 # D-93149 Nittenau, Germany 10 # <Ulrich.Windl (at] rz.uni-regensburg.de> 11 SELF=`basename $0` 12 AWKFILE=/tmp/${SELF}.awk 13 TEMPFILE=/tmp/${SELF}.tmp 14 echo ' 15 BEGIN { 16 print "B" 17 } 18 /^Inode count:/ { 19 ic=$3; next 20 } 21 /^Block count:/ { 22 bc=$3; next 23 } 24 /^First block:/ { 25 fb=$3; next 26 } 27 /^Block size:/ { 28 bs=$3; next 29 } 30 /^Blocks per group:/ { 31 bpg=$4 32 printf("BC %d\n", bpg) 33 printf("GC %d\n", (bc + bpg - 1) / bpg) 34 next 35 } 36 /^Inodes per group:/ { 37 ipg=$4; next 38 } 39 /^Last write time:/ { 40 lwtime=$0; gsub("Last write time:[ ]+", "", lwtime) 41 printf("T %s\n", lwtime) 42 next 43 } 44 /^Group [0-9]+:/ { 45 group=$2; gsub(":", "", group) 46 block="" 47 group_start=group*bpg+fb 48 group_end=group_start+bpg 49 printf("G %d : %d - %d\n", group, group_start, group_end) 50 next 51 } 52 /^[ ]+Free blocks: / { 53 for ( i=3; i < NF; ++i ) { 54 block=$i; gsub(",", "", block) 55 if ( index(block, "-") == 0 ) block=block "-" block 56 pos=index(block, "-") 57 printf("FB %d-%d\n", 58 substr(block, 0, pos) - group_start, 59 substr(block, pos + 1) - group_start) 60 } 61 if ( block == "" ) printf("Group %d is full\n", group) 62 print "----" 63 next 64 } 65 END { 66 printf("E %s\n", lwtime) 67 }' >$AWKFILE 68 awk -f $AWKFILE $* >$TEMPFILE 69 echo ' 70 BEGIN { 71 printf("%%!PS-Adobe\n") 72 printf("%%%%BoundingBox: 0 0 1 1\n") 73 printf("/rect {/y2 exch def /x2 exch def /y1 exch def /x1 exch def\n") 74 printf(" newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto\n") 75 printf(" x1 y2 lineto closepath} def\n") 76 printf("/fb {rect gsave 1.0 setgray fill grestore} def\n") 77 printf("/dg {rect gsave gsave 0.0 setgray fill grestore\n") 78 printf(" 0.5 setgray stroke grestore} def\n") 79 printf("/textxy {moveto show} bind def\n") 80 printf("0.0001 setlinewidth\n") 81 } 82 $1 == "GC" && NF == 2 { 83 number_of_groups=$2 84 printf("/Times-Roman findfont %g scalefont setfont\n", 85 1.0 / number_of_groups) 86 next 87 } 88 $1 == "BC" && NF == 2 { 89 blocks_per_group=$2; next 90 } 91 $1 == "T" && NF > 1 { 92 printf("(%s) %g %g textxy\n", 93 substr($0, 2), 0, 1.02) 94 next 95 } 96 $1 == "G" && NF == 6 && $3 == ":" && $5 == "-" { 97 group_index=$2 98 gs=$4 99 ge=$6 100 height=1.0 / number_of_groups 101 vstart=group_index * height 102 printf("%% group %d of %d:\n0 %g 1 %g dg\n", 103 group_index, number_of_groups, vstart, vstart + height) 104 printf("(Group %s) 1.02 %g textxy\n", group_index, vstart) 105 next 106 } 107 $1 == "FB" && NF == 2 { 108 pos = index($2, "-") 109 printf("%% hole %s\n%g %g %g %g fb\n", 110 $2, substr($2, 0, pos) / blocks_per_group, vstart, 111 (substr($2, pos + 1) + 1) / blocks_per_group, vstart + height) 112 next 113 } 114 END { 115 printf("%%%%EOF\n") 116 } 117 ' >$AWKFILE 118 awk -f $AWKFILE $TEMPFILE 119