'===========================================================================
' Subject: BASE64 ENCODER                     Date: 09-16-00 (19:35)       
'  Author: Michael G. Stewart                 Code: LB                     
'  Origin: mikegs@juno.com                  Packet: LIBERTY.ABC
'===========================================================================
'works with LB1.42w, and should work with LB2.0, but not tested.

[base64encode]
'required variables:
' base64string$ - the string to be encoded
'returns:
' base64encoded$ - the base64 encoded string
'uses:
' with tcp4w.dll for HTTP user authentication.
base64code$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
'convert to binary
for b64a = 1 to len(base64string$)
  base64char = asc(mid$(base64string$, a, 1))
  if base64char >= 128 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 128
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 64 then
    base64bin$=bin$+"1"
    base64char = base64char - 64
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 32 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 32
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 16 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 16
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 8 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 8
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 4 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 4
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 2 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 2
  else
    base64bin$=base64bin$+"0"
  end if
  if base64char >= 1 then
    base64bin$=base64bin$+"1"
    base64char = base64char - 1
  else
    base64bin$=base64bin$+"0"
  end if
next b64a
'make it a multiple of 6 bits.
if (len(base64bin$)/6)-int(len(base64bin$)/6) <> 0 then
  for b64a = 1 to ((len(base64bin$)/6)-int(len(base64bin$)/6))*6
    base64bin$ = base64bin$ + "0"
  next b64a
end if
'convert each 6-bit "byte" into a char
for b64a = 1 to len(base64bin$) step 6
  b64temp$ = mid$(base64bin$, b64a, 6)     
  base64char = 0
  if mid$(b64temp$, 1, 1) = "1" then base64char = base64char + 32
  if mid$(b64temp$, 2, 1) = "1" then base64char = base64char + 16
  if mid$(b64temp$, 3, 1) = "1" then base64char = base64char + 8
  if mid$(b64temp$, 4, 1) = "1" then base64char = base64char + 4
  if mid$(b64temp$, 5, 1) = "1" then base64char = base64char + 2
  if mid$(b64temp$, 6, 1) = "1" then base64char = base64char + 1
  base64encoded$ = base64encoded$ + mid$(base64code$, base64char, 1)
next b64a
'add on padding to make it a multiple of 4bytes.
if (len(base64encoded$)/4)-int(len(base64encoded$)/4) <> 0 then
  for b64a = 1 to ((len(base64encoded$)/4)-int(len(base64encoded$)/4))*4
    base64encoded$ = base64encoded$ + "="
  next b64a
end if
return
