xref: /aosp_15_r20/external/e2fsprogs/contrib/dconf (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
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