
Captulo 36 - conjstantes e variveis da unit crt

  Como j vimos anteriormente, a unidade CRT prev algumas constantes. 
Vejamos ento quais so estas constantes:

CONSTANTES PARA USAR COM TEXTMODE

CONST
  BW40 = 0;   {40x25 B/W na CGA}
  CO40 = 1;   {40x25 Color na CGA}
  BW80 = 2;   {80x25 B/W na CGA}
  CO80 = 3;   {80x25 Color na CGA}
  MONO = 7;   {80x25 B/W na  MDA ou HGC}
  FONT 8x8 = 256;   {43-/50-linhas modo EGA/VGA}


CONSTANTES PARA COMPATIBILIZAR COM 3.0
  C40 = CO40;
  C80 = CO80;
  {CGA - Color Graphics Adapter}
  {MDA ou HGC - IBM PC Monochrome Adapter}

CONSTANTES PARA USAR COM TEXTCOLOR e TEXTBACKGROUND
CONST
  BLACK = 0;
  BLUE = 1;
  GREEN = 2;
  CYAN = 3;
  RED = 4;
  MAGENTA = 5;
  BROWN = 6;
  LIGHTGRAY = 7;
  DARKGRAY = 8;
  LIGHTBLUE = 9;
  LIGHTGREEN = 10;
  LIGHTCYAN = 11;
  LIGHTRED = 12;
  LIGHTMAGENTA = 13;
  YELLOW = 14;
  WHITE = 15;
  BLINK = 128;


VARIVEIS USADAS NESTA UNIDADE

UNIT CRT: 
VAR
  checkbreak : BOOLEAN;
  checkeof : BOOLEAN;
  directvideo : BOOLEAN;
  checksnow : BOOLEAN;
  lastmode : WORD;
  textattr : BYTE;
  windmin : WORD;
  windmax : WORD;
  
  A varivel CHECKBREAK habilita ou no a checagem de CTRL-BREAK. Quando 
esta varivel  verdadeira e se pressiona CTRL-BREAK, o programa  abortado
no prximo comando de sada para vdeo. Quando  falsa, o CTRL-BREAK no tem
efeito e seu estado default  verdadeiro. Vejamos um exemplo:
PROGRAM teste_checkbreak;
USES CRT;  
VAR
  ch : CHAR;
