namazu-ml(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: namazu-1.4.0.0-beta-1



古川です。

>> On Wed, 3 Mar 1999 17:15:47 +0900, takehi-s@xxxxxxxxxxx (SHIOZAKI Takehiko) said:
  > これでいろいろと試して、結論が出ました。
  > 	Perl5.004_01の不具合
  > ですね。

ともかくよかったよかった、という気持ちです。


  > という風に速くなったのは素晴らしいことですね。今回完走したのでも

まあ、もとのが悪かっただけなわけですが。


>> On Thu, 04 Mar 1999 17:09:15 +0900, Satoru Takabayashi <ccsatoru@xxxxxxxxxxxxxxxxxx> said:
  > Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:
  >> 前回のは死ぬ (規模のデータに到達する) までに 9 時間近くかかっているの
  >> に、今回は 30 分くらいですね。やはり、ちゃんと (un)pack を使うと、効果
  >> がありますね。ってあたりまえか…

  > どうせ v1.4 の mknmz は require 5.004 なんだし、 gcnmz でも 
  > require 5.004 にして自前の packw, unpackw を廃止しても良いの
  > ではないでしょうか?

そのうち廃止しようとは思っています。

# いつ? -> 私のまわりから、5.003 が消えたら (そんなに遠くないでしょう)


ところで、今回の pack 'w' 化 (というよりも実は 'N' 統一化) のメリットと
して、「データベースを違うマシンで更新できるようになった」のが、私には、
とても便利で、ありがたいです。

私のところには、SunOS(SPARC) と FreeBSD(Pentium) のマシンが混在している
のですが、今までは、最初に Sun でインデックスを作ったら、その後の更新も
必ず Sun でやらなければなりませんでした。



----------------------------------------------------------------------
wdnmz の pack 'w' 対応をしてみました。必要性はともかく、デバッグ・検証
には役立つかもしれません。

------------------------------ ここから ------------------------------
#! @PERL@
#
# wdnmz - program to output words list from index
# Version 1.0.8    [02/13/1999]
#
# Copyright (C) 1997-1999 Satoru Takabayashi  All rights reserved.
#     This is free software with ABSOLUTELY NO WARRANTY.
#

$VERSION = "1.0.8";
$COPYRIGHT = "Copyright (C) 1997-1998 Satoru Takabayashi  All rights reserved.";

$SYSTEM = $^O;
$LANGUAGE = "%OPT_LANGUAGE%";  # language of messages

$USAGE  = <<EOFusage;
  wdnmz v$VERSION - program to output list of words from index
  $COPYRIGHT

  usage: wdnmz [-iw] NMZ.i
    (default): 'word'  TAB 'count of the word in index'
         -w: output list of words for regex search
         -i: using NMZ.ii to process
  usually use: % wdnmz -w NMZ.i > NMZ.w)

EOFusage

main();

sub main {
    while ($ARGV[0] =~ /^-/) {
	$opt_wordlist = 1 if $ARGV[0] =~ /w/;;
	$opt_with_nmz_ii = 1 if $ARGV[0] =~ /i/;;
	shift(@ARGV);
    }

    die &usage if @ARGV == 0;
    $OBJFILE = shift (@ARGV);
    
    open(OBJFILE, $OBJFILE) || die "Can't open $OBJFILE!\n";
    binmode(OBJFILE);
    &getintsize;
    if ($opt_with_nmz_ii) {
        open(IDXFILE, $OBJFILE . "i") || die "Can't open $OBJFILEi!\n";
        binmode(IDXFILE);
        while (read(IDXFILE, $idx, $INTSIZE)) {
            $idx = unpack("N", $idx);
            seek(OBJFILE, $idx, 0);
            $_ = <OBJFILE>;
            chop;
            if ($opt_wordlist) {
                Print("$_\n");
            } else {
                $nn = '';
                while ($c = getc OBJFILE, $nn .= $c, ord($c) & 0x80){}
                read(OBJFILE, $buf, unpack('w', $nn));
                $nn = (@tmp = unpack('w*', $buf)) / 2;
                Print("$_\t$nn\n");
            }
        }
    } else {
        while(<OBJFILE>) {
            chop;
            $nn = '';
            while ($c = getc OBJFILE, $nn .= $c, ord($c) & 0x80){}
            read(OBJFILE, $buf, unpack('w', $nn));
            $nn = (@tmp = unpack('w*', $buf)) / 2;
            if ($opt_wordlist) {
                Print("$_\n");
            } else {
                Print("$_\t$nn\n");
            }
            <OBJFILE>;
        }
    }
}

sub Print () {
    my ($str) = @_;
    if ($LANGUAGE eq "ja" && ($SYSTEM eq "MSWin32") || ($SYSTEM eq "os2")) {
	$str = eucjp_to_shiftjis($str);
    }
    print $str;
}

sub usage () {
    print STDERR $USAGE;
    exit;
}

# checke the size of int
sub getintsize {
    $tmp = 0;
    $tmp = pack( "I", $tmp );
    $INTSIZE = length( $tmp );
}

sub eucjp_to_shiftjis ($) {
    my ($str) = @_;
    $str =~ s/([\xa1-\xfe])([\xa1-\xfe])/etos($1, $2)/ge;
    return $str;
}

sub etos($) {
    my($c1, $c2) = @_;

    $c1 = ord($c1) & 0x7f;
    $c2 = ord($c2) & 0x7f;

    if ($c1 & 1) {
        $c1 = ($c1 >> 1) + 0x71;
        $c2 += 0x1f;
        $c2++ if $c2 >= 0x7f;
    } else {
        $c1 = ($c1 >> 1) + 0x70;
        $c2 += 0x7e;
    }
    $c1 += 0x40 if $c1 > 0x9f;

    return chr($c1) . chr($c2);
}

------------------------------ ここまで ------------------------------


-- 

                                        ヤマハ(株)ピアノプレーヤ設計課
                                                              古川 令
                                             furukawa@xxxxxxxxxxxxxxxx