Per quel che so io basta utilizzare la unit CRT (uses crt ;)
e poi scrivere quando nei hai bisogno CLRSCR; (che equivale a clear screen)
"Cathàll ©" <em...@cataldomusto.it> ha scritto nel messaggio
news:qDe18.35194$cU4.1...@twister1.libero.it...
mentre la chiamata clrscr, quando ti serve.
EMILIANO PEZONE <emip...@tin.it> wrote in message
u0f18.4140$Qu1.1...@news2.tin.it...
Puoi crearti una procedura che stampi degli spazi bianchi e riempia così lo
schermo per poi portare il puntatore all'inizio della pagina con gotoxy(x,y)
Puoi usare le interrupt ed sfruttare la funzione apposita
Ciauz
--
KNOWLEDGE IS POWER
http://www.sverzat.com
¯`·. .·´¯`:
'·. .`·. .·´. .·'
`:--·´ `·--:´
`·. '_' .·
;`·-·´;
"EMILIANO PEZONE" <emip...@tin.it> ha scritto nel messaggio
news:UBd18.3942$Qu1.1...@news2.tin.it...
"Solid Snake" <solid...@ngi.it> wrote in message
news:3c45...@news.cis.it...
Anche, ma chi chiamerebbe talmente tante volte la clrscr da rallentare in
modo consistente il sistema? :)
Io agirei sulla memoria video solo dovendo eseguire particolari modifiche o
se mi fosse esplicitamente richiesto dal programm.
...poi ognuno programma come vuole :-)
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)
non so perchč ma anche a me altri antivirus non solo norton mi faceva la
stessa
cosa..
io ho da chiedere una cosa: io di gestire memoria video sono a zero.. mi
piacerebbe
imparare. non č che mi potresti inviare quello che hai fatto? cosě guardo il
prog e capisco..
inoltre sai dove andare a cercare info x quest argoment?
grazie & ciao, by augusto
...mi è un po' difficile inviarti i miei vecchi programmi sulla memoria
video, perché, sinceramente, non so dove andarli a riprendere :-P ...3 anni
fa salvavo tutto su floppy ma ora non so proprio dove li ho messi...
Chiederò a qualche amico e cercherò di recuperare qualcosa, ma non ti
garantisco nulla.
spolveratina iniziale... sufficiente per qualche esperimento
mi limito al modo testo, altri potranno parlare di grafica...
la memoria video sta' mappata in ram in un posto fisso, in un
formato fisso, se sai dov'e' ci puoi scrivere dentro evitandoti
writeln & C, cioe' tagliando fuori chiamate all' int 10Hx che si
occupa dell'output, il che si traduce in Velocita' e Flessibilita'
(-: che bello scriverle maiuscole... :-)
in modo testo 25 o 50 righe ogni posizione dello schermo
e' rappresentata da una coppia di byte: uno contiene il carattere
l'altro gli attributi, memorizzati su otto bit come
| 4 bit colore sfondo | 4 bit colore primo piano |
[per lavorarci sopra si usano maschere bit e shift, ci stai dentro?
altrim ci riempio un altro mex :-) ]
le posizione nella memoria video non sono equivalenti alle
coordinate testo:
1----50
|
|
|
80
le righe sono in "verticale" (esiste un verticale nella ram ??)
dall'alto in basso e da sinistra a destra... ma con una comoda
array pascal si risolve tutto (pheeeww....)
ok.. now some codice
type
CrtCell = record Ch,At: byte; end;
CrtMap = array [1..50,1..80] of CrtCell;
comodi tipi: CrtMap rappresenta uno "schermo equivalente"
se lavori a 25 righe semplicemente non considerare quelle
dalla 26 in poi... ma se switchi a 50 le puoi usare... oppure
puoi fare il page-flipping in modo testo in un solo buffer
[ma questa e' un'altra storia...]
[in realta' il modo testo 25 righe dovrebbe offrire 4 pagine
di visualizzazione... in basic ci si poteva accedere... non so'
in pascal... ma con i buffer chissenefrega ]
const
CRTPtr : pointer = Ptr($b800,$0000);
Text25 = 3;
Text50 = 259;
il puntatore punta (e' il suo mestiere) alla mem video testo
le due costanti servono per passare da 50 a 25 righe
le puoi usare come parametri nella normale procedura TextMode( )
var
CrtMem : CrtMap absolute $B800:$0000;
ok questo e' il nostro punto di partenza: CrtMem ** e' ** la memoria
video [ absolute sovrappone una struttura/variabile ad una locazione
di memoria, permettendoti di "dare un formato" alla ram ... fico ! ]
se leggi ottieni quello che c'e' sullo schermo, se scrivi modifichi cio'
che appare sullo schermo... subito e senza undo
NB: le coordinate testo sono nella forma Y,X !! cioe' riga, colonna
basta... non serve altro... ora tocca a te inventarti cosa scrivere
visualizzare... se lo recupero posto il plasma...
altre proc utili
Function CellPtr(y,x: byte): pointer;
begin
CellPtr := Ptr($B800,y - 1 + 10 * (x-1) shl 4);
end;
ritorna un puntatore ad uno specifica posizione dello schermo
Procedure FWrite(y,x:byte; s:string);
var
n : byte;
begin
for n := 0 to length(s)-1 do
CrtMem[y,x+n].Ch := ord(s[n+1]);
end;
l'equivalente della write... ma non cambia gli attributi dove
scrive !! (puoi fare scritte multicolori colorando prima le celle
e poi scrivendoci)
Procedure FWriteEx(y,x:byte; s:string; a:byte);
var
n : byte;
begin
for n := 0 to length(s)-1 do
CrtMem[y,x+n].Ch := ord(s[n+1]);
for n := 0 to length(s)-1 do
CrtMem[y,x+n].At := a;
end;
estensione, prende in piu' come parametro gli attributi con
cui visualizzare la stringa...
ultima procedura non c'entra molto ma e' una feature in
sordina del bios... lo scroll !!!
Procedure ScrollUp(x1,y1,x2,y2,s:byte); assembler;
asm
MOV ah,$06
mov bh,0
mov al,byte ptr s
mov cl,byte ptr x1
mov ch,byte ptr y1
mov dl,byte ptr x2
mov dh,byte ptr y2
dec cl
dec ch
dec dl
dec dh
INT $10
end;
per ottenere la ScrollDown oltre a cambiare il nome basta
mettere $07 al posto di $06 (cambia la funzione richiesta all'int)
i parametri indicano gli estremi della zona da scrollare (alto-sx
basso-dx) e il numero di righe
[[ miiih quanto ho scritto... scusate :-) posto nuovo mex su
questo problema... ma probabilmente lo avrete gia' letto ]]
se non avete la fcrt (ops molto probabile... e' mia...)
basta che ci mettiate le definizioni del post prima
la spaventosa funzione matematica non e' mia, e'
spudoratamente copiata da un plasma mi sembra in vga256
di Master degli Spp, quindi a lui il copyright :-)
ho messo piu' palette intercambiabili per piu' sfumature
di colori (tanto siamo in txt... piu 'di tanti...)
se potete compilate e poi lanciate l'eseguibile da prompt...
all'uscita avrete un dos molto piu' allego :-)
{ --- texteng.pas --- }
uses fcrt, crt;
type
fpal = array[0..15] of byte;
const
pal1 : fpal = ( 0, 8, 8, 1, 1, 9, 9,11,11, 9, 9, 1, 1, 8, 8, 0);
pal2 : fpal = ( 0, 6, 6, 4, 4,12,12,14,14,12,12, 4, 4, 6, 6, 0);
pal3 : fpal = ( 0, 8, 7,15,14,12, 4, 5,13, 1, 9, 2,10,11, 3, 8);
var
f,u,v,z2,x,y,ax,ay : longint;
z,un,du,tr,qu,ci,se,st,ot: real;
aa,bb : integer;
g, s:integer;
col : fpal;
begin
TextMode(text50);
ClrScr;
for aa := 1 to 50 do
for bb := 1 to 80 do
crtmem[aa,bb].ch := ord('ů');
col := pal3;
repeat
inc (g);
for y := 1 to 50 do
begin
u := ( y shl 8 ) + ( y shl 6 );
for x := 1 to 80 do
begin
v := x+u;
un := 6 * cos(g/250);
du := 5 * sin(g/270);
tr := 22 * cos( x / 35 + un / 3 - 10 * sin(du/10) / cos(du/10) );
qu := 25 * cos(y/45+du);
z := un*(du+tr+qu)+du*(un+tr+qu)+tr*(un+du+qu)+qu*(un+du+tr);
z := z/20+x+y+g/2;
z := z / 10;
CrtMem[y,x].at := col[ trunc(z) and 15 ];
end;
end;
until keypressed;
end.
{--- fine texteng.pas ---}
> for aa := 1 to 50 do
> for bb := 1 to 80 do
> crtmem[aa,bb].ch := ord('ů');
il carattere che viene visualizzato come una "ů"
e' in realta' #249... sorry ma non avevo pensato che
l'avrei mai postato... maledetti 7 bit :-)