Programma di esempio MIME64.PRT |
; MIME64
;
; Programma per Proteus
;
; (C) 1998-2003 Simone Zanella Productions
;
; Questo programma scrive sull'uscita una versione codificata Mime Base 64
; del primo file specificato.
IF ISEMPTY(ARGV(5))
CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) \
" .. destinazione [nomefile]"
CONSOLELN ""
CONSOLELN "Scopo: scrive su destinazione una versione " \
"Mime Base 64 di nomefile"
ABORT 0
FI
H = FOPEN(ARGV(5), 1)
IF EQ(H, -1)
CONSOLELN "File \"" ARGV(5) "\" non trovato."
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)
; Salva il valore di EOF passato a MIME64
LastEOF = LT(STRLEN(S), InputLen)
MIME64(@S, @Status, B64Par, LastEOF)
SWITCH Status
ON 0
; Nessun carattere addizionale
PRINTLN S
OTHER
; Suddivide la linea in due linee solo se pił lunga di 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
; Si prende cura dei bytes residui in B64Par (nel caso l'ultima riga non
; fosse completa)
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