| 
        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