/[suikacvs]/okuchuu/piclist.ja.cgi
Suika

Contents of /okuchuu/piclist.ja.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (show annotations) (download)
Thu Nov 22 12:50:09 2007 UTC (18 years, 9 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.7: +2 -1 lines
Links updated

1 #!/usr/local/bin/perl
2
3 use strict;
4
5 =head1 NAME
6
7 piclist - Making List of Pictures in a Directory
8
9 =cut
10
11 my $dir = $main::ENV{PATH_TRANSLATED}
12 or die "BAD PATH_TRANSLATED: $ENV{PATH_TRANSLATED}";
13
14 my %Opt;
15
16 if ($dir =~ s#/[^/]+$##) {
17 for (split /[&;]/, $ENV{QUERY_STRING}) {
18 my ($name, $val) = split /=/, $_, 2;
19 $Opt{$name} = defined $val ? $val : 1;
20 }
21 } else {
22 die "BAD PATH_TRANSLATED: $ENV{PATH_TRANSLATED}";
23 }
24
25
26 sub escape ($) {
27 my $s = shift;
28 $s =~ s/&/&/g;
29 $s =~ s/</&lt;/g;
30 $s =~ s/>/&gt;/g;
31 $s =~ s/"/&quot;/g;
32 $s =~ s/'/&#x27;/g;
33 $s;
34 }
35
36 sub rfc3339date ($) {
37 my @gt = gmtime shift;
38 sprintf '%04d-%02d-%02dT%02d:%02d:%02dZ',
39 $gt[5] + 1900, $gt[4] + 1, @gt[3, 2, 1, 0];
40 }
41
42 sub filesize ($) {
43 my $size = 0 + shift;
44 if ($size > 2048) {
45 $size /= 1024;
46 if ($size > 2048) {
47 $size /= 1024;
48 sprintf '%.1f �ᥬ�����ƥå�', $size;
49 } else {
50 sprintf '%.1f ���������ƥå�', $size;
51 }
52 } else {
53 $size . ' �����ƥå�';
54 }
55 }
56
57 my $dirpath = escape $ENV{REQUEST_URI};
58 $dirpath =~ s/\#.*$//;
59 $dirpath =~ s/\?.*$//;
60 $dirpath =~ s/,[^,]*$//g;
61 unless (-d $dir) {
62 $dir =~ s#/+[^/]+$##;
63 $dirpath =~ s#/[^/]+$#/#;
64 $dirpath ||= '/';
65 } else {
66 $dirpath =~ s#/LIST$##;
67 $dirpath =~ s#/?$#/#;
68 }
69
70 opendir DIR, $dir or die "$dir: $!";
71 my @all_files = sort grep {not /^\./ and /^[A-Za-z0-9._-]+$/}
72 (readdir DIR)[0..1000];
73 close DIR;
74 my @files = grep {/\.(?:jpe?g|png|ico|gif|mng|xbm|JPE?G)(?:\.gz)?$/} @all_files;
75 my @dirs = grep {$_ ne 'CVS' and -d $dir.'/'.$_} @all_files;
76
77 sub has_file ($) {
78 my $name = shift;
79 my $namelen = 1 + length $name;
80 for (@all_files) {
81 if ($name.'.' eq substr $_, 0, $namelen) {
82 return 1;
83 }
84 }
85 return 0;
86 }
87
88 sub preview_uri ($) {
89 my $original_file_name = shift;
90 $original_file_name =~ s/\..*$//;
91 my $file_name = $original_file_name;
92 if ($file_name =~ /-small$/) {
93 return $file_name;
94 } else {
95 $file_name =~ s/-large$//;
96 if (has_file $file_name . '-small') {
97 return $file_name . '-small';
98 } elsif (has_file $file_name) {
99 return $file_name;
100 } else {
101 return $original_file_name;