home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / lotus / eSuite.exe / eSuiteDPP / doc / devpack / lookup.pl < prev    next >
Perl Script  |  1998-01-06  |  6KB  |  244 lines

  1. #!/perl/bin
  2.  
  3. # $Header:   //reebok/xyzL/JavaComp/webpack/doc/common/lookup.pl   1.3   02 Oct 1997 11:38:04   rflynn  $
  4. # ------------------------------------------------------------
  5. # lookup.pl
  6. #
  7. # lookup
  8. # ------------------------------------------------------------
  9. # Maintenace Log
  10. # --------------
  11.  
  12.  
  13.  
  14. &html_header ("Kona Doc Search Results");  # from cgi-lib.pl
  15.  
  16.  
  17. # Get the input
  18.  
  19. &parse_request;
  20. #
  21. #  If debugging on, show all the keys and values from the form.
  22. #
  23. #   if ($query{'debug'} =~ /no debug/) { }
  24. #   else{
  25. #  &show_debug_info;  }
  26. #
  27. #  If name missing, let them retry the form.
  28. #
  29. if ($query{'name'} eq "") {
  30.  
  31.    print "<h2>Error!  It seems you did not enter a keyword.</h2><p>";
  32.    print "<A HREF=\"search_script.pl\">";
  33.    print "Try Again? </A>   <hr>";
  34.  
  35.    &home;   # let them go back home if they want to.
  36.    exit 1;
  37.               }
  38. #this line sets the name of the three column text file
  39. $rolodex = "target2.txt";
  40.  
  41. &field_head();  # for the Results columns.
  42.  
  43. print"<HR>";
  44. $hitctr = 0;  # hit counter variable
  45.  
  46. open(ROLODEX, $rolodex) || die "cannot open $rolodex data file";
  47. #
  48. #  Mod:  use Dict flag = 0 - *all* characters 
  49. #
  50. &look(*ROLODEX, $query{'name'},0,1);  # use the assoc array
  51.  
  52. while (<ROLODEX>){
  53.  
  54.       last unless /^$query{'name'}/i;
  55.       @line = split(/\s\s+/);
  56.       $hitctr++;
  57.       if ($hitctr > $query{'limit-List'}) {
  58.           $hitctr--;  # must adjust this to get it right.
  59.           print "<i>User limit of $hitctr reached...ending search.</i>";
  60.          last;  }
  61.      
  62.     
  63.        print "<pre>";
  64.           $X="<A HREF=http://kona-dpp.lotus.com/dpp_doc/$line[2] Target=_top>$line[1]</A><BR>";
  65.         printf("  %-20s   %-15s   ",$line[0],$X);
  66.        print "</pre>";
  67.  
  68. }   # end of WHILE
  69.  
  70.  
  71. close(ROLODEX) || die "cannot close $rolodex data file";   
  72.  
  73. print "Your search found <b>$hitctr</b> item(s).<p>";
  74. print "<A HREF=\"search_script.pl\">New</A> search?";  
  75.  
  76. &home;
  77. exit 0;
  78.  
  79. sub field_head{
  80.   $fhdr="<B>Keyword</B>";
  81.   $chdr="<B>Topic</B>";
  82. #  $shdr="<B>Link</B>";
  83.   print "<pre>";
  84.   printf(" %-25s    %-20s      ",$fhdr, $chdr);
  85.   print "</pre>";
  86. }  
  87.  
  88. sub show_debug_info {
  89.  
  90. while (($key,$value) = each(%query)) {
  91.    print "The value of $key is $value <br>"; }
  92.  
  93. }
  94.  
  95. exit 0;  
  96.  
  97. ;# Usage: &look(*FILEHANDLE,$key,$dict,$fold)
  98.  
  99. ;# Sets file position in FILEHANDLE to be first line greater than or equal
  100. ;# (stringwise) to $key.  Pass flags for dictionary order and case folding.
  101.  
  102. sub look {
  103.     local(*FH,$key,$dict,$fold) = @_;
  104.     local($max,$min,$mid,$_);
  105.     local($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
  106.        $blksize,$blocks) = stat(FH);
  107.     $blksize = 8192 unless $blksize;
  108.     $key =~ s/[^\w\s]//g if $dict;
  109.     $key =~ y/A-Z/a-z/ if $fold;
  110.     $max = int($size / $blksize);
  111.     while ($max - $min > 1) {
  112.     $mid = int(($max + $min) / 2);
  113.     seek(FH,$mid * $blksize,0);
  114.     $_ = <FH> if $mid;        # probably a partial line
  115.     $_ = <FH>;
  116.     chop;
  117.     s/[^\w\s]//g if $dict;
  118.     y/A-Z/a-z/ if $fold;
  119.     if ($_ lt $key) {
  120.         $min = $mid;
  121.     }
  122.     else {
  123.         $max = $mid;
  124.     }
  125.     }
  126.     $min *= $blksize;
  127.     seek(FH,$min,0);
  128.     <FH> if $min;
  129.     while (<FH>) {
  130.     chop;
  131.     s/[^\w\s]//g if $dict;
  132.     y/A-Z/a-z/ if $fold;
  133.     last if $_ ge $key;
  134.     $min = tell(FH);
  135.     }
  136.     seek(FH,$min,0);
  137.     $min;
  138. }
  139.  
  140. 1;
  141.  
  142. #
  143. #  file: cgi-lib.pl
  144. #
  145. #  auth: Brad Burdick
  146. #  desc: This library deals with basic CGI POST or GET method request
  147. #        elements such as those delivered by an HTTPD form, i.e. a url
  148. #        encoded line:  a=b&b=c&c=d
  149. #
  150. #        Also handles <ISINDEX> GET requests.
  151. #
  152. #           
  153. #
  154.  
  155. #
  156. # parse_request reads the POST or GET request from STDIN, and then splits
  157. # it into its name=value pairs.  Special test for <ISINDEX> input.
  158. #
  159. sub parse_request {
  160.  
  161.     if ($ENV{'REQUEST_METHOD'} eq "POST") {
  162.         # assumes read gets everything!!
  163.         read(STDIN, $raw_query, $ENV{'CONTENT_LENGTH'});
  164.     } elsif ($ENV{'REQUEST_METHOD'} eq "GET" ) {
  165.         $raw_query = $ENV{'QUERY_STRING'};
  166.     } else {
  167.         # unrecognized request method
  168.         return;
  169.     }
  170.  
  171.     # Decode HEX values and spaces, if any
  172.     if ($raw_query !~ /[&=]/) {  # handle <ISINDEX> input
  173.         $isindex = $raw_query;
  174.         &decode_url($isindex);
  175.     } else {
  176.         %query = &decode_url(split(/[&=]/, $raw_query));
  177.     }
  178. }
  179.  
  180. #
  181. #    Decode a URL encoded string or array of strings 
  182. #        + -> space
  183. #        %xx -> character xx
  184. #
  185. sub decode_url {
  186.     foreach (@_) {
  187.         tr/+/ /;
  188.         s/%(..)/pack("c",hex($1))/ge;
  189.     }
  190.     @_;
  191. }
  192.  
  193. #
  194. # html_header sends an HTML header for the document to be returned
  195. #
  196. sub html_header {
  197.     local($title) = @_;
  198.     print "Content-type: text/html\n\n";
  199.     print "<html><head>\n";
  200.     print "<title>$title</title>\n";
  201.     print "</head>\n<body BGCOLOR=white>\n";
  202. }
  203.  
  204.  
  205. # keep require happy
  206. 1;
  207.  
  208.  
  209. #-------------------------#
  210. # Standard EDGAR Routines #
  211. #-------------------------#
  212.  
  213. #
  214. #  Supply the go-home and back.gif link.
  215. #
  216. sub home{
  217.   local ($gif,$text) = @_; 
  218.  
  219.   # if nothing supplied, set default to back.gif and vanilla caption.
  220.   
  221.   if ($#_ < 0) {   # check out the funky $#_ !!
  222.       $gif = "back.gif";
  223.       $text = "Return to the Programmatic Reference Home Page";
  224.  
  225. print "<HR>";
  226. print "<a href=\"http://kona-dpp.lotus.com/dpp_doc/prog_ref_home.html\" target=_top>";
  227. print "<img src=\"http://kona-dpp.lotus.com/dpp_doc/$gif\">";
  228. print "$text</A>";
  229. print "<HR>";
  230. }
  231.  
  232. 1;  # it is CRITICAL to end a subroutine library with a 1;
  233.     # or else, no requires using this would work.
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.