Free2Code
 
Time: 2008-12-04, 08:30pm
upload to another directory
Subject: upload to another directory  ·  Posted: 2005-07-24, 02:40am
Rank: ? (1)
Member #: 24803
I've downloaded an upload script from perlscriptsjavascripts.com, and it all works fine. However, I want the files to be uploaded to another host then the host where the script is located. How do I do that?

This is the script:

Code:
  1. #!/usr/bin/perl --
  2. # 'accountname' has of course another name in the real script. Already tried to change this to the root directory of the other host, but that doesn't seem to work: my script begins to complain I should exactly enter the correct root dir.
  3. $dir = "/home/accountname/www";  
  4. # absolute URL to folder files will be uploaded to
  5. # I changed the host for a x because of security reasons. Already tried to change this path to the name of the uploadhost, just as the above $dir var, but it doesn't work.
  6. $folder = "http://x/";
  7. $max = 500;
  8. $domain = "http://x/";
  9. $redirect = "";
  10. $notify = '';
  11. $send_mail_path = "";
  12. $smtp_path = "";
  13. # set to 1 if you would like all files in the directory printed to the web page
  14. # after a successful upload (only printed if redirect is off). Set to 0 if you
  15. # do not want filenames printed to web page
  16. $print_contents = 1;
  17. $overwrite = 0;
  18. # file types allowed, enter each type on a new line
  19. # Enter the word "ALL" in uppercase, to accept all file types.
  20. @types = qw~
  21. txt
  22. jpeg
  23. jpg
  24. gif
  25. ~;
  26. # well, everything above was pretty clare to me, but below this line, most of it is totally bogus.
  27. $folder =~ s/(\/|\\)$//ig;
  28. $OS = $^O; # operating system name
  29. if($OS =~ /darwin/i) { $isUNIX = 1; }
  30. elsif($OS =~ /win/i) { $isWIN = 1; }
  31. else {$isUNIX = 1;}
  32.     
  33. if($isWIN){ $S{S} = "\\\\"; }
  34. else { $S{S} = "/";} # seperator used in paths
  35. $ScriptURL = "http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}";
  36. unless (-d "$dir"){
  37.     mkdir ("$dir", 0777); # unless the dir exists, make it ( and chmod it on UNIX )
  38.     chmod(0777, "$dir");
  39. }
  40. unless (-d "$dir"){
  41.     # if there still is no dir, the path entered by the user is wrong and the upload will fail
  42.     &PrintHead; #print the header
  43.     
  44.     # get the Win root
  45.     $ENV{PATH_INFO} =~ s/\//$S{S}/gi;
  46.     $ENV{PATH_TRANSLATED} =~ s/$ENV{PATH_INFO}//i;
  47.     
  48.     print qq~
  49.     <table width="600">
  50.     <tr>
  51.     <td>
  52.     
  53.     <font face="Arial" size="2">
  54.     <b>The path you entered is incorrect.</b> You entered : "$dir"
  55.     <p>
  56.     Your root path is (UNIX): $ENV{DOCUMENT_ROOT}
  57.     <p>
  58.     Your root path is (WINDOWS): $ENV{PATH_TRANSLATED}
  59.     <p>
  60.     Your path should contain your root path followed by a slash followed by the
  61.     destination folder's name. If you are on a WINDOWS server, each slash should
  62.     be escaped. Eg. each seperator should look like this : \\\\
  63.     <p>
  64.     Sometimes, the root returned is not the full path to your web space. In this case
  65.     you should either check with your host  or if you are using an FTP client such as
  66.     CuteFTP, change to the folder you are trying to upload to and look at the path you
  67.     have taken. You can see this just above the list of files on your server.
  68.     You must use the same path in the \$dir variable.
  69.     </font>
  70.     
  71.     </td>
  72.     </tr>
  73.     </table>
  74.     ~;
  75.     
  76.     &PrintFoot; # print the footer
  77.     exit;
  78. }
  79. use CGI; # load the CGI.pm module
  80. my $GET = new CGI; # create a new object
  81. my @VAL = $GET->param; #get all form field names
  82. foreach(@VAL){
  83.     $FORM{$_} = $GET->param($_); # put all fields and values in hash
  84. }
  85. my @files;
  86. foreach(keys %FORM){
  87.     if($_ =~ /^FILE/){
  88.         push(@files, $_); # place the field NAME in an array
  89.     }
  90. }
  91. if(!$VAL[0]){
  92.     # no form fields
  93.     &PrintHead; #print the header
  94.     
  95.     print qq~
  96.     <table width="760">
  97.     <tr>
  98.     <td>
  99.     
  100.     <font face="Arial" size="2">
  101.     This script must be called using a form. Your form should point to this script. Your form tag must contain the following attributes :
  102.     <p>
  103.     &lt;form <font color="#FF0000">action</font>="$ScriptURL" <font color="#FF0000">method</font>="post" <font color="#FF0000">enctype</font>="multipart/form-data">
  104.     <p>
  105.     The <font color="#FF0000">method</font> must equal <font color="#FF0000">post</font> and the <font color="#FF0000">enctype</font> must equal <font color="#FF0000">multipart/form-data</font>. The <font color="#FF0000">action</font> has to point to this script (on your server). If you are reading this, copy and paste the example above. It has the correct values.
  106.     </font>
  107.     
  108.     </td>
  109.     </tr>
  110.     </table>
  111.     ~;
  112.     
  113.     &PrintFoot; # print the footer
  114.     exit;
  115. }
  116. # check domain
  117. if($domain =~ /\w+/){
  118.     if($ENV{HTTP_REFERER} !~ /$domain/i){
  119.         &PrintHead; #print the header
  120.         print qq~
  121.         <table width="600">
  122.         <tr>
  123.         <td>
  124.         <font face="Arial" size="2">
  125.         Invalid referrer.
  126.         </font>
  127.         </td>
  128.         </tr>
  129.         </table>
  130.         ~;
  131.     
  132.         &PrintFoot; # print the footer
  133.         exit;
  134.     }
  135. }
  136. my $failed; # results string = false
  137. my $selected; # num of files selected by user
  138. ####################################################################
  139. ####################################################################
  140. foreach (@files){
  141.     # upload each file, pass the form field NAME if it has a value
  142.     if($GET->param($_)){
  143.         
  144.         # if the form field contains a file name &psjs_upload subroutine
  145.         # the file's name and path are passed to the subroutine
  146.         $returned = &psjs_upload($_);
  147.         
  148.         if($returned =~ /^Success/i){
  149.             # if the $returned message begins with "Success" the upload was succssful
  150.             # remove the word "Success" and any spaces and we're left with the filename   
  151.             $returned =~ s/^Success\s+//;
  152.             push(@success, $returned);
  153.         } else {
  154.             # else if the word "success" is not returned, the message is the error encountered.
  155.             # add the error to the $failed scalar
  156.             $failed .= $returned;
  157.         }
  158.         $selected++; # increment num of files selected for uploading by user
  159.     }
  160. }
  161. if(!$selected){
  162.     # no files were selected by user, so nothing is returned to either variable
  163.     $failed .= qq~No files were selected for uploading~;
  164. }
  165. # if no error message is return ed, the upload was successful
  166. my ($fNames, $aa, $bb, @current, @currentfiles );
  167. if($failed){
  168.     &PrintHead;    
  169.     
  170.     print qq~
  171.     <table align="center" width="600">
  172.     <tr>
  173.     <td><font face="Arial" size="2">
  174.     
  175.     One or more files <font color="#ff0000">failed</font> to upload. The reasons returned are:
  176.     <p>
  177.     
  178.     $failed
  179.     ~;
  180.     
  181.     if($success[0]){
  182.         # send email if valid email was entered
  183.         if(check_email($notify)){
  184.             
  185.             # enter the message you would like to receive
  186.             my $message = qq~
  187.             The following files were uploaded to your server :
  188.             ~;
  189.             
  190.             $folder =~ s/(\/|\\)$//ig;
  191.             foreach(@success){
  192.                 $message .= qq~
  193.                 $folder/$_    
  194.                 ~;
  195.             }
  196.             
  197.             if($isUNIX){
  198.                 $CONFIG{mailprogram} = $send_mail_path;
  199.                 # enter your e-mail name here if you like
  200.                 # from e-mail, from name, to e-mail, to name, subject, body
  201.                 &send_mail($notify, 'File Upload', $notify, 'File Upload', 'Upload Notification', $message);
  202.                 
  203.             } else {
  204.                 $CONFIG{smtppath} = $smtp_path;
  205.                 &send_mail_NT($notify, 'Your Name', $notify, 'Your Name', 'Upload Notification', $message);
  206.             }
  207.         }
  208.     
  209.         print qq~
  210.         <p><font color="#ffffff">
  211.         The following files were <font size="5" color="#ffffff">successfully</font> uploaded :
  212.         <p>
  213.         ~;    
  214.         foreach(@success){
  215.             print qq~
  216.             $_<p>~;
  217.         }
  218.     }
  219.     
  220.     print qq~
  221.     </font></td>
  222.     </tr>
  223.     </table>
  224.     ~;
  225.     
  226.     &PrintFoot;    
  227.     
  228. } else {
  229.     # upload was successful
  230.     
  231.     # add a link to the file
  232.     $folder =~ s/(\/|\\)$//ig;
  233.     
  234.     # send email if valid email was entered
  235.     if(check_email($notify)){
  236.         
  237.         # enter the message you would like to receive
  238.         my $message = qq~
  239.         The following files were uploaded to your server :
  240.         ~;
  241.         
  242.         foreach(@success){
  243.             $message .= qq~
  244.             $folder/$_    
  245.             ~;
  246.         }
  247.         
  248.         if($isUNIX){
  249.             $CONFIG{mailprogram} = $send_mail_path;
  250.             # enter your e-mail name here if you like
  251.             # from e-mail, from name, to e-mail, to name, subject, body
  252.             &send_mail($notify, 'File Upload', $notify, 'File Upload', 'Upload Notification', $message);
  253.             
  254.         } else {
  255.             $CONFIG{smtppath} = $smtp_path;
  256.             &send_mail_NT($notify, 'Your Name', $notify, 'Your Name', 'Upload Notification', $message);
  257.         }
  258.     }
  259.     
  260.     if($redirect){
  261.         # redirect user
  262.         print qq~Location: $redirect\n\n~;
  263.     } else {
  264.         # print success page
  265.         
  266.         &PrintHead;    
  267.         
  268.         print qq~
  269.         <table align="center" width="500">
  270.         <tr>
  271.         <th><font face="Arial" size="5"><font color="#ff0000">Success</font></font></th>
  272.         </tr>
  273.         <tr>
  274.         <td><font face="Arial" size="2" color="ffffff">The following files were successfully uploaded :
  275.         <p>
  276.         ~;
  277.         
  278.         foreach(@success){
  279.             print qq~
  280.             $_<p>~;
  281.         }
  282.         
  283.         print qq~
  284.         </font></td>
  285.         </tr>
  286.         </table>
  287.         
  288.         ~;
  289.         
  290.         if($print_contents){
  291.             print qq~
  292.             <table align="center" width="500">
  293.             <tr><td><font face="Arial" size="2"><b>Current files in folder</b></td></tr>
  294.             <tr>
  295.             <td valign="top">
  296.             <font face="Arial" size="2">
  297.             ~;
  298.             
  299.             opendir(DIR, "$dir");
  300.             @current = readdir(DIR);
  301.             closedir(DIR);
  302.             
  303.             foreach(@current){
  304.                 unless($_ eq '.' || $_ eq '..' || -d qq~$dir/$_~){
  305.                     push(@currentfiles, $_);
  306.                 }
  307.             }
  308.             
  309.             @currentfiles = sort { uc($a) cmp uc($b) } @currentfiles;
  310.             
  311.             for($aa = 0; $aa <= int($#currentfiles / 2); $aa++){
  312.                 print qq~
  313.                 <font color="#ff0000"><b>&#149;</b>
  314.                 <a href="$folder/$currentfiles[$aa]" target="_blank">$currentfiles[$aa]</a></font>
  315.                 ~;
  316.             }
  317.             
  318.             print qq~</font></td><td valign="top"><font face="Arial" size="2">~;
  319.             
  320.             for($bb = $aa; $bb < @currentfiles; $bb++){
  321.                 print qq~
  322.                 <font color="#ff0000"><b>&#149;</b>
  323.                 <a href="$folder/$currentfiles[$bb]" target="_blank">$currentfiles[$bb]</a></font>
  324.                 ~;
  325.             }
  326.             
  327.             
  328.             print qq~
  329.             </font></td>
  330.             </tr>
  331.             </table>~;
  332.         }
  333.         
  334.         print qq~
  335. ~;
  336.         
  337.         &PrintFoot;    
  338.     
  339.     }
  340. }
  341. ####################################################################
  342. ####################################################################
  343. sub psjs_upload {
  344.     my ( $type_ok, $file_contents, $buffer, $destination ); # declare some vars
  345.     my $file = $GET->param($_[0]); # get the FILE name. $_[0] is the arg passed
  346.     
  347.     $destination = $dir;
  348.     
  349.     my $limit = $max;
  350.     $limit *= 1024; # convert limit from bytes to kilobytes
  351.     
  352.     # create another instance of the $file var. This will allow the script to play
  353.     # with the new instance, without effecting the first instance. This was a major
  354.     # flaw I found in the psupload script. The author was replacing spaces in the path
  355.     # with underscores, so the script could not find a file to upload. He blammed the
  356.     # error on browser problems.
  357.     my $fileName    = $file;
  358.     
  359.     # get the extension
  360.     my @file_type   = split(/\./, $fileName);
  361.     # we can assume everything after the last . found is the extension
  362.     my $file_type   = $file_type[$#file_type];
  363.     
  364.     # get the file name, this removes everything up to and including the
  365.     # last slash found ( be it a forward or back slash )
  366.     $fileName =~ s/^.*(\\|\/)//;
  367.     
  368.     # remove all spaces from new instance of filename var
  369.     $fileName =~ s/\s+//ig;
  370.     
  371.     # check for any any non alpha numeric characters in filename (allow dots and dahses)
  372.     $fileName =~ s/\./PsJsDoT/g;
  373.     $fileName =~ s/\-/PsJsDaSh/g;
  374.     if($fileName =~ /\W/){
  375.         $fileName =~ s/\W/n/ig; # replace any bad chars with the letter "n"
  376.     }
  377.     $fileName =~ s/PsJsDoT/\./g;
  378.     $fileName =~ s/PsJsDaSh/\-/g;
  379.     
  380.     # if $file_type matchs one of the types specified, make the $type_ok var true
  381.     for($b = 0; $b < @types; $b++){
  382.         if($file_type =~ /^$types[$b]$/i){
  383.             $type_ok++;
  384.         }
  385.         if($types[$b] eq "ALL"){
  386.             $type_ok++; # if ALL keyword is found, increment $type_ok var.
  387.         }
  388.     }
  389.     
  390.     # if ok, check if overwrite is allowed
  391.     if($type_ok){
  392.         if(!$overwrite){ # if $overwite = 0 or flase, rename file using the checkex sub
  393.             $fileName = check_existence($destination,$fileName);
  394.         }
  395.         # create a new file on the server using the formatted ( new instance ) filename
  396.         if(open(NEW, ">$destination$S{S}$fileName")){
  397.             $VAR{err} .= $!;
  398.             if($isWIN){binmode NEW;} # if it's a WIN server, switch to binary mode
  399.             # start reading users HD 1 kb at a time.
  400.             while (read($file, $buffer, 1024)){
  401.                 # print each kb to the new file on the server
  402.                 print NEW $buffer;
  403.             }
  404.             # close the new file on the server and we're done
  405.             close NEW;
  406.         } else {
  407.             # return the server's error message if the new file could not be created
  408.             return qq~Error: Could not open new file on server. $!~;
  409.         }
  410.         # check limit hasn't just been overshot
  411.         if(-s "$destination$S{S}$fileName" > $limit){ # -s is the file size
  412.             unlink("$destination$S{S}$fileName"); # delete it if it's over the specified limit
  413.             return qq~File exceeded limitations : $fileName~;
  414.         }
  415.     } else {
  416.         return qq~Bad file type : $file_type~;
  417.     }
  418.             
  419.     # check if file has actually been uploaded, by checking the file has a size
  420.     if(-s "$destination$S{S}$fileName"){
  421.         return qq~Success $fileName~; #success
  422.     } else {
  423.         # delete the file as it has no content
  424.         unlink("$destination$S{S}$fileName");
  425.         # user probably entered an incorrect path to file
  426.         return qq~Upload failed : No data in $fileName. No size on server's copy of file.
  427.         Check the path entered. $VAR{err}~;
  428.     }
  429. }
  430. ####################################################################
  431. ####################################################################
  432. sub check_existence {
  433.     # $dir,$filename,$newnum are the args passed to this sub
  434.     my ($dir,$filename,$newnum) = @_;
  435.     
  436.     my (@file_type, $file_type, $exists, $bareName);
  437.     # declare some vars we will use later on in this sub always use paranthesis
  438.     # when declaring more than one var! Some novice programmers will tell you
  439.     # this is not necessary. Tell them to learn how to program.
  440.     
  441.     if(!$newnum){$newnum = "0";} # new num is empty in first call, so set it to 0
  442.     
  443.     # read dir and put all files in an array (list)
  444.     opendir(DIR, "$dir");
  445.     @existing_files =  readdir(DIR);
  446.     closedir(DIR);
  447.     
  448.     # if the filename passed exists, set $exists to true or 1
  449.     foreach(@existing_files){
  450.         if($_ eq $filename){
  451.             $exists = 1;
  452.         }
  453.     }
  454.     
  455.     # if it exists, we need to rename the file being uploaded and then recheck it to
  456.     # make sure the new name does not exist
  457.     if($exists){
  458.         $newnum++; # increment new number (add 1)
  459.         # get the extension
  460.         @file_type   = split(/\./, $filename); # split the dots and add inbetweens to a list
  461.         # put the first element in the $barename var
  462.         $bareName    = $file_type[0];
  463.         # we can assume everything after the last . found is the extension
  464.         $file_type   = $file_type[$#file_type];
  465.         # $#file_type is the last element (note the pound or hash is used)
  466.         
  467.         # remove all numbers from the end of the $bareName
  468.         $bareName =~ s/\d+$//ig;
  469.         
  470.         # concatenate a new name using the barename + newnum + extension
  471.         $filename = $bareName . $newnum . '.' . $file_type;
  472.         
  473.         # reset $exists to 0 because the new file name is now being checked
  474.         $exists = 0;
  475.         
  476.         # recall this subroutine
  477.         &check_existence($dir,$filename,$newnum);
  478.     } else {
  479.         # the $filename, whether the first or one hundreth call, now does not exist
  480.         # so return the name to be used
  481.         return ($filename);
  482.     }
  483. }
  484. ####################################################################
  485. ####################################################################
  486. sub send_mail {
  487.     my ($from_email, $from_name, $to_email, $to_name, $subject, $message ) = @_;
  488.     
  489.     if(open(MAIL, "|$CONFIG{mailprogram} -t")) {
  490.         print MAIL "From: $from_email ($from_name)\n";
  491.         print MAIL "To: $to_email ($to_name)\n";
  492.         print MAIL "Subject: $subject\n";
  493.         print MAIL "$message\n\nSubmitter's IP Address : $ENV{REMOTE_ADDR}";
  494.         close MAIL;
  495.         return(1);
  496.     } else {
  497.         return;
  498.     }
  499. }
  500. ####################################################################
  501. ####################################################################
  502. sub send_mail_NT {
  503.     
  504.     my ($from_email, $from_name, $to_email, $to_name, $subject, $message ) = @_;
  505.     
  506.     my ($SMTP_SERVER, $WEB_SERVER, $status, $err_message);
  507.     use Socket;
  508.     $SMTP_SERVER = "$CONFIG{smtppath}";                                 
  509.     
  510.     # correct format for "\n"
  511.     local($CRLF) = "\015\012";
  512.     local($SMTP_SERVER_PORT) = 25;
  513.     local($AF_INET) = ($] > 5 ? AF_INET : 2);
  514.     local($SOCK_STREAM) = ($] > 5 ? SOCK_STREAM : 1);
  515.     local(@bad_addresses) = ();
  516.     $, = ', ';
  517.     $" = ', ';
  518.     $WEB_SERVER = "$CONFIG{smtppath}\n";
  519.     chop ($WEB_SERVER);
  520.     local($local_address) = (gethostbyname($WEB_SERVER))[4];
  521.     local($local_socket_address) = pack('S n a4 x8', $AF_INET, 0, $local_address);
  522.     local($server_address) = (gethostbyname($SMTP_SERVER))[4];
  523.     local($server_socket_address) = pack('S n a4 x8', $AF_INET, $SMTP_SERVER_PORT, $server_address);
  524.     # Translate protocol name to corresponding number
  525.     local($protocol) = (getprotobyname('tcp'))[2];
  526.     # Make the socket filehandle
  527.     if (!socket(SMTP, $AF_INET, $SOCK_STREAM, $protocol)) {
  528.         return;
  529.     }
  530.     # Give the socket an address
  531.     bind(SMTP, $local_socket_address);
  532.     
  533.     # Connect to the server
  534.     if (!(connect(SMTP, $server_socket_address))) {
  535.         return;
  536.     }
  537.     
  538.     # Set the socket to be line buffered
  539.     local($old_selected) = select(SMTP);
  540.     $| = 1;
  541.     select($old_selected);
  542.     
  543.     # Set regex to handle multiple line strings
  544.     $* = 1;
  545.     # Read first response from server (wait for .75 seconds first)
  546.     select(undef, undef, undef, .75);
  547.     sysread(SMTP, $_, 1024);
  548.     #print "<P>1:$_";
  549.     print SMTP "HELO $WEB_SERVER$CRLF";
  550.     sysread(SMTP, $_, 1024);
  551.     #print "<P>2:$_";
  552.     while (/(^|(\r?\n))[^0-9]*((\d\d\d).*)$/g) { $status = $4; $err_message = $3}
  553.     if ($status != 250) {
  554.         return;
  555.     }
  556.     print SMTP "MAIL FROM:<$from_email>$CRLF";
  557.     sysread(SMTP, $_, 1024);
  558.     #print "<P>3:$_";
  559.     if (!/[^0-9]*250/) {
  560.         return;
  561.     }
  562.     # Tell the server where we're sending to
  563.     print SMTP "RCPT TO:<$to_email>$CRLF";
  564.     sysread(SMTP, $_, 1024);
  565.     #print "<P>4:$_";
  566.     /[^0-9]*(\d\d\d)/;
  567.     # Give the server the message header
  568.     print SMTP "DATA$CRLF";
  569.     sysread(SMTP, $_, 1024);
  570.     #print "<P>5:$_";
  571.     if (!/[^0-9]*354/) {
  572.         return;
  573.     }
  574.     $message =~ s/\n/$CRLF/ig;
  575.     
  576.     print SMTP qq~From: $from_email ($from_name)$CRLF~;
  577.     print SMTP qq~To: $to_email ($to_name)$CRLF~;
  578.     if($cc){
  579.         print SMTP "CC: $cc ($cc_name)\n";
  580.     }
  581.     print SMTP qq~Subject: $subject$CRLF$CRLF~;
  582.     print SMTP qq~$message~;
  583.     print SMTP "$CRLF.$CRLF";
  584.     sysread(SMTP, $_, 1024);
  585.     #print "<P>6:$_";
  586.     if (!/[^0-9]*250/) {
  587.         return;
  588.     } else {
  589.         return(1);
  590.     }
  591.     if (!shutdown(SMTP, 2)) {
  592.         return;
  593.     }
  594. }
  595. ####################################################################
  596. ####################################################################
  597. sub PrintHead {
  598.     print qq~Content-type: text/html\n\n~;
  599.     print qq~
  600.     <html>
  601.     <title>Upload Utility</title>
  602.     <style type="text/css">
  603.     <!---
  604.     
  605.     a:link {color: white; }
  606.     a:hover {color: white; text-decoration: none; }    
  607.     a:active {color: white; text-decoration: underline; }
  608.     //-->
  609.     </style>
  610.     <body bgcolor="#000080">
  611.     ~;
  612. }
  613. ####################################################################
  614. ####################################################################
  615. sub PrintFoot {
  616.     print qq~
  617.     </body>
  618.     </html>
  619.     ~;
  620. }
  621. ####################################################################
  622. ####################################################################
  623. sub check_email {
  624.     my($fe_email) = $_[0];
  625.     if($fe_email) {
  626.         if(($fe_email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) ||
  627.         ($fe_email !~ /^.+@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/)) {
  628.             return;
  629.         } else { return(1) }
  630.     } else {
  631.         return;
  632.     }
  633. }


I removed as much lines as possible, to make it a bit more compact.

» Post edited 2005-07-24, 02:43am by No--Name.
 
  Reply to this ·  Post link ·  Top

Pages: 1

Please login or register to post a reply.

icons