Talk:Environments

From PS3 Developer wiki
Revision as of 16:08, 11 May 2011 by Euss (talk | contribs)
Jump to navigation Jump to search

get_datasheet.cgi

sourcetweet: <CrashSerious> : GOOGLE FUN: found a cached copy of Sony's PERL cgi page's source from the latest hack --> http://is.gd/ZIgISa

# !/usr/local/bin/perl
# http://products.sel.sony.com/cgi-bin/semi/get_datasheet.cgi

eval {

   #########################################################
   # Read in the string from the form
   #########################################################

   if ($ENV{'REQUEST_METHOD'} eq "GET") {
           $FORM_DATA = $ENV{'QUERY_STRING'};
   } else {
      $LENGTH = $ENV{'CONTENT_LENGTH'};
      while ($LENGTH) {
         $FORM_DATA .= getc(STDIN);
         $LENGTH--;
      }
   }

   #########################################################
   # Split the input string into individual variables
   #########################################################


   foreach (split(/&/, $FORM_DATA)) {
      ($NAME, $VALUE) = split(/=/, $_);
      $NAME =~ s/\+/ /g;
      $NAME =~ s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
      $VALUE =~ s/\+/ /g;
      $VALUE =~ s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
      # find a unique name for select boxes
      $NUM ="0";
      while ($FORMDATA{$NAME} ne "") {
         $NUM++;
         $NAME =~ s/\.([0-9]+$)|$/\.$NUM/;
      }
      $FORMDATA{$NAME} = $VALUE;
   }

   $product = $FORMDATA{"product"};
   $product =~ tr/a-z/A-Z/;
   
   $docdirname = "/ws/w1/htmldocs/shared/semi/PDF/";
   $docext = "pdf";
   $docurlbase = "/semi/PDF/";
   
   $filename = "$docdirname$product.$docext";
   $default = "$product.$docext";
   
   local(@matched, @ids, $re);
   # get a list of the product ids
   opendir(DOCDIR, $docdirname) || die($ENV{'SCRIPT_NAME'}||$0. ": opendir(): can't open directory \"$docdirname\": $!\n");
   @ids = readdir(DOCDIR);
   closedir(DOCDIR);
   @ids = grep(/\.$docext$/i && s/\.$docext$//i, @ids);

   if(@matched == 0) {
      # make a regexp of possible $product matches
      $re = $product;

      # look for match
      @matched = grep(/$re/i, @ids);
   }
   if(@matched == 0) {
      # make a regexp of possible $product matches
      $re = join("|", omit_list(+1, $product), 
                      omit_list(-1, $product), 
                      miss_list(-1, $product), 
                      transpose_list($product));
      $re = '^(?:'.$re.')$';

      # look for match
      @matched = grep(/$re/i, @ids);
   }

   # sort @matched
   sub sortsub {
      my $ta, $tb; 
      ($ta = $a) =~ tr/A-Z/a-z/;
      ($tb = $b) =~ tr/A-Z/a-z/;
      $ta cmp $tb;
   }
   @matched = sort sortsub @matched;
   
#   if((! -r $filename) && (@matched != 1))) { 
   if(@matched == 1) {
      $errmsg = "<p>The product code you entered, $product, is similar to this product: ". 
      join("", map("<a href=\"$docurlbase$_.$docext\">$_</a>", @matched)).
      ".  If this is not what you wanted, you can try another product code, or go to a product category, by selecting it below.";
   } elsif(@matched > 1) {
      $errmsg = "<p>The product code you entered, $product, is similar to these products: <ul>".
      join("", map("<li><a href=\"$docurlbase$_.$docext\">$_</a>", @matched)).
      "</ul> <p>If none of these are what you wanted, you can try another product code, or go to a product category, by selecting it below.";
   } else {
      $errmsg = "<p><center><H2>Sorry, the product code you entered does not exist.  Please try another product code, or go to a product category by selecting it below.</H2></center>";
   } 
};


###
###
$error_file = "/ws/w1/htmldocs/shared/semi/searcherror.html";
$errmsg_spot_re = "<!--%ERRGOESHERE%-->";


if($errmsg || $@) {
   $errmsg = $errmsg || "the script encountered a serious problem and couldn't complete your request: $@";

   print("Content-type: text/html\n\n");
   open(ERROR, $error_file);
   $e = join("", (<ERROR>));
   close(ERROR);

   if($e ne '') {
      $e =~ s/$errmsg_spot_re/$errmsg/g;
   } else {
      $e = "Serious error: $!, and $errmsg";
   }
   $e .= "\n";
   print($e);
}



# package alink::oneoff;

sub uniq { my %H = (); grep(!$H{$_}++, @_); }
sub nonuniq { my %H = (); grep($H{$_}++ == 1, @_); }

sub omit_list {
   my $e_len = shift;
   my @R = ();

   my $g;
   foreach $g (@_) {
      my $g_len = length($g);

      if($e_len > 0) {
         push(@R, uniq(omit_list($e_len-1, map(substr($g,0,$_).".".substr($g,$_), (0..$g_len)))));
      } elsif($e_len < 0) {
         push(@R, uniq(omit_list($e_len+1, map(substr($g,0,$_).substr($g,$_+1), (0..$g_len-1)))));
      } else {
         push(@R, $g);
      }
   }

   @R;
}

sub miss_list {
   my $e_len = shift;
   my @R = ();

   my $g;
   foreach $g (@_) {
      my $g_len = length($g);

      if($e_len < 0) {
         push(@R, uniq(miss_list($e_len+1, map(substr($g,0,$_).".".substr($g,$_+1), (0..$g_len-1)))));
      } else {
         push(@R, $g);
      }
   }

   @R;
}

sub transpose_list {
   my @R = ();

   my $g;
   foreach $g (@_) {
      my $g_len = length($g);
      push(@R, uniq(map(substr($g,0,$_-1).substr($g,$_,1).substr($g,$_-1,1).substr($g,$_+1), (1..$g_len-1))));
   }

   @R;
}

## examples

## fetch some words
#chop(@l = (<>));

## regexps for if one letter was omitted
#print(map($_."\n", omit_list(+1, @l)));

## regexps for if one extra letter was added
#print(map($_."\n", omit_list(-1, @l)));

## regexps for if one letter was screwed up
#print(map($_."\n", miss_list(-1, @l)));

## regexps for if two letters were transposed
#print(map($_."\n", transpose_list(@l)));

## possible matches if one letter were omitted
#print(map($_."\n", omit_list(-1, @l)));

## possible matches if two letters were transposed
#print(map($_."\n", transpose_list(@l)));


## check for possible collisions if one letter were omitted
#print(map($_."\n", nonuniq(omit_list(-1, @l))), "\n");

## check for possible collisions if two letters were transposed
#print(map($_."\n", nonuniq(transpose_list(@l))), "\n");

# end

http://pastie.org/private/a10xmqhjufcfvvrtmuns7w


wishlist

http://products.sel.sony.com/cgi-bin/wishlist


sweepstake.xls

http://products.sel.sony.com/shared/santa/dbs/sweepstake.xls