procmail
[Top] [All Lists]

base64-decoding (v.0.99) with 'just' procmail

2004-03-05 00:25:41
# Filename: base64.rc.inc
# -----------------------

  asc = " !\"#$%& ()*+,-./0123456789:;<=>?(_at_)ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
abcdefghijklmnopqrstuvwxyz{|}"
  b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

  dot = "."
  maxSc = 2147483647
  asc_1 asc_2 asc_3

  :0
  *$ b64_Input ?? ^^$\b64_Prefix\/[$b64][$b64=][$b64=][$b64=]
  {

    b64_Cur = $MATCH
    b64_Prefix = "$b64_Prefix$b64_Cur"

    :0
    * b64_Cur ?? ^^\/.
    {
      :0D
      *$ b64 ?? ^^\/[^$MATCH]*
      *  1^1 MATCH ?? .
      { } b64_1 = $=
    }
    :0
    * b64_Cur ?? ^^.\/.
    {
      :0D
      *$ b64 ?? ^^\/[^$MATCH]*
      *  1^1 MATCH ?? .
      { } b64_2 = $=
    }
    :0
    * b64_Cur ?? ^^..\/.
    {
      :0D
      *$ b64 ?? ^^\/[^$MATCH]*
      *  1^1 MATCH ?? .
      { } b64_3 = $=
    }
    :0
    * b64_Cur ?? ^^...\/.
    {
      :0D
      *$ b64 ?? ^^\/[^$MATCH]*
      *  1^1 MATCH ?? .
      { } b64_4 = $=
    }

#---calculate b64_2 DIV 16
  b64_2_div16 = 0
  :0
  *       1 ^ 0
  *$ $b64_2 ^ 0
  *     -16 ^ 0
  {
    :0
    *$ dot ?? $b64_2 ^ 1 > 16
    { b64_2_div16 = $= }
  }
#---calculate b64_3 DIV 4
  b64_3_div4 = 0
  :0
  *       1 ^ 0
  *$ $b64_3 ^ 0
  *      -4 ^ 0
  {
    :0
    *$ dot ?? $b64_3 ^ 1 > 4
    { b64_3_div_4 = $= }
  }
#---
  asc_1=0 asc_2=0 asc_3=0
#---calculate 1st ascii character
#   a1 = (b1 SHL 2) OR (b2 SHR 4) = b1 * 4 + (b2 DIV 16)
  :0
  *$ dot ?? $b64_1       ^ 1 < 4
  *$        $b64_2_div16 ^ 0
  { asc_1 = $= }
#---calculate 2nd ascii character
#   a2 = ((b2 MOD 16) SHL 4) OR (b3 SHR 2) = (b2 - 16 * (b2 DIV 16)) * 16
+ (b3 DIV 4)
  :0
  *$        $b64_2       ^ 0
  *$ dot ?? $b64_2_div16 ^ 1 < -16
  { asc_2 = $= }
  :0
  *$ dot ?? $asc_2       ^ 1 < 16
  *$        $b64_3_div_4 ^ 0
  { asc_2 = $= }
#---calculate 3rd ascii character
#   a3 = ((b3 MOD 4) SHL 6) OR b4 = (b3 - 4 * (b3 DIV 4)) * 64 + b4
  :0
  *$        $b64_3       ^ 0
  *$ dot ?? $b64_3_div_4 ^ 1 < -4
  { asc_3 = $= }
  :0
  *$ dot ?? $asc_3 ^ 1 < 64
  *$        $b64_4 ^ 0
  { asc_3 = $= }

#  b64_Return = "$asc_1 $asc_2 $asc_3"

#---convert numerical values to ascii characters
    MATCH
    :0
    *       -1 ^ 0
    *$ -$asc_1 ^ 0
    *       32 ^ 0
    *$  $maxSc ^ 0
    *        1 ^ 1 asc ?? ()\/.
    * MATCH ?? .
    { asc_1 = $MATCH }
    :0E
    {
      asc_1 = " " # "<$asc_1>"
    }

    MATCH
    :0
    *       -1 ^ 0
    *$ -$asc_2 ^ 0
    *       32 ^ 0
    *$  $maxSc ^ 0
    *        1 ^ 1 asc ?? ()\/.
    * MATCH ?? .
    { asc_2 = $MATCH }
    :0E
    {
      asc_2 = " " # "<$asc_2>"
    }

    MATCH
    :0
    *       -1 ^ 0
    *$ -$asc_3 ^ 0
    *       32 ^ 0
    *$  $maxSc ^ 0
    *        1 ^ 1 asc ?? ()\/.
    * MATCH ?? .
    { asc_3 = $MATCH }
    :0E
    {
      asc_3 = " " #"<$asc_3>"
    }

  }
#---
  b64_Return = "$asc_1$asc_2$asc_3"
#EOF





# Filename: base64.rc  (usage: procmail base64.rc < /dev/null)
# ------------------------------------------------------------

SHELLMETAS
#VERBOSE=on

  NL="
" b64_Prefix = ""
  b64_Input  =
"UEsDBAoAAQAAAEA0ZDCf4kJRDDAAAAAwAAANAAAAdHhidHZ5cWJtLmV4ZRZiZIuvB/ULLpVU"

  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return
  INCLUDERC = $_.inc
  LOG = $b64_Return

  LOG = "$NL$NL"

 :0
 /dev/null

#EOF

-- 
Affijn, Ruud


_______________________________________________
procmail mailing list
procmail(_at_)lists(_dot_)RWTH-Aachen(_dot_)DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/procmail