home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / smartcache / src / HTUU.java < prev    next >
Text File  |  2001-01-26  |  7KB  |  178 lines

  1. /*                                     HTUU.c
  2. **    UUENCODE AND UUDECODE
  3. **
  4. **  COPYRIGHT 1995 BY: MASSACHUSETTS INSTITUTE OF TECHNOLOGY (MIT), INRIA
  5. **
  6. ** This W3C software is being provided by the copyright holders under the
  7. ** following license. By obtaining, using and/or copying this software, you
  8. ** agree that you have read, understood, and will comply with the following
  9. ** terms and conditions:
  10. ** 
  11. ** Permission to use, copy, modify, and distribute this software and its
  12. ** documentation for any purpose and without fee or royalty is hereby granted,
  13. ** provided that the full text of this _NOTICE_ appears on ALLcopies of the
  14. ** software and documentation or portions thereof, including modifications,
  15. ** that you make.
  16. ** 
  17. ** _THIS SOFTWARE IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
  18. ** REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT
  19. ** NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF
  20. ** MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE
  21. ** SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS,
  22. ** COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO
  23. ** LIABILITY FOR ANY USE OF THIS SOFTWARE OR DOCUMENTATION._
  24. ** 
  25. ** The name and trademarks of copyright holders may NOTbe used in advertising
  26. ** or publicity pertaining to the software without specific, written prior
  27. ** permission. Title to copyright in this software and any associated
  28. ** documentation will at all times remain with copyright holders.
  29. **
  30. **    @(#) $Id: HTUU.c,v 2.12 1996/04/12 17:49:34 frystyk Exp $
  31. **
  32. ** ACKNOWLEDGEMENT:
  33. **    This code is taken from rpem distribution, and was originally
  34. **    written by Mark Riordan.
  35. **
  36. ** AUTHORS:
  37. **    MR    Mark Riordan    riordanmr@clvax1.cl.msu.edu
  38. **    AL    Ari Luotonen    luotonen@dxcern.cern.ch
  39. **     HSN      Radim Kolar     hsn@cybermail.net
  40. **
  41. ** HISTORY:
  42. **      Rewritten to Java                              HSN  1 Dec 1998
  43. **    Added as part of the WWW library and edited to conform
  44. **    with the WWW project coding standards by:    AL  5 Aug 1993
  45. **    Originally written by:                MR 12 Aug 1990
  46. **    Original header text:
  47. ** -------------------------------------------------------------
  48. **  File containing routines to convert a buffer
  49. **  of bytes to/from RFC 1113 printable encoding format.
  50. **
  51. **  This technique is similar to the familiar Unix uuencode
  52. **  format in that it maps 6 binary bits to one ASCII
  53. **  character (or more aptly, 3 binary bytes to 4 ASCII
  54. **  characters).  However, RFC 1113 does not use the same
  55. **  mapping to printable characters as uuencode.
  56. **
  57. **  Mark Riordan   12 August 1990 and 17 Feb 1991.
  58. **  This code is hereby placed in the public domain.
  59. ** -------------------------------------------------------------
  60. **
  61. ** BUGS:
  62. **
  63. **
  64. */
  65.  
  66. /* Library include files */
  67. public final class HTUU
  68. {
  69.  
  70.  
  71.  private final static byte six2pr[] = {
  72.     // 'A','B','C','D','E','F','G','H','I','J','K','L','M',
  73.         65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
  74.     // 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
  75.         78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
  76.     // 'a','b','c','d','e','f','g','h','i','j','k','l','m',
  77.       97,  98, 99, 100,101,102,103,104,105,106,107,108,109,
  78.     // 'n','o','p','q','r','s','t','u','v','w','x','y','z',
  79.       110, 111,112,113,114,115,116,117,118,119,120,121,122,
  80.     // '0','1','2','3','4','5','6','7','8','9','+','/'
  81.         48, 49, 50, 51, 52, 53, 54, 55, 56, 57,43,47
  82. };
  83.  
  84. private static byte pr2six[]=new byte[256];
  85. // unsigned
  86.  
  87. /*--- function HTUU_encode -----------------------------------------------
  88.  *
  89.  *   Encode a single line of binary data to a standard format that
  90.  *   uses only printing ASCII characters (but takes up 33% more bytes).
  91.  *
  92.  *    Entry    bufin    points to a buffer of bytes.  If nbytes is not
  93.  *                      a multiple of three, then the byte just beyond
  94.  *                      the last byte in the buffer must be 0.
  95.  *             nbytes   is the number of bytes in that buffer.
  96.  *                      This cannot be more than 48.
  97.  *             bufcoded points to an output buffer.  Be sure that this
  98.  *                      can hold at least 1 + (4*nbytes)/3 characters.
  99.  *
  100.  *    Exit     bufcoded contains the coded line.  The first 4*nbytes/3 bytes
  101.  *                      contain printing ASCII characters representing
  102.  *                      those binary bytes. This may include one or
  103.  *                      two '=' characters used as padding at the end.
  104.  *                      The last byte is a zero byte.
  105.  *             Returns the number of ASCII characters in "bufcoded".
  106.  */
  107.  
  108. public final static byte[] encode (String s)
  109. {
  110.  return encode(s.getBytes());
  111. }
  112.  
  113. public final static String encode_string (String s)
  114. {
  115.  byte ascii[]=encode(s.getBytes());
  116.  return new String(ascii, 0, 0, ascii.length);
  117. }
  118.  
  119. public final static byte[] encode (byte bufin[])
  120. {
  121. /* ENC is the basic 1 character encoding function to make a char printing */
  122. // #define ENC(c) six2pr[c]
  123.  
  124.    int nbytes=bufin.length;
  125.    byte bufcoded[];
  126.    
  127.    if(nbytes % 3 == 0)
  128.     {
  129.      bufcoded=new byte[4*nbytes/3];
  130.     }
  131.    else
  132.     {
  133.      bufcoded=new byte[ (nbytes/3+1)*4];
  134.      byte tmp[];
  135.      tmp=new byte[(nbytes/3+1)*3];
  136.      System.arraycopy(bufin,0,tmp,0,nbytes);
  137.      bufin=tmp;
  138.     }
  139.    
  140.    // register char *outptr = bufcoded;
  141.    int outptr=0;
  142.    int i;
  143.    
  144.    for (i=0; i<nbytes; i += 3) {
  145.       //*(outptr++) = ENC(*bufin >> 2);            
  146.       bufcoded[outptr++] = six2pr[ bufin[i] >>2 ]; 
  147.       
  148.       //*(outptr++) = ENC(((*bufin << 4) & 060) | ((bufin[1] >> 4) & 017)); /*c2*/
  149.       bufcoded[outptr++]= six2pr [ (( bufin[i] <<4) & 060 ) | ((bufin[i+1] >>4) & 017) ];
  150.       
  151.       // *(outptr++) = ENC(((bufin[1] << 2) & 074) | ((bufin[2] >> 6) & 03));/*c3*/
  152.       bufcoded[outptr++]= six2pr[ ((bufin[i+1]<<2) & 074) | ((bufin[i+2] >> 6) &03)   ];
  153.       // *(outptr++) = ENC(bufin[2] & 077);         /* c4 */
  154.       bufcoded[outptr++]= six2pr[bufin[i+2] & 077];
  155.       //bufin += 3;
  156.    }
  157.  
  158.    /* If nbytes was not a multiple of 3, then we have encoded too
  159.     * many characters.  Adjust appropriately.
  160.     */
  161.    if(i == nbytes+1) {
  162.       /* There were only 2 bytes in that last group */
  163.       bufcoded[outptr-1] = 61;
  164.    } else if(i == nbytes+2) {
  165.       /* There was only 1 byte in that last group */
  166.       bufcoded[outptr-1] = 61;
  167.       bufcoded[outptr-2] = 61;
  168.    }
  169.    // *outptr = '\0';
  170.   // return(outptr - bufcoded);
  171.   //for(i=0;i<bufcoded.length;i++)
  172.   // System.out.print((char)bufcoded[i]);
  173.   return bufcoded;
  174. }
  175.  
  176.  
  177. }
  178.