PX : code

uuencode/uudecode by David Sklar
Download this code


<?php

/* UUCoder by David Sklar <sklar@student.net> 13 Jul 1999
   Converted to PHP from the C in the WWW common library (distributed
   with Lynx) which says:
** ACKNOWLEDGEMENT:
**
This code is taken from rpem distribution, and was originally
**
written by Mark Riordan.
**
** AUTHORS:
**
MR
Mark Riordan    riordanmr@clvax1.cl.msu.edu
**
AL
Ari Luotonen    luotonen@dxcern.cern.ch
**
** HISTORY:
**
Added as part of the WWW library and edited to conform
**
with the WWW project coding standards by:    AL  5 Aug 1993
**
Originally written by:                MR 12 Aug 1990
**
Original header text:
*/

class UUCoder {
    
/* encoded -> printable mapping */
    
var $six2prABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/;
    var 
$pr2six;

    function 
UUCoder() {
    
/* set up printable -> encoded mapping */
    
for ($i 0$j strlen($this->six2pr); $i $j$i++) {
        
$this->pr2six[$this->six2pr[$i]] = $i;
    }
    }

    function 
safe_substr($buf,$pos,$len) {
    if (
$pos $len) {
        return 
ord($buf[$pos]);
    } else {
        return 
0;
    }
    }

    function 
decode($in) {
    
/* Strip leading whitespace. */
    
$in ltrim($in);
    
    
$out = ;  $i 0$j strlen($in) - 3;
    while (
$i $j) {
        
$out .= chr($this->pr2six[$in[$i]] << |
            
$this->pr2six[$in[$i+1]] >> 4);
        
$out .= chr($this->pr2six[$in[$i+1]] << |
            
$this->pr2six[$in[$i+2]] >>2);
        
$out .= chr($this->pr2six[$in[$i+2]] << |
            
$this->pr2six[$in[$i+3]]);
        
$i += 4;
    }
    return 
$out;
    }

    function 
encode($in) {
    
$out = ;
    
    for (
$i=0$j strlen($in); $i $j$i += 3) {
        
$out .= $this->six2pr[$this->safe_substr($in,$i,$j)>>2];
        
$out .= $this->six2pr[(($this->safe_substr($in,$i,$j) << 4) &060)|
                  ((
$this->safe_substr($in,$i+1,$j) >>4)&017)];
        
$out .= $this->six2pr[(($this->safe_substr($in,$i+1,$j)<<2)&074) |
                  ((
$this->safe_substr($in,$i+2,$j) >> 6)&03)];
        
$out .= $this->six2pr[$this->safe_substr($in,$i+2,$j) & 077];
    }
    
    
/* Adjust if the # of characters we should have encoded isn\'t
     * a multiple of 3 */
    
if ($i == $j+1) {
        
/* There were only 2 bytes in that last group */
        
$out[strlen($out)-1] = =;
    } elseif (
$i == $j+2) {
        
/* There was only 1 byte in that last group */
        
$k strlen($out);
        
$out[$k-1] = $out[$k-2] = =;
    }
    
    return 
$out;
    }
}
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.