| Referate | Director web | Adauga link | Contact |



UNIT-UL CRT



O unitate de program se defineşte ca o colecţie de constante, tipuri de date, variabile proceduri şi funcţii, în mod normal legate între ele, plasate ţi compilate într-un alt fişier sursă al programului. Folosirea unităţilor se realizează prin precizarea numelui unităţii într-o declaraţie uses.

Avantajele folosirii unităţilor sunt următoarele:

  • se realizează o mai bună structurare a programului;
  • se economiseşte timp la compilare, deoarece unit-urile se compilează separat (generând fişiere TPU);

             -      se facilitează colaborarea mai multor persoane la realizarea programului.

            

Unit-ul Crt conţine o serie de subprograme (proceduri şi funcţii) folosite în aplicaţii în care ecranul este utilizat în mod text. Programele care utilizează acest unit trebuie să conţină directiva uses crt.

Ecranul în mod text are 25 de linii şi 80 de coloane (ele pot fi schimbate prin apelul procedurii TextMode ), având coordonatele (valorile x cresc spre dreapta, iar a lui y în jos ): colţul stânga sus (0,0), colţul stânga jos (0,24), colţul dreapta sus (79,0), colţul dreapta jos (79,24).











Să considerăm “write(abc);”

În modul text, instrucţiunea va lăsa cursorul în coloana care va urma după ultima literă (ex: C). Dacă ultima literă (ex: C) a fost scrisă pe coloana 79, atunci cursorul va trece în coloana 0 a liniei următoare. Dacă ultima literă (ex: C) a fost scrisă pe coloana 79 a liniei 24, atunci întregul ecran va defila cu o linie în sus şi cursorul va trece în coloana 0 a liniei 24.

Subporg. bibliotecii Crt pot fi clasificate astfel:

  • de interes general
  • supbrog. destinate gestiunii ferestrelor;
  • supbrog. orientate pt culori;
  • supbrog. destinate generări sunt şi intensităţii video;

1.Subprograme de interes general:

TextMode  Procedura TextMode asigură selectarea unui mod text specificat ea este definită prin: procedure TextMode(tm:integer);

           Unde tm defineşte tipul modului text, şi poate lua ca valori următoarele constante predefinite :

Constantă

Valoare

Descriere mod

Adaptor

BW40

0

40x25 Alb/Negru

CGA

CO40

1

40x25 Color

CGA

BW80

2

80x25 Alb/Negru

CGA

CO80

3

80x25 Color

CGA

MONO

7

80x25 Alb/Negru

HGC

Font8x8

256

43 linii / 50 linii

EGA/VGA

EXEMPLU:

program crttm;

     uses crt;

     var modoring:word;

     begin        

         clrscr;{sterge ecranul}

          modoring:=lastmod;{savare mod original}

          {…}

           Textmode(modoring);{reface tip original}         

           {…}

       end.

Variabila LastMode de tip Word salvează modul video actual, ea este iniţializată cu modul video activ în momentul respectiv.

Keypressed Funcţia ~ returnează valoarea true dacă pe tastatură s-a apăsat o tastă, false în caz contrar. Funcţia se defineşte prin :

        function keypressed:boolean;( funcţia ~ nu sesizează apăsarea tastelor Shift, Alt, Numlock)

ReadKey     Funcţia ~ returnează un caracter care sa tastat la tastatură. Caracterul citit nu apare pe ecran. Dacă keypressed este true înaintea apelului Readkey, funcţia returnează automat caracterul tastat, în caz contrar Readkey aşteaptă tastarea unui caracter.

       Funcţia se defineşte astfel:

        function WhereX:byte returnează abscisa cursorului curent function ReadKey:char ;

Unul din avantajele utilizării unitu-lui Crt este creşterea flexibilităţii şi vitezei operaţiilor de ieşire. Programele care nu utilizează unit-ul Crt trimit datele de ieşire pe ecran prin intermediul DOS-ului. Folosind unit-ul Crt, datele de ieşire sunt trimise direct la BIOS, s-au prin operaţii şi mai rapide direct la memoria video.

AssignCrt    Procedura ~ ataşează ecranului (CRT-ului) un fişier text.                                             procedure AssignCrt(var f: text); (unde f este fişierul care se ataşează)

În secţiunea de interfaţă a unit-ului crt sunt definite variabilele CheckBreak, CheckEof, DirectVideo care permit stabilirea unor facilităţi suplimentare.

CheckBreak  variabila predefinită ~ de tip boolean validează sau invalidează utilizare întreruperii Crtl-Break. Dacă variabila este iniţializată cu true, prin apăs. simultană a tastelor Crtl şi Break programul- la prima tentativă de scriere pe ecran va fi abortat. Dacă variabila este iniţializată cu false apăs. tastelor nu are nici un efect.

CheckEof    Variabila ~ de tip boolean validează sau invalidează caracterul de sfârşit de fişier. Dacă variabila este iniţializată cu true, prin apăsarea simultană a tastelor Crt-Z se genereză un caracter de sfârşit de fişier în timpul citirii dintr-un fişier asignat ecranului. Dacă var. este iniţializată cu false, apăsarea simultană a tastelor Crtl-Z nu are nici un efect.

DirectVideo Variabila ~ de tip boolean validează sau invalidează accesul direct al memoriei pt. operaţiunile Write şi Writeln care afişează pe ecran. Dacă variabila este init. cu true, operaţiunile Write şi Writeln la fişiere asociate cu Crt vor memora caracterele direct în memoria video (şi nu vor apela BIOS-ul pt. această operaţiune de afişare). Dacă este init. cu false, toate caracterele vor fi scrise prin apelul BIOS-ului şi va fi mai lent.

Toate variabilele au val. implicite true.

