1#!%OPT_PATH_PERL%
2#
3# wdnmz.pl - program to output words list from index
4# Version 1.0.6    [06/18/1998]
5#
6# Copyright (C) 1997-1998 Satoru Takabayashi  All rights reserved.
7#     This is free software with ABSOLUTELY NO WARRANTY.
8#
9
10$VERSION = "1.0.6";
11$COPYRIGHT = "Copyright (C) 1997-1998 Satoru Takabayashi  All rights reserved.";
12
13$SYSTEM = "%OPT_SYSTEM%";
14$NKF    = "%OPT_PATH_NKF%";
15$LANGUAGE = "%OPT_LANGUAGE%";  # language of messages
16
17$USAGE  = <<EOFusage;
18  wdnmz.pl v$VERSION - program to output list of words from index
19  $COPYRIGHT
20
21  usage: wdnmz [-iw] NMZ.i
22    (default): 'word'  TAB 'count of the word in index'
23         -w: output list of words for regexp search
24         -i: using NMZ.ii to process
25  usually use: % wdnmz -w NMZ.i > NMZ.w)
26
27EOFusage
28
29&main;
30
31sub main {
32    while ($ARGV[0] =~ /^-/) {
33	$opt_wordlist = 1 if $ARGV[0] =~ /w/;;
34	$opt_with_nmz_ii = 1 if $ARGV[0] =~ /i/;;
35	shift(@ARGV);
36    }
37    if ($LANGUAGE eq "ja" &&
38	!$opt_wordlist && ($SYSTEM eq "WIN32") || ($SYSTEM eq "OS2")) {
39	open(SAVEOUT, ">&STDOUT");
40	open(STDOUT, "|$NKF -s");
41    }
42
43    die &usage if @ARGV == 0;
44    $OBJFILE = shift (@ARGV);
45
46    open(OBJFILE, $OBJFILE) || die "Can't open $OBJFILE!\n";
47    binmode(OBJFILE);
48    &getintsize;
49    if ($opt_with_nmz_ii) {
50	open(IDXFILE, $OBJFILE . "i") || die "Can't open $OBJFILEi!\n";
51	binmode(IDXFILE);
52	while (read(IDXFILE, $idx, $INTSIZE)) {
53	    $idx = unpack("I", $idx);
54	    seek(OBJFILE, $idx, 0);
55	    $_ = <OBJFILE>;
56	    read(OBJFILE, $n, $INTSIZE);
57	    $nn = unpack("I", $n);
58	    chop;
59	    $nn /= 2;
60	    if ($opt_wordlist) {
61		print "$_\n";
62	    } else {
63		print "$_\t$nn\n";
64	    }
65	}
66    } else {
67	while(<OBJFILE>) {
68	    read(OBJFILE, $n, $INTSIZE);
69	    $nn = unpack("I", $n);
70	    read(OBJFILE, $dummy, $INTSIZE * $nn);
71	    <OBJFILE>;
72
73	    chop;
74	    $nn /= 2;
75	    if ($opt_wordlist) {
76		print "$_\n";
77	    } else {
78		print "$_\t$nn\n";
79	    }
80	}
81    }
82    if (($SYSTEM eq "WIN32") || ($SYSTEM eq "OS2")) {
83	open(STDOUT, ">&SAVEOUT");
84    }
85}
86
87sub usage () {
88    print STDERR $USAGE;
89    exit;
90}
91
92# checke the size of int
93sub getintsize {
94    $tmp = 0;
95    $tmp = pack( "I", $tmp );
96    $INTSIZE = length( $tmp );
97}
98
99