Programma di esempio DEMIME64.PRT |
; DEMIME64
;
; Programma per Proteus
;
; (C) 1998-2003 Simone Zanella Productions
;
; Questo programma decodifica nel file originale un testo codificato secondo
; Mime Base 64. Se il file esiste, è sovrascritto; non sono ammesse sezioni
; multiple.
; Parametri impliciti: input e output predefiniti nulli
;!proteus -z
IF ISEMPTY(ARGV(5))
CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) \
" [nomefile [destinazione]]"
CONSOLELN ""
CONSOLELN "Scopo: decodifica nel file originale un testo " \
"codificato Mime Base 64."
CONSOLELN "Se il file destinazione esiste, e' sovrascritto."
CONSOLELN "Se \"destinazione\" e' specificato, il nome indicato " \
"e' utilizzato"
CONSOLELN "per l'uscita."
CONSOLELN "Sezioni multiple non sono ammesse."
ABORT 0
FI
H = FOPEN(ARGV(5), 1)
IF EQ(H, -1)
CONSOLELN "File \"" ARGV(5) "\" non trovato."
ABORT 1
FI
Found = 0
Status = 0
B64Par = VECCREATE(0, 0, 0)
WHILE NOT(FEOF(H))
; Trova due linee consecutive che iniziano per "Content"
S = FREADLN(H)
IF IMATCH(S, "Content*")
IF ISNOTEMPTY(ARGV(6))
DstName = ARGV(6)
ELSE
REXIMATCH(S, "name=")
DstName = RESTFROM(S, ADD(R_START, R_LENGTH))
ALLTRIM(@DstName, " ")
STRIPQUOTES(@DstName)
FI
S = FREADLN(H)
IF IMATCH(S, "Content*")
; Trova la prima linea non vuota
S = ""
WHILE AND(NOT(FEOF(H)), ISEMPTY(S))
S = FREADLN(H)
LOOP
IF FEOF(H)
CONSOLELN "Fine del file inattesa in \"" ARGV(5) "\"."
ABORT 1
FI
HD = FOPEN(DstName, 26)
IF EQ(HD, -1)
CONSOLELN "Impossibile creare \"" DstName "\"."
ABORT 1
FI
WHILE ISNOTEMPTY(S)
DEMIME64(@S, @Status, B64Par)
FWRITE(HD, S)
SWITCH Status
ON -2
CONSOLELN "Errore nella decodifica del file \"" ARGV(5) "\"."
ABORT 0
ON 1
BREAK
ON 0
S = FREADLN(H)
OFF
LOOP
Found = 1
BREAK
FI
FI
LOOP
VECFREE(B64Par)
FCLOSE(H)
IF Found
CONSOLELN "Creato il file \"" DstName "\"."
ELSE
CONSOLELN "Nessuna sezione Mime Base 64 trovata in \"" ARGV(5) "\"."
ABORT 1
FI
ABORT 0