2.Subprograme destinate gestiuni ferestrelor

Unitul pune la dispoziţia utilizatorului posibilitatea  de a defini ferestre pe ecran (Zone ale ecranului); definirea de ferestre se face cu procedura Window. Atunci când se efectuează o înscriere într-o astfel de fereastră, fereastra se comportă exact ca şi cum s-ar folosi întreg: în interiorul ferestrei se pot insera şi şterge linii, iar când cursorul ajunge la marginea din dreapta, va trece automat la liniei următoare. Dacă cursorul a ajuns la sfârşitul ultimei linii, toate liniile din ecran se vor deplasa automat cu o linie mai sus şi înscrierea se va face în linia de la bază (defilare automată).

Window      Procedura ~ este definită :

        procedure window(x1,y1,x2,y2:bzte);                                                       unde (x1,y1) sunt coordonatele  coltului stânga sus ale ferestrei, iar (x2,y2) sânt coordonatele  coltului dreapta jos ale ferestrei. Fereastra implicita depinde de  modul text utilizare; de exemplu C080 (80x25 color pe adaptor  color) este Window (0,0,79,24), iar la BW40 (40x25 negru/alb pe adaptor color) este Window (0,0,39,24).

                     Procedura Window încarcă automat variabilele WindMin şi WindMax (definite în unit-ul CRT, de tip word) cu coordonatele stânga sus al ferestrei, respectiv cu coordonatele coltului              

                     Dreapta  jos ale ferestrei, respectiv cu coordonatele colţului dreapta jos ale ferestrei.(De ex: Lo(WinMax) produce abscisa  a colţului stânga sus iar Hi(WindMin)Produce ordonata a colţului dreapta jos. În interiorul ferestrei coordonatele colţului stânga sus sunt(1,1).

GotoXY        Poziţionează cursorul în interiorul ferestrei curente şi sr defineşte:                                                 procedure GoToXY(x,y:byte);                                                                 unde x,y reprezintă noile coordonate (relative la fereastra actuală)ale ferestrei.

WhereX şi        Determină poziţia curentă a cursorului şi sunt definite:

WhereY          function WhereX:byte returnează abscisa cursorului curent                        function WhereY:byte returnează ordonata cursorului curent

ClrScr        Realizează ştergerea ferestrei active şi mută cursorul în colţul stânga sus al ferestrei.                procedure ClrScr;

ClrEol        Şterge toate caracterele până la sfârşitul liniei pornind de la poziţia actuală a cursorului        procedure ClrEol;

InsLine        Inserează o linie goală în poziţia cursorului .Liniile situate dedesubtul cursorului vor defila în jos cu o linie şi ultima linie iese de pe ecran.                                                   procedure InsLine;

DelLine        Şterge linia în care se află cursorul. Liniile situate dedesubtul cursorului vor defila în sus cu o linie.                                                                                        procedure DelLine;

3.Proceduri orientate pe culori

TextBackGround Stabileşte culoarea de fond.                                                                        procedure TextBackGround(culf:byte);                                                        unde culf este codul culorii fondului. Cele opt valori predefinite pentru culoarea fondului sunt următoarele:

Black=0;(negru)

Blue=1;(albastru)

Green=2;(verde)

Cyan=3;(turcoise)

Red=4;(roşu)

Magenta=5;(violet)

Brown=6;(maro)

LigthGray=7;(gri deschis)

TextColor          Stabileşte culoarea caracterelor.                                                                        procedure TextColor(cul:byte);                                                                        unde culf este codul culorii caracterelor. Cele 15 valori predefinite sunt următoarele:

DarkGray=8;(gri închis)

LigthBlue=9;(albastru deschis)

LigthGreen=10;(verde deschis)

LigthCyan=11;(turcoise deschis)

LigthRed=12;(roşu deschis)

LigthMagenta=13;(violet deschis)

Yellow=14;(maro)

White=15;(alb)

Prin adunarea valorii Blink=128 la codul culorii, caracterele textului vor clipi.


Variabila TextAttr de tip byte definită în secţiunea de interfaţă a unit-ului Crt memorează atributele textului. Aceste Atribute pot fi selectate prin apelul procedurilor TextColor şi TextBackGround, dar pot fi selectate şi printr-o instrucţiune de atribuire directă în variabila TextAttr. Informaţiile de culoare sunt codificate în felul următor:

7     6    5    4     3    2    1    0

s     f     f     f      t     t     t     t    

Aici tttt  reprezintă culoarea textului, fff reprezintă culoare de fond, iar s este bitul de validare pentru clipire.(Un exemplu de încărcare directă: TextAttr:=White+16*Red+Blink adică pe fond roşu caracterele albe care clipesc.

4.Proceduri destinate gestiunii generatorului de sunet şi intensităţii video

Sound        Procedura ~ asigură pornirea generatorului de sunet cu o frecvenţă dată.                        procedure sound(Hz:word);                                                                        unde parametrul Hz defineşte frecvenţa sunetului în Hz. Difuzorul va suna până la apelul procedurii NoSound

NoSound        Decuplează generatorul de sunet; ea se defineşte prin :                                procedure NoSound;

Delay        Intervalul de timp destinat funcţionării generatorului de sunet poate fi fixat folosind procedura ~                                                                                procedure Delay(ms:word);        unde ms este timpul de întârziere (durata) în milisecunde

LowVideo        Selectarea intensităţii caracterelor pe ecran se poate realiza cu procedurile fără parametru ~

NormVideo        care selectează respectiv intensitate mică, normală şi mare. 

HighVideo

Exemplu: Se realizează un ciclu având loc atunci când se apasă o tastă. Corpul ciclului cuprinde pornirea difuzorului la 450Hz timp de 250 de milisec. După care emite la 600Hz timp de 500 milisec.