summaryrefslogtreecommitdiffstats
path: root/staticweb/manbuilder.pl
blob: 3ae5b22a48b4be9e40aa7219301a3b898c45d201 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/perl
# $Id: manbuilder.pl,v 1.2 2003/07/03 06:50:54 in2 Exp $
use lib '/home/bbs/bin/';
use strict;
use OurNet::FuzzyIndex;
use Getopt::Std;
use DB_File;
use BBSFileHeader;
use Data::Serializer;

my(%db, %idx, $serial);

sub main
{
    die usage() unless( @ARGV );

    $serial = Data::Serializer->new(serializer => 'Storable',
                    digester   => 'MD5',
                                    compress   => 0,
                                    );

    foreach( @ARGV ){
    tie %db, 'DB_File', "$_.db", O_CREAT | O_RDWR, 0666, $DB_HASH;
    build("/home/bbs/man/boards/".substr($_, 0, 1)."/$_", '');
    untie %db;
    }
}

sub build($$)
{
    my($basedir, $doffset) = @_;
    my(%bfh, $fn, @tdir);

    print "$basedir, $doffset\n";
    tie %bfh, 'BBSFileHeader', $basedir;
    foreach( 0..($bfh{num} - 1) ){
    next if( $bfh{"$_.filemode"} & 32 ); # skip HIDDEN

    $fn = $bfh{"$_.filename"};
    if( $bfh{"$_.isdir"} ){
        push @tdir, ["$doffset/$fn/", $bfh{"$_.title"}];
        build("$basedir/$fn", "$doffset/$fn");
    }
    else{
        push @tdir, ["$doffset/$fn", $bfh{"$_.title"}];
        my $c = $bfh{"$_.content"};
        $c =~ s/\</&lt;/gs;
        $c =~ s/\>/&gt;/gs;
        $c =~ s/\"/&quot;/gs;
        $c =~ s/\'/&apos;/gs;
        $c =~ s/ /&nbsp;/gs;
        $c =~ s/\n/<br \/>\n/gs;
        $db{"$doffset/$fn"} = $c;
    }
    }
    $db{"$doffset/"} = $serial->serialize(\@tdir);
}

sub usage
{
    print ("$0 boardname ...\n");
    exit(0);
}

main();
1;