; MIME64
;
; Program for Proteus
;
; (C) 1998-2004 Simone Zanella Productions
;
; This program write to output an encoded Mime Base 64 version
; of the first file specified.
IF ISEMPTY(ARGV(5))
CONSOLELN "Syntax: " ARGV(1) " " ARGV(2) \
" .. destination [filename]"
CONSOLELN ""
CONSOLELN "Purpose: write to destination an encoded Mime Base 64 version " \
"of filename"
ABORT 0
FI
H = FOPEN(ARGV(5), 1)
IF EQ(H, -1)
CONSOLELN "File \"" ARGV(5) "\" not found."
ABORT 1
FI
PRINTLN "Content-Type: text/plain; charset=US-ASCII; name=\"" \
QualifyName(ARGV(5)) "\""
PRINTLN "Content-transfer-encoding: base64"
PRINTLN ""
OutputLen = 60
InputLen = 45
B64Par = VECCREATE(0, 0, 0)
Status = 0
LastEOF = 1
WHILE NOT(FEOF(H))
S = FREAD(H, InputLen)
; Save EOF value passed to MIME64
LastEOF = LT(STRLEN(S), InputLen)
MIME64(@S, @Status, B64Par, LastEOF)
SWITCH Status
ON 0
; No additional character
PRINTLN S
OTHER
; Split the line into two lines only if longer than OutputLen
IF GT(STRLEN(S), OutputLen)
D = SUB(STRLEN(S), OutputLen)
C = RIGHT(S, D)
S = LEFT(S, SUB(STRLEN(S), D))
PRINTLN S
PRINTLN C
ELSE
PRINTLN S
FI
OFF
LOOP
; Take care of remaining bytes from B64Par (in case last line was not complete)
IF NOT(LastEOF)
S = ""
MIME64(@S, @Status, B64Par, 1)
PRINTLN S
FI
FCLOSE(H)
ABORT 0
FUNCTION QualifyName(s)
!ifdef UNIX
p = STRRSTR(s, "/")
!else
p = STRRSTR(s, "\\")
!endif
IF p
s = RESTFROM(s, INC(p))
FI
RETURN s