GESTIUNEA ECRANULUI ÎN MOD TEXT
Biblioteca standard a limbajelor C si C++ contine functii pentru gestiunea ecranului. Acesta poate fi gestionat în 2 moduri:
modul text si
modul grafic.
Modul text presupune ca ecranul este format dintr-un numar de 929c29j linii si coloane. De obicei exista doua variante:
25 de linii x 80 de coloane = 2000 de carctere sau
25 de linii x 40 de coloane = 1000 de caractere.
Pozitia pe ecran a unui caracter se defineste printr-un sistem de coordonate întregi (x,y)
unde:
x - reprezinta numarul coloanei în care este situat caracterul;
y - reprezinta numarul liniei în care este situat caracterul.
Coltul din stânga sus are coordonatele (1,1) iar coltul din dreapta jos (80,25) sau (40,25).
În mod implicit functiile de gestiune a ecranului în mod text au acces la tot ecranul. Accesul poate fi limitat la o parte din ecran utilizând asa numitele ferestre. Fereastra este un dreptunghi care este o parte a ecranului si care poate fi gestionata independent de restul ecranului.
Un caracter de pe ecran, pe lânga coordonate, mai are si urmatoarele atribute:
culoarea caracterului afisat;
culoarea fondului;
clipirea caracterului.
Aceste atribute sunt dependente de adaptorul grafic utilizat. Cele mai utilizate adaptoare sunt:
placa MDA, care este un adaptor monocrom;
placa HERCULES, care este un adaptor color;
placa CGA, care este un adaptor color;
placa EGA, care este un adaptor color;
placa VGA, care este un adaptor color de mare performanta.
Pentru adaptoarele de mai sus se pot utiliza 8 culori de fond si 16 culori pentru afisarea caracterelor.
Atributul unui caracter se defineste cu ajutorul formulei:
atribut = 16 * culoare_fond + culoare_caracter + clipire (*)
unde:
culoare_fond (background) = cifra între 0 si 7; (8 culori)
culoare_caracter (foreground) = întreg între 0 si 15; (16 culori)
clipire = 128 (clipire) sau 0 (fara clipire)
Tabel cu numele culorilor:
Culoare Constanta simbolica Valoare
negru BLACK 0
albastru BLUE 1
verde GREEN 2
turcoaz CYAN 3
rosu RED 4
purpuriu MAGENTA 5
maro BROWN 6
gri deschis LIGHTGRAY 7
gri închis DARKGRAY 8
albastru deschis LIGHTBLUE 9
verde deschis LIGHTGREEN 10
turcoaz deschis LIGHTCYAN 11
rosu dechis LIGHTRED 12
purpuriu magenta LIGHTMAGENTA 13
galben YELLOW 14
alb WHITE 15
clipire BLINK 128
12.1. SETAREA ECRANULUI ÎN MOD TEXT
Setarea (punerea) se realizeaza cu ajutorul functiei textmode care are prototipul:
void textmode (int modtext);
unde
modtext poate fi exprimat numeric sau simbolic în felul urmator:
Modul text activat Constanta simbolica Valoare
alb/negru 40 coloane BW40 0
color 40 coloane C40 1
alb/negru 80 coloane BW80 2
color 80 coloane C80 3
monocrom MONO 7
color 43 linii pentru EGA
si 50 linii pentru VGA C4350 64
modul precedent LASTMODE -1
Modul MONO se poate seta pe un adaptor monocolor. Celelalte moduri se pot seta pe adaptoare color.
12.2. DEFINIREA UNEI FERESTRE
Daca dorim sa partajam ecranul în zone care sa poata fi gestionate independent trebuie sa definim ferestre.
O fereastra este o zona dreptunghilara de pe ecran care se poate defini cu functia window al carei prototip este:
void window (int stanga, int sus, int dreapta, int jos);
unde:
-(stanga, sus) = coordonatele coltului din stânga al ferestrei;
-(dreapta, jos) = coordonatele coltului din dreapta jos.
La un moment dat o singura fereastra este activa si anume aceea definita de ultimul apel al functiei window. Functiile de gestionare a ecranului în mod text actioneaza întotdeauna asupra ferestrei active. Dupa setarea modului text cu ajutorul functiei textmode este activ tot ecranul.
Mentionam ca functia window nu are nici un efect daca parametrii de la apel sunt eronati.
12.3. sTERGEREA UNEI FERESTRE
Fereastra activa se poate sterge cu ajutorul functiei clrscr cu prototipul:
void clrscr(void);
fereastra activa (sau tot ecranul) devine activa; fondul are culoarea definita prin culoarea de fond curenta;
clrscr pozitioneaza cursorul în pozitia (1,1) a fiecarei ferestre.
12.4. GESTIUNEA CURSORULUI
Programatorul poate plasa cursorul pe un caracter al ferestrei folosind functia gotoxy al carei prototip este:
void gotoxy (int coloana, int linie);
unde:
(coloana, linie) sunt coordonate relative la fereastra activa, daca sunt înafara ferestrei active apelul este ignorat;
Pozitia cursorului se poate determina cu ajutorul functiilor wherex si wherey care au prototipurile:
int wherex (void); -returneaza numarul coloanei în care se afla cursorul
int wherey (void); -returneaza numarul liniei în care se afla cursorul.
Exista cazuri când se doreste ascunderea cursorului. Acest lucru se poate realiza printr-o secventa speciala în care se utilizeaza functia geninterrupt.
void ascundcursor (void) // face invizibil cursorul
Cursorul poate fi reafisat apelând functia de mai jos:
void afiscursor (void) // face vizibil cursorul
AH, CH, CL reprezinta unii din registrii microprocesorului.
12.5. DETERMINAREA PARAMETRILOR ECRANULUI
Utilizatorul are posibilitatea sa obtina parametrii curenti ai ecranului prin apelarea functiei gettextinfo al carui prototip este:
void gettextinfo (struct text_info *p);
unde structura text_info este definita în fisierul conio.h astfel:
struct text_info
;
12.6. MODURILE VIDEO ALB/NEGRU
Exista doua moduri (intens si normal) care se pot activa cu functiile highvideo si lowvideo ale caror prototipuri sunt:
void highvideo (void);
void lowvideo (void);
Intensitatea initiala este de obicei cea normala. Se poate reveni la intensitatea normala daca se apeleaza functia normvideo cu acelasi prototip ca al celorlalte doua functii.
Exemplu:
Vom scrie un program care afiseaza parametrii ecranului:
#include <stdio.h>
#include <conio.h>
void main (void)
12.7. SETAREA CULORILOR
Culoarea fondului se seteaza cu ajutorul functiei textbackground cu prototipul urmator:
void textbackground (int culoare);
unde:
culoare este un întreg cuprins între 0 si 7 cu semnificatia din tabelul anterior al culorilor.
Culoarea caracterelor se seteaza cu ajutorul functiei textcolor cu prototipul urmator:
void textattr (int culoare);
unde:
culoare este un întreg între 0 si 15.
Se pot seta ambele culori, precum si clipirea caracterului folosind functia textattr de prototip:
void textattr (int atribut);
unde:
atribut e definit cu ajutorul relatiei (*) de la începutul lectiei.
12.8. GESTIUNEA TEXTELOR
Pentru afisarea caracterelor colorate în conformitate cu atributele definite prin relatia:
atribut = 16 * culoare_fond + culoare_caracter + clipire
se pot folosi functiile:
putch - pentru afisarea unui caracter;
cputs - pentru afisarea color a unui sir de caractere (acelasi prototip ca puts);
cprintf - pentru afisarea color sub controlul formatelor.
Alte prototipuri de functii:
void insline (void); - insereaza o linie cu spatii în fereastra, liniile de sub
pozitia cursorului se deplaseaza în jos cu o pozitie;
void clreol (void) - sterge sfârsitul liniei începând cu pozitia cursorului;
void delline (void) - sterge toata linia pe care este pozitionat cursorul;
int movetext ( int stanga, int sus, int dreapta, int jos,
int stanga_dest, int dreapta_dest );
- copiaza un text dintr-o pozitie în alta;
returneaza: 1 daca textul s-a copiat cu succes si o în caz de eroare.
Textele dintr-o zona dreptunghiulara a ecranului pot fi salvate sau citite dintr-o zona de memorie cu ajutorul functiilor puttext si gettext si au prototipurile:
int gettext (int stanga, int sus, int dreapta, int jos, void *destinatie);
unde
primii patru parametrii definesc fereastra unde se afla textul de salvat;
destinatie este pointerul spre zona de memorie în care se salveaza textul.
si
int puttext (int stanga, int sus, int dreapta, int jos, void *sursa);
unde
primii patru parametrii definesc fereastra unde se va scrie pe ecran textul preluat din memorie;
sursa este pointerul spre zona de memorie din care se transfera textul.
Ele returneaza:
1 la copiere cu succes;
0 la eroare.
Observatie:
1o. Fiecare caracter de pe ecran se pastreaza pe doi octeti:
pe un octet codul caracterului;
pe octetul urmator atributul caracterului.
Exemple:
Programul urmator seteaza o fereastra si modurile video alb/negru.
#include <conio.h>
void main (void)
Programul urmator afiseaza toate combinatiile de culori posibile pentru fond si caractere (adaptor EGA/VGA).
#include <conio.h>
#include <stdio.h>
void main (void)
int i,j,k;
struct text_info atribut;
gettextinfo (&atribut);
for (i = 0; i < 8; i++ ) // i alege culoarea fondului
gotoxy (1,18);
printf ("actionati o tasta pentru contiuare\n");
getch();
}
window (atribut.winleft, atribut.wintop, atribut.winright, atribut.winbottom);
textattr (atribut. attribute);
clrscr();
|