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