119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#!/bin/sh 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#$Id$ 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# Create Adobe-PostScript file that graphically displays the output of 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# dumpe2fs(8). Use "dumpe2fs | dconf" to create a PostScript file on stdout. 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# Developed and tested for Linux 1.0. 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# Copyright (c) 1994 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# Ulrich Windl 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# ALte Regensburger Strasse 11a 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# D-93149 Nittenau, Germany 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# <Ulrich.Windl@rz.uni-regensburg.de> 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectSELF=`basename $0` 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectAWKFILE=/tmp/${SELF}.awk 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectTEMPFILE=/tmp/${SELF}.tmp 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectecho ' 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectBEGIN { 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project print "B" 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Inode count:/ { 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ic=$3; next 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Block count:/ { 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project bc=$3; next 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^First block:/ { 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fb=$3; next 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Block size:/ { 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project bs=$3; next 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Blocks per group:/ { 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project bpg=$4 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("BC %d\n", bpg) 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("GC %d\n", (bc + bpg - 1) / bpg) 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Inodes per group:/ { 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ipg=$4; next 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Last write time:/ { 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project lwtime=$0; gsub("Last write time:[ ]+", "", lwtime) 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("T %s\n", lwtime) 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^Group [0-9]+:/ { 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group=$2; gsub(":", "", group) 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project block="" 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_start=group*bpg+fb 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_end=group_start+bpg 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("G %d : %d - %d\n", group, group_start, group_end) 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ ]+Free blocks: / { 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project for ( i=3; i < NF; ++i ) { 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project block=$i; gsub(",", "", block) 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ( index(block, "-") == 0 ) block=block "-" block 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pos=index(block, "-") 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("FB %d-%d\n", 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project substr(block, 0, pos) - group_start, 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project substr(block, pos + 1) - group_start) 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ( block == "" ) printf("Group %d is full\n", group) 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project print "----" 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectEND { 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("E %s\n", lwtime) 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}' >$AWKFILE 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectawk -f $AWKFILE $* >$TEMPFILE 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectecho ' 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectBEGIN { 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%%!PS-Adobe\n") 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%%%%BoundingBox: 0 0 1 1\n") 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("/rect {/y2 exch def /x2 exch def /y1 exch def /x1 exch def\n") 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf(" newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto\n") 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf(" x1 y2 lineto closepath} def\n") 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("/fb {rect gsave 1.0 setgray fill grestore} def\n") 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("/dg {rect gsave gsave 0.0 setgray fill grestore\n") 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf(" 0.5 setgray stroke grestore} def\n") 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("/textxy {moveto show} bind def\n") 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("0.0001 setlinewidth\n") 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project$1 == "GC" && NF == 2 { 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project number_of_groups=$2 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("/Times-Roman findfont %g scalefont setfont\n", 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1.0 / number_of_groups) 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project$1 == "BC" && NF == 2 { 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project blocks_per_group=$2; next 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project$1 == "T" && NF > 1 { 9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("(%s) %g %g textxy\n", 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project substr($0, 2), 0, 1.02) 9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project$1 == "G" && NF == 6 && $3 == ":" && $5 == "-" { 9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_index=$2 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project gs=$4 9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ge=$6 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project height=1.0 / number_of_groups 10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project vstart=group_index * height 10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%% group %d of %d:\n0 %g 1 %g dg\n", 10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project group_index, number_of_groups, vstart, vstart + height) 10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("(Group %s) 1.02 %g textxy\n", group_index, vstart) 10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project$1 == "FB" && NF == 2 { 10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pos = index($2, "-") 10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%% hole %s\n%g %g %g %g fb\n", 11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $2, substr($2, 0, pos) / blocks_per_group, vstart, 11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (substr($2, pos + 1) + 1) / blocks_per_group, vstart + height) 11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next 11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectEND { 11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project printf("%%%%EOF\n") 11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project' >$AWKFILE 11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectawk -f $AWKFILE $TEMPFILE 119