3 # JF ¤Î Berkeley DB ¥Õ¥¡¥¤¥ë¤òÆɤó¤Ç¡¢¥ê¥¹¥È¤ò½ÐÎϤ¹¤ë¤¿¤á¤Î
5 # Fujiwara ¤µ¤ó¤Î½ñ¤¤¤¿¥¹¥¯¥ê¥×¥È¤ò¥Ù¡¼¥¹¤Ë¤·¤Æ¤¤¤ë¡£
7 # -d: ·ë¹ç¤¹¤ë Berkeley DB file ¤Î̾Á°
8 # -t: output format type (HTML or TEXT)
9 # -c: ½ÐÎϤ¹¤ë¥«¥Æ¥´¥ê¡¼Ì¾ (¾Êά»þ¤Ï¤¹¤Ù¤Æ)
10 # -w: jf.css ¤ò»²¾È¤¹¤ë HTML ¤ò½ÐÎÏ (JF ¤Î Web Page ÍÑ INDEX ¤ò½ÐÎϤ¹¤ë¤È¤)
11 # -k: ½ÐÎϤ·¤¿¤¤Ê¸½ñ¤Î KIND (¾Êά»þ¤Ï¤¹¤Ù¤Æ)
16 use jfadmlib qw(:DEFAULT :LOCKS);
20 getopts('t:d:c:k:w', \%opts);
22 die unless $opts{'d'};
23 my $database = $opts{'d'};
26 $type = $opts{'t'} if $opts{'t'};
28 my @category = ("install",
44 @category = $opts{'c'} if $opts{'c'};
52 $www = 1 if $opts{'w'};
54 my %kind_description = (
55 "all" => "JF¤Î¥É¥¥å¥á¥ó¥È¥ê¥¹¥È",
56 "LDP-TRANS" => "LDP¤ÎËÝÌõʸ½ñ°ìÍ÷",
57 "OTHER-TRANS" => "LDP°Ê³°¤ÎËÝÌõʸ½ñ°ìÍ÷",
58 "ORIGINAL" => "¥ª¥ê¥¸¥Ê¥ëʸ½ñ°ìÍ÷",
62 $kind = $opts{'k'} if $opts{'k'};
63 die unless $kind_description{$kind};
66 "install" => "Linux¤Î¾Ò²ð¤È¥¤¥ó¥¹¥È¡¼¥ë",
68 "guide" => "¥¬¥¤¥É¤È¥Á¥å¡¼¥È¥ê¥¢¥ë",
69 "hardware" => "¥Ï¡¼¥É¥¦¥§¥¢¤È¥É¥é¥¤¥Ð¡¼",
70 "diskmanage" => "¥Ö¡¼¥È¤È¥Ç¥£¥¹¥¯´ÉÍý",
71 "filesystem" => "¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à",
72 "network" => "¥Í¥Ã¥È¥ï¡¼¥¯",
73 "programming" => "¥×¥í¥°¥é¥ß¥ó¥°",
74 "xfree" => "X Window System ¤ÎÀßÄê",
76 "database" => "¥Ç¡¼¥¿¥Ù¡¼¥¹",
77 "tool" => "¥Ä¡¼¥ë¤Î²òÀâ",
78 "kernel" => "¥«¡¼¥Í¥ë´ØÏ¢",
80 "archived" => "¸Å¤¤Ê¸½ñ",
86 my @t = get_timelist(time);
89 # tie database object to hash, and lock it.
92 $H = tie(%index, 'DB_File', $database, O_RDONLY, 0644, $DB_BTREE) or die;
97 if (($type eq "HTML") and ($#category == 0)) {
98 print_html_header($www, $description{$category[0]});
99 print "<h2 id=\"JFLIST\">$kind_description{$kind}</h2>\n";
100 } elsif ($type eq "HTML") {
101 print_html_header($www, $kind_description{$kind});
102 print "<h2 id=\"JFLIST\">$kind_description{$kind}</h2>\n";
104 print "$kind_description{$kind}\n\n";
110 foreach my $p (@category) {
111 if ($type eq "HTML") {
112 print "<h3 id=\"$p\">$description{$p}</h3>\n";
115 print "\n[$description{$p}]\n\n";
118 pickup($p, \%index, $H, $type);
119 print "</dl>\n" if $type eq "HTML";
122 print_html_footer($www,\@t) if $type eq "HTML";
131 # end of main procedure
136 my ($category, $index, $H, $type) = @_;
139 foreach my $key (keys %$index) {
140 next unless $key =~ /\@\@ITEM$/;
141 next unless $index->{$key} =~ /^$category$/;
142 my ($name, $dummy) = split("\@\@", $key);
144 my $tmpjdat = get_ent($H, $name, "JDAT");
145 $tmpjdat = '0' unless $tmpjdat; # dummy
146 $tmpjdat .= $i++ if $jdat_hash{$tmpjdat}; # unique key
147 $jdat_hash{$tmpjdat} = $name;
149 foreach my $key (sort {$b cmp $a;} (keys %jdat_hash)) {
150 my $name = $jdat_hash{$key};
151 my $CONT = get_ent($H, $name, "CONT");
152 my $JDAT = get_ent($H, $name, "JDAT");
153 my $TITL = get_ent($H, $name, "TITL");
154 my $KIND = get_ent($H, $name, "KIND");
156 $AUT[0] = get_ent($H, $name, "AUTH");
157 $AUT[1] = get_ent($H, $name, "AUT2");
158 $AUT[2] = get_ent($H, $name, "AUT3");
159 $TRN[0] = get_ent($H, $name, "TRNS");
160 $TRN[1] = get_ent($H, $name, "TRN2");
161 $TRN[2] = get_ent($H, $name, "TRN3");
162 foreach (@AUT, @TRN) {
166 $CONT = "unrecorded" unless $CONT;
167 next unless ($kind eq "all") or ($kind eq $KIND);
172 if ($date =~ /^\d+$/) {
173 $date = $date . '/01/01';
174 } elsif ($date =~ /^\d+\/\d+$/) {
175 $date = $date . '/01';
177 $date =~ /(\d+)\/(\d+)\/(\d+)/;
178 my ($year, $month, $day) = ($1, $2, $3);
179 $year += 1900 if $year < 1900;
180 $month = 1 if $month == 0;
181 $day = 1 if $day == 0;
182 $passed_time = time - timelocal(0, 0, 0,
183 $day, $month-1, $year-1900);
185 $JDAT = "unrecorded";
186 $passed_time = 60*60*24*365; # dummy
189 if ($type eq "HTML") {
190 print_html_data($name, $category, $CONT, $JDAT, $TITL,
191 $KIND, \@AUT, \@TRN, $passed_time);
193 print_text_data($name, $category, $CONT, $JDAT, $TITL,
194 $KIND, \@AUT, \@TRN);
199 sub print_html_data {
200 my ($name, $category, $CONT, $JDAT, $TITL, $KIND, $AUT, $TRN,
203 if ($www and $contrib{$KIND}) {
204 $name = "../contrib/$KIND/$name";
205 } elsif ($contrib{$KIND}) {
206 $name = "contrib/$KIND/$name";
208 $name = "archive/$name" if $category eq 'archived';
210 if (-f "$name.html") {
211 print "<dt><a href=\"$name.html\"><strong>$TITL</strong></a>\n";
213 print "<dt><a href=\"$name/\"><strong>$TITL</strong></a>\n";
215 print "<dt><strong>$TITL</strong>\n";
218 print " <small>($JDAT)</small>";
219 if ($passed_time < 60*60*24*31 and $www) {
220 print "\n <span class=\"new\">new</span>";
224 print " <dd>$CONT\n <small>\n";
225 print " [<a href=\"$name.txt\">¥Æ¥¥¹¥ÈÈÇ</a>]\n" if (-f "$name.txt");
227 print " Ãø¼Ô: $AUT->[0]\n" if $AUT->[0];
228 print " , $AUT->[1]\n" if $AUT->[1];
229 print " , $AUT->[2]\n" if $AUT->[2];
230 print " ËÝÌõ: $TRN->[0]\n" if $TRN->[0];
231 print " , $TRN->[1]\n" if $TRN->[1];
232 print " , $TRN->[2]\n" if $TRN->[2];
233 print " </small></dd>\n";
237 sub print_text_data {
238 my ($name, $category, $CONT, $JDAT, $TITL, $KIND, $AUT, $TRN) = @_;
239 $name = "contrib/$KIND/$name" if $contrib{$KIND};
240 $name = "archive/$name" if $category eq 'archived';
242 if (-f "$name.txt") {
243 $filename = $name . ".txt";
244 } elsif (-f "$name.xml") {
245 $filename = $name . ".xml";
246 } elsif (-f "$name.sgml") {
247 $filename = $name . ".sgml";
249 $filename = $name . "/";
253 Filename: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Updated: @<<<<<<<<<
255 Title: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<...
257 Description: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<...
262 print " Author: $AUT->[0]" if $AUT->[0];
263 print ", $AUT->[1]" if $AUT->[1];
264 print ", $AUT->[2]" if $AUT->[2];
265 print "\n" if $AUT->[0];
266 print " Translator: $TRN->[0]" if $TRN->[0];
267 print ", $TRN->[1]" if $TRN->[1];
268 print ", $TRN->[2]" if $TRN->[2];
269 print "\n" if $TRN->[0];
274 sub print_html_header {
277 print <<"-HEADER-ONE-";
278 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
279 "http://www.w3.org/TR/html4/loose.dtd">
280 <html lang="ja" dir="ltr">
282 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
283 <title>JF: Index: $title</title>
284 <meta name="author" lang="en" content="JF Project Members">
285 <meta name="copyright" content="(C) 1998-2014 JF Project.">
286 <meta name="description" content="Linux ¤Ë´Ø¤¹¤ë²òÀâʸ½ñ¡¦FAQ ¤Ê¤É¤òºîÀ®¡¦¼ý½¸¡¦ÇÛÉÛ¤¹¤ë JF Project ¤Îʸ½ñ°ìÍ÷¤Ç¤¹¡£">
287 <meta name="keywords" content="JF,Linux,Japanese,ʸ½ñ,¥É¥¥å¥á¥ó¥È,ËÝÌõ,HOWTO,FAQ">
288 <link rev="made" href="mailto:jf\@listserv.linux.or.jp">
291 print " <link rel=\"stylesheet\" type=\"text/css\" href=\"../jf.css\">\n"
294 print <<"-HEADER-TWO-";
302 print "<h1><a href=\"../index.html\">JF</a>: Index</h1>";
304 print "<h1>JF-INDEX</h1>";
309 sub print_html_footer {
311 print <<"-FOOTER-ONE-";
314 JF Project Á´È̤˴ؤï¤ë¤´°Õ¸«¤´Í×˾¤Ï
315 jf\@listserv.linux.or.jp ¤Þ¤Ç¤ª¤Í¤¬¤¤¤·¤Þ¤¹¡£
319 print <<"-FOOTER-WWW-" if $www;
320 <div class="copyright">
321 <a href="../index.html">JF Project ¥á¥¤¥ó¥Ú¡¼¥¸¤Ø</a><br>
325 print " <div class=\"copyright\">\n" if $www;
326 print "¥ê¥¹¥È¹¹¿·Æü»þ: $t->[0]/$t->[1]/$t->[2] $t->[4]:$t->[5]:$t->[6]<br>\n";
327 print " </div>\n" if $www;
328 print "\n</body>\n</html>\n";
332 my ($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime($_[0]);
333 my @dow = ("Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat");
334 my $dow = $dow[$wday];
336 $month = 1 if $month == 13;
337 $month = "0" . $month if $month < 10;
338 $day = "0" . $day if $day < 10;
339 $hour = "0" . $hour if $hour < 10;
340 $min = "0" . $min if $min < 10;
341 $sec = "0" . $sec if $sec < 10;
343 return ($year, $month, $day, $dow, $hour, $min, $sec);