Programma di esempio XMAS.PRT |
; XMAS
;
; Programma per Proteus
;
; (C) 2000-2003 Simone Zanella Productions
;
; Stampa un testo sotto forma di albero, con un singolo carattere in cima, 3 caratteri nella seconda
; riga, 5 caratteri nella terza, ecc.
#!proteus -z
IF LT(ARGC, 6)
CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) " sorgente.txt destinazione.txt"
CONSOLELN ""
CONSOLELN "Scopo: scrive in destinazione.txt il contenuto di sorgente.txt,"
CONSOLELN "disposto ad albero."
ABORT 0
FI
; Carica il file in una stringa
S = FLOAD(ARGV(5))
IF ISEMPTY(S)
CONSOLELN "File " ARGV(5) " non trovato o vuoto!"
ABORT 1
FI
; Apre la destinazione
D = FOPEN(ARGV(6), 28)
IF EQ(D, -1)
CONSOLELN "Impossibile creare " ARGV(6) "!"
ABORT 2
FI
; Trasforma i terminatori di riga in uno spazio singolo
STRTRAN(@S, EOL, " ")
; Trasforma spazi multipli in spazi singoli
P = STRSTR(S, " ")
WHILE NEQ(P, 0)
STRTRAN(@S, " ", " ")
P = STRSTR(S, " ")
LOOP
; Crea le righe dell'albero
Q = QUEUENEW()
MAXLEN = 1
WHILE STRLEN(S)
ENQUEUE(Q, LEFT(S, MAXLEN))
RESTFROM(@S, INC(MAXLEN))
ADD(@MAXLEN, 2)
LOOP
; Stampa l'albero
WHILE QUEUELEN(Q)
FWRITELN(D, RTRIM(CENTER(DEQUEUE(Q), MAXLEN), " "))
LOOP
QUEUEFREE(Q)
FCLOSE(D)
ABORT 0