Newsgroup: it.comp.lang.pascal
Titolo: ripulire lo schermo

Ehm, mi vergogno a dirlo, ma anche seguendo l'help del Turbo Pascal, non ho
capito come si fa a pulire tutto lo schermo. Volendolo fare senza usare
funzioni e procedure proprietarie, devo fare un bel pacco di writeln; ?
grazie
--
San Vegeta from Hell
http://www.geocities.com/Area51/Dungeon/8436
(da visualizzare col browser della Netscape)

...


funzioni e procedure proprietarie, devo fare un bel pacco di writeln; ?
E' l'unica via che ti rimane...



NO.   Ne basta una dentro una for :-)
	for i:=1 to 25 do writeln;
Fabio
--
fabi...@rocketmail.com



Solo che in questo modo non viene riportato il cursore del mouse in
alto a sinistra e quindi non vedo a cosa possa servire...




 wrote in message
7hib1p$usr$3...@hermes.iol.it...


spazio).
Vorrei ricordare che anche "gotoxy" e' una procedura.
A questo punto tanto vale utilizzare "clrscr" (visto, tra l'altro, che
bisogna comunque includere la unit crt).
Io credo che il nostro amico non voglia utilizzare ne' l'una, ne'
l'altra, ma il problema e' che la cancellazione dello schermo non e'
una funzionalita' implementabile in modo standard, ma anzi, legata
strettamente alla piattaforma di utilizzo.
Non esiste cioe' un modo portabile per eseguirla e bisogna pertanto
dipendere necessariamente dalle routine predisposte.

 wrote in message
3740587...@diesel.cu.mi.it...


	for i:=1 to 25 do writeln;
E se lo schermo e' a 50 righe? :-))))).
Bye.
Joseph Parrello.
Jo Parrello - OWL/C++ Programmer
http://utenti.tripod.it/SourceNet
(
jopar...@geocities.com
)

ampia come quella del C o del C++ sarebbe meglio.
E' evidente che non sono stato chiaro.
Il C/C++ standard non possiede alcuna funzione standard per la
cancellazione dello schermo, ne' per qualsiasi altro tipo di
interfacciamento con le periferiche di I/O.
Il pascal standard segue la stessa logica.
Ripeto ancora una volta che ripulire lo schermo non e' un'operazione
effettuabile in modo standard, ma bisogna dipendere necessariamente
dalle routine di ogni particolare implementazione.

End.
"...Volendolo fare senza usare funzioni e procedure proprietarie..."

 -

2) vai di chiamate interrupt
Non credo ne esistano per ripulire lo schermo.

Con l'assembly è sufficiente usara il seguente codice
...
ASM
            Mov Ah,06h
            Xor Al,Al (* numero di righe da cancellare impostandolo a zero,
come in questo caso verrà pulito l'intero schermo, *)
                            (* ha lo stesso effetto di impostare 25d *)
            Mov Bh, colore_dello_sfondo
            Xor Cx,Cx  (* azzero CL e CH per iniziare dalla colonna 0 riga 0
* )
            (* in questo caso coincidono con il numero di righe e colonne,
altrimenti sono la posizione fin dove viene cancellato *)
            (* es: se imposto CL = 10d, e CH = 10d e DL = 20d e DH = 20d,
verà ripulito il quadrato avente coordinate
                    angolo in alto a sinistra coordinate 11,11 (in TP) e
angolo basso a destra coordinate 21, 21 (in TP ) *)
            Mov Dh,18h (*numero di rige da cancellare 18h = 24 decimale, le
righe partono da 0 quindi da 0 a 24 *)
            Mov Dl,4Fh (*numero di colonne da cancellare 4Fh = 79 decimale,
le colonne partono da 0 quindi da 0 a 79 *)
            Int 10h
            (* Codice corrispondente al GotoXY del TP *)
            Mov Ah,02h
            Xor Bx,Bx
            Xor Dx, Dx (* azzero Dx per spostare il cursore in altro a
sinistra ( 1,1 di coordinate in TP ) oppure modificando come segue *)
            (* Mov DH, riga
                Mov DL, colonna * )
            Int 10h
END;
...
Bye Dav

Non credo ne esistano per ripulire lo schermo.
intendevo dire (sempre meno standard) risetto la modalità testo tramite
in 10h


 wrote in message
374bff72...@diesel.cu.mi.it...

Va bene....
Supponiamo che ti trovi su piattaforma x86 (intel, amd, quellochetipare,
....).
Per la modalità 80x25:
procedure clearscreen(bgd: byte); Assembler;
     asm
        mov es, SegB800
        xor di, di
        mov al, ' '                     { spazio }
        mov ah, bgd               { colore di sfondo }
        shl ah, 4
        mov cx, 80*25            { modalità video }
        rep stosw
     end;
Begin
     clearscreen(2);        { "cancella" lo schermo con il colore VERDE }
End.
Per le altre modalità testuali sostituisci "mov cx, 80*25" con "mov cx,
larghezza*altezza", dove larghezza ed altezza sono due costanti.
Ciao!
Simo.

you wrote :
#> "...Volendolo fare senza usare funzioni e procedure proprietarie..."
#Va bene....
No, non va bene : se supponi di utilizzare la piattaforma x86 e'
presumibile che utilizzi il TP e se poi utilizzi il built-in assembler
e' praticamente sicuro.
A questo punto, tanto vale, utilizzi clrscr().
Questa domanda, su ng come it.comp.lang.c, e' stata fatta miliardi di
volte e la risposta e' che senza utilizzare funzioni e procedure
proprietarie la cosa non e' fattibile, in quanto la cancellazione
dello schermo e' l'operazione non portabile per eccellenza.
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------