qp-encode.awk.in
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. #! @AWK@ -f
  2. #      $Id: qp-encode.awk.in,v 1.1 2007/08/22 05:09:21 faxguy Exp $
  3. #
  4. # HylaFAX Facsimile Software
  5. #
  6. # Copyright 2006 Patrice Fournier
  7. # Copyright 2006 iFAX Solutions Inc.
  8. #
  9. # Permission to use, copy, modify, distribute, and sell this software and 
  10. # its documentation for any purpose is hereby granted without fee, provided
  11. # that (i) the above copyright notices and this permission notice appear in
  12. # all copies of the software and related documentation, and (ii) the names of
  13. # Sam Leffler and Silicon Graphics may not be used in any advertising or
  14. # publicity relating to the software without the specific, prior written
  15. # permission of Sam Leffler and Silicon Graphics.
  16. # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  17. # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  18. # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  19. # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20. # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21. # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22. # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23. # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24. # OF THIS SOFTWARE.
  25. #
  26. function qp_lc(c)
  27. {
  28.   # Space (32) and tab (9) must be encoded at the end of line.
  29.   if (c == " ")
  30.     return "=20";
  31.   else if (c == "t")
  32.     return "=09";
  33.   else
  34.     return _qp[c];
  35. }
  36. function qp(c)
  37. {
  38.   return _qp[c];
  39. }
  40. BEGIN {
  41.   FS = "n";
  42.   # Space (32) and tab (9) are only encoded at the end of line.
  43.   for (i = 0; i < 256; i++) {
  44.     c = sprintf("%c", i);
  45.     if (i == 9 || (i >= 32 && i <= 60) || (i >= 62 && i <= 126))
  46.       _qp[c] = c;
  47.     else
  48.       _qp[c] = sprintf("=%02X", i);
  49.   }
  50. }
  51. {
  52.   l=0;
  53.   out="";
  54.   len=length();
  55.   if (len > 0)
  56.   {
  57.     for (i=1; i<len; i++)
  58.       out = out qp(substr($0, i, 1));
  59.     out = out qp_lc(substr($0, len, 1));
  60.     # Quoted-Printable lines must be no more than 76 characters
  61.     # (including soft break)
  62.     while (length(out) > 75)
  63.     {
  64.       end = 75;
  65.       while (substr(out, end, 1) == "=" || substr(out, end-1, 1) == "=")
  66.         end--;
  67.       print substr(out, 1, end) "=";
  68.       out = substr(out, end+1);
  69.     }
  70.   }
  71.   print out;
  72. }