BEGIN
  CHECKBREAK := FALSE;
  REPEAT
    WRITE (#$);
    DELAY (200);
  UNTIL FALSE;
END.  

   importante salientar que esta funo s ter efeito para programas com-
pilados em disco e quando no ambiente Turbo, o CTRL-BREAK sempre funcionar.
  A varivel CHECKEOF quando verdadeira, habilita o reconhecimento do con-
junto de caracteres CRTL-Z. se for pressionada em um comando READ e o arquivo
estiver associado ao vdeo, se estiver falsa, o CTRL-Z, no ter efeito, o
default  falso. 
PROGRAM teste_checkeof;
USES CRT;
VAR
  arq : TEXT;
  linha : STRING[70];
BEGIN  
  CHECKEOF := TRUE;
  ASSIGNCRT (arq);
  REWRITE (arq);
  REPEAT    
    READLN (linha);
    WRITELN (arq,linha);
  UNTIL EOF;
  CLOSE (arq);
END.

  A varivel CHECKSNOW habilita ou no a checagem de chuviscos na tela, 
quando os caracteres so exibidos a partir da memria de vdeo. Quando o 
modo texto colorido est selecionado e o CHECKSNOW estiver verdadeiro, 
a escrita na memria de vdeo s ocorrer durante o intervalo de retrao
horizontal. Quando CHECKSNOW estiver falsa, a exibio de caracteres na tela
ser sensivelmente mais rpida. CHECKSNOW no ter efeito se DIRECTVIDEO
estiver falsa. VEjamos um exemplo:
PROGRAM teste_checksnow;
USES CRT;
VAR
  i :BYTE;
BEGIN
  CLRSCR;
  CHECKSNOW := TRUE;
  FOR i := 1 TO 255 DO
    WRITE (#@*-);
  REPEAT
  UNTIL READKEY <> #0;
  CHECKSNOW := FALSE;
  FOR i := 1 TO 255 DO
    WRITE (#@*-);
  REPEAT
  UNTIL READKEY <> #0;
END.

  A varivel DIRECTVIDEO habilita ou no o acesso direto  memria de vdeo
quando do uso de WRITE ou WRITELN para sada em vdeo. Se DIRECTVIDEO for 
verdadeira as sadas pelos comandos WRITE e WRITELN para arquivos associados
ao vdeo sero enviadas diretamente  memria de vdeo e instataneamente ser
chamada a rotina da BIOS para exibio. Quando falsa, todos os caracteres
sero escritos totalmente pela chamada da BIOS, tornando o processo razoa-
velmente mais lento. O default de DIRECTVIDEO  verdadeiro, desta forma para
estabelecer o valor falso, teremos que, aps cada chamada na rotina TEXTMODE
reestabelecer este valor. Vamos a um exemplo:
PROGRAM teste_directvideo;
USES CRT;
BEGIN
  CLRSCR;
  DIRECTVIDEO := FALSE;
  WRITELN (a varivel DIRECTVIDEO est , DIRECTVIDEO);
  REPEAT
  UNTIL READKEY <> #0;
  TEXTMODE (CO80);
  WRITELN (a varivel DIRECTVIDEO est ,DIRECTVIDEO);
  REPEAT 
  UNTIL READKEY <> #0;
  CLRSCR;
END.

  A varivel TEXTATTR nos traz a informao a respeito dos bits inferiores
e superiores dos atributos das cores de texto e fundo. Estes atributos so
normalmente setados por TEXTCOLOR e TEXTBACKGROUND, porm podemos setar 
automaticamente o seu valor. Vejamos um exemplo:
PROGRAM teste_textattr;
USES CRT;
VAR
  antes : BYTE;
BEGIN  
  antes := TEXTATTR;
  {bits 012 com 0 456 com 7 video reverso}
  TEXTATTR := $70;
  CLRSCR;
  REPEAT
  UNTIL READKEY <> #0;
  TEXTATTR := antes;
  CLRSCR;
REPEAT 
  UNTIL READKEY <> #0;
END.

  As variveis WHINDMIN e WINDMAX armazenam as coordenadas da WINDOW corrente,
que so setadas pelo procedimento WINDOW. WINDMIN define o canto superior
esquerdo e WINDMAX, o canto inferior direito. A coordenada do eixo X est 
contida no Byte baixo e Y no Byte alto e podem ser extradas com as funes
LO e HI. No podemos nos esquecer que o contedo destas variveis parte das
coordenadas 0,0 no canto superior da tela, sendo o maior valor para o canto
inferior direito 79,24. Vamos a um exemplo:
PROGRAM teste_windmin_windmax;
USES CRT;
BEGIN
  CLRSCR;
  WRITELN (a coluna superior esquerd, LO (WINDMIN));
  WRITELN (a linha superior esquerda , HI (WINDMIN));
  WRITELN ( a coluna inferior direit, LO (WINDMAX));
  WIRTELN ( a linha inferior direit, HI (WINDMAX);
  WRITELN (tecle algo para nova WINDOW 15,8,55,20);
  REPEAT
  UNTIL REAKEY <> #0;
  WINDOW (15,8,55,20);
  WRITELN (a coluna superior esquerd, LO (WINDMIN));
  WRITELN ( a linha superior esquerd, HI(WINDMIN));
  WRITELN (a coluna inferior direit, LO (WINDMAX));
  WRITELN ( a linha inferior direit, HI(WINDMAX));
  WRITELN (telce algo para nova WINDOW 1,16,40,21);
  REPEAT
  UNTIL READKEY <> #0;
  WINDMIN := $1001;
  WINDMAX := $1528;
  GOTOXY (1,1);
  WRITELN (a coluna superior esquerd, LO(WINDMIN));
  WRITELN (a linha superior esquerd, HI(WINDMIN));
  WRITELN ( a coluna inferior direit, LO(WINDMAX));
  WRITELN ( a linha inferior direit, HI(WINDMAX));
  REPEAT
  UNTIL READKEY <> #0;
END.

  A ltima varivel que temos nessa unidade,  a LASTMODE. Cada vez que  
executada a rotina TEXTMODE, o modo corrente de vdeo  salvo na varivel
LASTMODEe quando o programa  carregado, LASTMODE  inicializado com o modo
ativo de vdeo. Vejamos um exemplo:
PROGRAM teste_lastmode;
USES CRT;
VAR
  antes : WORD;
BEGIN
  CLRSCR;
  antes := LASTMODE;
  WRITELN (modo atual, LASTMODE);
  WRITELN (tecle algo para continuar);
  REPEAT
  UNTIL READKEY <> #0;
  TEXTMODE (CO40);
  WRITELN (em 40 colunas);
  WRITELN (tecle algo para continuar);
  REPEAT
  UNTIL READKEY <> #0;
  TEXTMODE (antes);
  WRITELN (voltamos ao modo inicial);
  WRITELN (tecle algo para continuar);
  REPEAT
  UNTIL READKEY <> #0;
END.
