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