Programma di esempio UUDECODE.PRT |
; UUDECODE
;
; Programma per Proteus
;
; (C) 1998-2003 Simone Zanella Productions
;
; Questo programma decodifica nel file originale un testo UUENCODED.
; 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 UUENCODED."
CONSOLELN "Nessun controllo e' effettuato sull'ingresso."
CONSOLELN "Se la destinazione esiste, e' sovrascritta."
CONSOLELN "Se \"destinazione\" e' specificato, il nome"
CONSOLELN "indicato e' impiegato per l'uscita."
CONSOLELN "Non sono ammesse sezioni multiple."
ABORT 0
FI
H = FOPEN(ARGV(5), 1)
IF EQ(H, -1)
CONSOLELN "File \"" ARGV(5) "\" non trovato."
ABORT 1
FI
S = FREADLN(H)
WHILE AND(NOT(FEOF(H)), NOT(IMATCH(S, "begin*")))
S = FREADLN(H)
LOOP
IF FEOF(H)
CONSOLELN "Errore: il file \"" ARGV(5) "\" non risulta essere UUENCODED."
ABORT 1
FI
IF ISNOTEMPTY(ARGV(6))
DstName = ARGV(6)
ELSE
DstName = RESTFROM(S, POSTOKEN(S, 3, " "))
ALLTRIM(@DstName, " ")
STRIPQUOTES(@DstName)
FI
!ifdef UNIX
Attribs = TOKEN(S, 2, " ")
!endif
HD = FOPEN(DstName, 26)
IF EQ(HD, -1)
CONSOLELN "Impossibile creare \"" DstName "\"."
ABORT 1
FI
WHILE NOT(FEOF(H))
S = FREADLN(H)
IF NOT(IMATCH(S, "end*"))
UUDECODE(@S)
FWRITE(HD, S)
ELSE
BREAK
FI
LOOP
FCLOSE(H)
FCLOSE(HD)
!ifdef UNIX
CHMOD(DstName, Attribs)
!endif
IF NOT(IMATCH(S, "end*"))
CONSOLELN "Fine della sezione uuencoded non trovata."
CONSOLELN "Il file \"" ARGV(5) "\" e' corrotto."
FI
CONSOLELN "Creato il file \"" DstName "\"."
ABORT 0