]>
Commit | Line | Data |
---|---|---|
50e1e10f TT |
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@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 |