1 | #!/usr/perl5/bin/perl -w
|
---|
2 | #
|
---|
3 | # CDDL HEADER START
|
---|
4 | #
|
---|
5 | # The contents of this file are subject to the terms of the
|
---|
6 | # Common Development and Distribution License (the "License").
|
---|
7 | # You may not use this file except in compliance with the License.
|
---|
8 | #
|
---|
9 | # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
---|
10 | # or http://www.opensolaris.org/os/licensing.
|
---|
11 | # See the License for the specific language governing permissions
|
---|
12 | # and limitations under the License.
|
---|
13 | #
|
---|
14 | # When distributing Covered Code, include this CDDL HEADER in each
|
---|
15 | # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
---|
16 | # If applicable, add the following below this CDDL HEADER, with the
|
---|
17 | # fields enclosed by brackets "[]" replaced with your own identifying
|
---|
18 | # information: Portions Copyright [yyyy] [name of copyright owner]
|
---|
19 | #
|
---|
20 | # CDDL HEADER END
|
---|
21 | #
|
---|
22 | #
|
---|
23 | # Copyright 2008 Sun Microsystems, Inc. All rights reserved.
|
---|
24 | # Use is subject to license terms.
|
---|
25 | #
|
---|
26 | # ident "%Z%%M% %I% %E% SMI"
|
---|
27 |
|
---|
28 | require 5.005;
|
---|
29 |
|
---|
30 | use strict;
|
---|
31 | use warnings;
|
---|
32 | use Time::localtime;
|
---|
33 | use File::Basename;
|
---|
34 |
|
---|
35 | our ($cmd, $chapfile, $htmlfile, $dtrace_url, %chaps);
|
---|
36 |
|
---|
37 | $cmd = "mkdemo";
|
---|
38 | $chapfile = "chapters";
|
---|
39 | $htmlfile = "index.html";
|
---|
40 | $dtrace_url = "http://www.sun.com/bigadmin/content/dtrace";
|
---|
41 |
|
---|
42 | sub chaps_read {
|
---|
43 | my $fatal;
|
---|
44 | my %hash;
|
---|
45 |
|
---|
46 | open(CHAPS, "$chapfile");
|
---|
47 |
|
---|
48 | while (<CHAPS>) {
|
---|
49 | my $field;
|
---|
50 | my $value;
|
---|
51 |
|
---|
52 | chop;
|
---|
53 |
|
---|
54 | if (/^#/) {
|
---|
55 | next;
|
---|
56 | }
|
---|
57 |
|
---|
58 | if (!/:/) {
|
---|
59 | if (exists $hash{'name'}) {
|
---|
60 | if (exists $chaps{$hash{'name'}}) {
|
---|
61 | print "$cmd: chapter $hash{'name'} ";
|
---|
62 | print "has two entries.\n";
|
---|
63 | $fatal = 1;
|
---|
64 | }
|
---|
65 |
|
---|
66 | $chaps{$hash{'name'}} = { %hash };
|
---|
67 | %hash = ();
|
---|
68 | next;
|
---|
69 | }
|
---|
70 |
|
---|
71 | %hash = ();
|
---|
72 | next;
|
---|
73 | }
|
---|
74 |
|
---|
75 | ($field, $value) = split /:\s*/, $_, 2;
|
---|
76 |
|
---|
77 | if ($field eq "descr") {
|
---|
78 | $value .= " ";
|
---|
79 | }
|
---|
80 |
|
---|
81 | $hash{$field} .= $value;
|
---|
82 | }
|
---|
83 |
|
---|
84 | if ($fatal) {
|
---|
85 | print "$cmd: fatal errors; cannot proceed.\n";
|
---|
86 | exit;
|
---|
87 | }
|
---|
88 |
|
---|
89 | close (CHAPS);
|
---|
90 | }
|
---|
91 |
|
---|
92 | sub chaps_ascending {
|
---|
93 | $chaps{$a}{index} <=> $chaps{$b}{index};
|
---|
94 | }
|
---|
95 |
|
---|
96 | sub demo_process {
|
---|
97 | my $chap = $_[0];
|
---|
98 | my $demo = $_[1];
|
---|
99 | my $year = localtime->year() + 1900;
|
---|
100 |
|
---|
101 | open DEMO, "<$chap/$demo" or die "Can't open demo $chap/$demo";
|
---|
102 | open OUT, ">$demo" or die "Can't open $demo";
|
---|
103 |
|
---|
104 | while (<DEMO>) {
|
---|
105 | print OUT $_;
|
---|
106 |
|
---|
107 | if (/Use is subject to license terms/) {
|
---|
108 | print OUT <<EOF;
|
---|
109 | *
|
---|
110 | * This D script is used as an example in the Solaris Dynamic Tracing Guide
|
---|
111 | * wiki in the \"$chaps{$chap}{title}\" Chapter.
|
---|
112 | *
|
---|
113 | * The full text of the this chapter may be found here:
|
---|
114 | *
|
---|
115 | * $chaps{$chap}{url}
|
---|
116 | *
|
---|
117 | * On machines that have DTrace installed, this script is available as
|
---|
118 | * $demo in /usr/demo/dtrace, a directory that contains all D scripts
|
---|
119 | * used in the Solaris Dynamic Tracing Guide. A table of the scripts and their
|
---|
120 | * corresponding chapters may be found here:
|
---|
121 | *
|
---|
122 | * file:///usr/demo/dtrace/index.html
|
---|
123 | EOF
|
---|
124 | }
|
---|
125 | }
|
---|
126 |
|
---|
127 | close (DEMO);
|
---|
128 | close (OUT);
|
---|
129 | }
|
---|
130 |
|
---|
131 | sub demo_find {
|
---|
132 | my $demo = $_[0];
|
---|
133 | my $chap;
|
---|
134 |
|
---|
135 | foreach $chap (keys %chaps) {
|
---|
136 | if (!stat("$chap/$demo")) {
|
---|
137 | next;
|
---|
138 | }
|
---|
139 |
|
---|
140 | demo_process($chap, $demo);
|
---|
141 | return;
|
---|
142 | }
|
---|
143 |
|
---|
144 | die "Couldn't find $demo in any chapter";
|
---|
145 | }
|
---|
146 |
|
---|
147 | sub chaps_process {
|
---|
148 | my $outfile = $_[0];
|
---|
149 | my $chap;
|
---|
150 |
|
---|
151 | open HTML, ">$outfile" or die "Can't open $outfile.";
|
---|
152 |
|
---|
153 | print HTML "<html>\n<head>\n";
|
---|
154 | print HTML "<title>Example DTrace Scripts</title>\n";
|
---|
155 | print HTML "</head>\n<body bgcolor=\"#ffffff\">\n";
|
---|
156 |
|
---|
157 | print HTML "<table width=\"85%\" border=0 align=\"center\"><tr><td>";
|
---|
158 | print HTML "<h2>DTrace Examples</h2>\n";
|
---|
159 |
|
---|
160 | print HTML "<hr><p>\n";
|
---|
161 | print HTML "Here are the <a href=\"$dtrace_url\">DTrace</a> scripts\n";
|
---|
162 | print HTML "that are used as examples in the\n";
|
---|
163 | print HTML "<a href=\"$chaps{book}{url}\">$chaps{book}{title}</a>. ";
|
---|
164 | print HTML "For more information on any one script, follow the link\n";
|
---|
165 | print HTML "to its corresponding chapter.\n";
|
---|
166 | print HTML "<p>\n<hr><p>\n";
|
---|
167 |
|
---|
168 | print HTML "<left><table width=\"85%\" border=1 cellpadding=4 ";
|
---|
169 | print HTML "cellspacing=0 align=\"center\" bgcolor=\"#ffffff\">\n";
|
---|
170 | print HTML "<tr bgcolor=\"#5882a1\"><td width=\"50%\">";
|
---|
171 | print HTML "<font color=\"#ffffff\"><b>Chapter</b></td></font>\n";
|
---|
172 | print HTML "<td><font color=\"#ffffff\"><b>Script</b></td>\n";
|
---|
173 | print HTML "</font></tr>\n";
|
---|
174 |
|
---|
175 | foreach $chap (sort chaps_ascending (keys %chaps)) {
|
---|
176 | my @demos;
|
---|
177 | my $demo;
|
---|
178 |
|
---|
179 | #
|
---|
180 | # Open the directory associated with the chapter.
|
---|
181 | #
|
---|
182 | if ($chap =~ /^book$/) {
|
---|
183 | next;
|
---|
184 | }
|
---|
185 |
|
---|
186 | opendir(DEMOS, $chap) || die("Cannot open directory $chap");
|
---|
187 | @demos = readdir(DEMOS);
|
---|
188 | closedir(DEMOS);
|
---|
189 |
|
---|
190 | print HTML "<tr>\n";
|
---|
191 | print HTML "<td align=left>";
|
---|
192 | print HTML "<a href=\"$chaps{$chap}{url}\">";
|
---|
193 | print HTML "$chaps{$chap}{title}</a></td>\n";
|
---|
194 |
|
---|
195 | print HTML "<td><table border=0>\n";
|
---|
196 |
|
---|
197 | foreach $demo (sort(@demos)) {
|
---|
198 | if ($demo !~ /^[a-z].*\.d$/) {
|
---|
199 | next;
|
---|
200 | }
|
---|
201 |
|
---|
202 | print HTML "<tr><td><a href=\"$demo\">$demo</a>";
|
---|
203 | print HTML "</td></tr>\n";
|
---|
204 |
|
---|
205 | demo_process($chap, $demo);
|
---|
206 | }
|
---|
207 |
|
---|
208 | print HTML "</table></td></tr>\n";
|
---|
209 | }
|
---|
210 |
|
---|
211 | print HTML "</table>\n</td>\n<p>\n\n";
|
---|
212 | print HTML "</td></tr>\n";
|
---|
213 | print HTML "<tr><td><hr><small>Copyright ";
|
---|
214 | print HTML localtime->year() + 1900;
|
---|
215 | print HTML " Sun Microsystems</small>\n";
|
---|
216 | print HTML "</table>\n";
|
---|
217 | print HTML "</body>\n</html>\n";
|
---|
218 | close HTML;
|
---|
219 | }
|
---|
220 |
|
---|
221 | chaps_read();
|
---|
222 |
|
---|
223 | if (basename($ARGV[0]) ne "$htmlfile") {
|
---|
224 | demo_find(basename($ARGV[0]));
|
---|
225 | } else {
|
---|
226 | chaps_process($htmlfile);
|
---|
227 | }
|
---|