1#!/usr/local/bin/perl -w
2# Id: infosrch,v 1.2 2004/04/11 17:56:47 karl Exp 
3# infosrch does a regex search on an info manual.
4# By Harry Putnam <reader@newsguy.com>.
5
6($myscript = $0) =~ s:^.*/::; 
7$six = '';
8
9if($ARGV[0] eq "help"){
10   &usage;
11   exit;
12}
13if($ARGV[0] eq "-e"){
14   shift;
15   $six = "true";
16}
17if(!$ARGV[1]){
18   &usage;
19   exit;
20}
21
22$target = shift;
23$regex  = shift;
24
25$shell_proc  =  "info --output - --subnodes 2>/dev/null $target";
26
27open(SHELL_PROC," $shell_proc|");
28while(<SHELL_PROC>){
29  chomp;
30  push @lines,$_;
31} 
32close(SHELL_PROC);
33$cnt = 0;
34for(@lines){
35   if(/$regex/ && !$six){
36      print "$target\n   $lines[($cnt-1)]\n<$cnt> $lines[$cnt]\n   $lines[($cnt+1)]\n";
37      print "-- \n";
38   }elsif(/$regex/ && $six){
39        print "$target\n";
40        if($lines[($cnt-6)]){
41           print "    $lines[($cnt-6)]\n";
42        }
43        if($lines[($cnt-5)]){
44           print "    $lines[($cnt-5)]\n";
45        }
46        if($lines[($cnt-4)]){
47           print "    $lines[($cnt-4)]\n";
48        }
49        if($lines[($cnt-3)]){
50           print "    $lines[($cnt-3)]\n";
51        }
52        if($lines[($cnt-2)]){
53           print "    $lines[($cnt-2)]\n";
54        }
55        if($lines[($cnt-1)]){
56           print "    $lines[($cnt-1)]\n";
57        }
58        if($lines[$cnt]){
59           print "$cnt $lines[$cnt]\n";
60        }
61        if($lines[($cnt+1)]){
62           print "    $lines[($cnt+1)]\n";
63        }
64        if($lines[($cnt+2)]){
65           print "    $lines[($cnt+2)]\n";
66        }
67        if($lines[($cnt+3)]){
68           print "    $lines[($cnt+3)]\n";
69        }
70        if($lines[($cnt+4)]){
71           print "    $lines[($cnt+4)]\n";
72        }
73        if($lines[($cnt+5)]){
74           print "    $lines[($cnt+5)]\n";
75        }
76        if($lines[($cnt+6)]){
77           print "    $lines[($cnt+6)]\n";
78        }
79        print "-- \n";
80     }
81     $cnt++;
82}        
83
84sub usage {
85  print <<EOM;
86
87Purpose: Extract full text from info node and search it by regex
88Usage: $myscript [-e] TARGET REGEX
89
90Where TARGET is an info node such as `emacs', `bash' etc, and
91REGEX is what you want to find in it.
92
93The -e flag is not required but if used then 6 lines preceding and six
94lines following any hits will be printed.  The default (with no -e flag)
95is to print one line before and after.
96
97The output has the line number prepended to the line containing the
98actual regex.
99
100Info command used:
101  info --output - --subnodes 2>/dev/null TARGET
102
103EOM
104}
105