La pantalla en modo textual

Por

Cuando una pantalla se utiliza en el modo textual, su contenido únicamente se podrá representar mediante caracteres textuales, y no se podrá presentar videos, ni dibujos, ni imágenes fotográficas. En este modo, los píxeles de pantalla se distribuyen para formar una matriz de celdas de caracteres, cada una de las cuales podrá visualizar un carácter individual.

En el modo textual, el control de pantalla se efectúa a nivel de celdas de caracteres, en lugar de pixeles individuales. En la imagen a continuación se ilustra la distribución de celdas que se pueden visualizar en una pantalla funcionando en modo textual:

Ilustración de celdas de una pantalla textual a 80x25 caracteres.
Figura 1. Distribución de celdas de caracteres de una pantalla en modo textual.

En la pantalla de la imagen anterior, se puede observar una disposición típica de 25 filas (celdas distribuidas horizontalmente) y 80 columnas (celdas distribuidas verticalmente). Según su posición en pantalla, a cada celda de caracteres le corresponde una coordenada de la forma (x, y); donde, "x" indica el número de fila, mientras que "y" indica el número de columna. Las líneas que separan a cada celda sólo se han dibujado con fines didácticos, realmente nunca aparecerán en pantalla; solo se muestran, a manera de ejemplo, para ilustrar la configuración que tiene una pantalla cuando funciona en modo textual.

El modo textual solamente es posible ajustar atributos de pantalla relacionados con textos, como el color de fondo, el color del texto, el posicionamiento del texto de pantalla, e incluso cambiar a otras configuraciones textuales de pantalla.

Modos de texto en Pascal

Una pantalla se puede ajustar para que funcione en diferentes modos, según el tipo de adaptador gráfico que tengamos en nuestro equipo. Los compiladores Pascal (que siguen la sintaxis de Turbo Pascal) suelen implementar un conjunto de constantes, variables y procedimientos de la unidad Crt; que nos permiten configurar los distintos modos de texto admitidos en una pantalla en modo textual.

Las constantes de modo de texto

Para representar a cada modo de pantalla se utilizan constantes de modo, o sus valores numéricos, según la tabla que se muestra a continuación:

ConstanteValorCaracterística
BW40040x25 caracteres a Blanco/Negro
CO40140x25 caracteres a Color
BW8O280x25 caracteres a Blanco/Negro
CO8O380x25 caracteres a Color
Mono780x25 caracteres a Blanco/Negro
Font8x825643/50 líneas de caracteres

Cada constante representa distintas características de tamaño y texto de pantalla. Las constantes BW40, CO40, BW80, y CO80 representan los modos soportados por adaptadores a color CGA. La constante Mono representa el modo de texto simple a blanco y negro soportado por el adaptador monocromático MDA. La constante Font8x8 representa los modos a 43 ó 50 líneas (o filas), soportados por adaptadores EGA/VGA; esta constante se puede sumar con CO80 o la variable LastMode, para combinar sus efectos.

La variable LastMode

LastMode es la variable donde se almacena el valor del modo actual de pantalla, cada vez que el procedimiento TextMode sea ejecutado. Esta variable está predefina en la unidad Crt, mediante la siguiente declaración:

Var LastMode: Word;

Al inicio de un programa, LastMode es inicializada automáticamente luego de activar el modo de pantalla. Normalmente, esta variable se utiliza como parámetro del procedimiento TextMode para restaurar la pantalla a un modo de configuración anterior, ya que conserva el último modo de texto activo después de utilizar entornos gráficos.

Configuración del modo de texto (TextMode)

Para configurar la pantalla, a un modo de texto específico, se debe utilizar el procedimiento TextMode, cuya sintaxis es la siguiente:

TextMode (Modo);

Donde, Modo representa el parámetro que indica el modo de texto a seleccionar; puede usar como parámetro cualquier constante de modo de texto de la tabla anterior, o su valor equivalente, o la variable LastMode.

Cuando TextMode es ejecutado, la ventana actual es restablecida a la pantalla completa, los atributos de texto actual son reiniciados a su estado normal, y el modo de pantalla actual es almacenado en la variable LastMode. Mediante la variable LastMode y las constantes de modo podemos seleccionar la configuración de pantalla según nuestros requerimientos. Por ejemplo, para indicar que el último modo de texto activo sea seleccionado nuevamente, se debe ejecutar:

TextMode (LastMode);

Lo anterior resulta útil cuando se quiera volver al modo texto después de salir de un modo gráfico, iniciado con Graph o Graph3.

Para iniciar la pantalla a 80 columnas y 43 filas sobre una pantalla EGA, o iniciarla a 80 columnas y 50 filas sobre una pantalla VGA a color, deberá ejecutar la siguiente instrucción:

TextMode (CO80 + Font8x8);

Si su sistema está configurado en un modo a 43 ó 50 líneas, el modo será preservado por el código de inicio de la unidad Crt, al cargar un programa; y la variable que lleva el seguimiento del número máximo de líneas de la ventana activa (WindMax) será inicializada al valor correcto.

Veamos un ejemplo de cómo escribir una "plantilla de programa" que restaure el modo de pantalla a su estado inicial:

Program Pantalla;

Uses
   Crt;
Var
   InitMode: Integer;
   
Begin

   InitMode := LastMode; { Recuerda el modo inicial }

 { Instrucciones intermedias }

   TextMode (InitMode);
   
End.

El procedimiento TextMode no es soportado por los modos gráficos, y por consiguiente TextMode(LastMode) restaurará únicamente los modos que lo soportan. En Free Pascal el procedimiento TextMode solamente está implementado para los entornos DOS.

Aplicación de TextMode

Una aplicación muy sencilla, donde pongamos en práctica el uso del procedimiento TextMode, es el programa que se presenta a continuación; el cual nos permite seleccionar los distintos modos de texto posibles de la pantalla en modo textual.

Program Modos_de_Pantalla;

 { Probado en Turbo Pascal sobre el entorno DOSBox }

Uses
   Crt;
Const
   Ln = #10#13;
Var
   IniMode, ActMode, OptMode: Integer;
   ConMode: Char;

Begin
   Clrscr;
   IniMode := LastMode;
   OptMode := -1;

   Repeat

      ActMode := LastMode;
      Writeln ('CONFIGIGURACION TEXTUAL DE PANTALLA', Ln);
      Writeln ('Opciones de pantalla:', Ln);

      Writeln ('1. 40x25 Caracteres, Blanco/Negro');
      Writeln ('2. 40x25 Caracteres, Color');
      Writeln ('3. 80x25 Caracteres, Blanco/Negro');
      Writeln ('4. 80x25 Caracteres, Color');
      Writeln ('5. 80x25 Caracteres, Monocromático');
      Writeln ('6. 43/50 Líneas');
      Writeln ('7. Volver al modo inicial (MODE', IniMode, ')'); 
      Writeln ('0. Salir y dejar configuración actual', Ln);
      Writeln ('Configuración actual: MODE', ActMode);

      If OptMode = -1 then Begin
         Repeat
           Write ('Elija una opción de la lista: ');
           Readln (OptMode);
         Until (0 <= OptMode) And (OptMode <= 7)
      End;

      Case OptMode of
         1: TextMode (BW40);
         2: TextMode (CO40);
         3: TextMode (BW80);
         4: TextMode (CO80);
         5: TextMode (Mono);
         6: TextMode (Lo(LastMode)+Font8x8);
         7: TextMode (IniMode);
      End;

      If OptMode <> 0 then begin
         Writeln ('La pantalla se ha ajustado a MODE', LastMode);
         Writeln ('¿Fijarlo definitivamente?');
		 
         Repeat
            Write ('[Si=s/No=n]: ');
            Readln (ConMode);
            ConMode := Upcase(ConMode);
         Until ConMode in ['S', 'N'];
		 
         If ConMode = 'N' then TextMode (ActMode);
         OptMode := -1;
         Clrscr;
      End;

   Until OptMode = 0;

   Write (Ln, 'Pulse una tecla para salir');
   Readkey

End.

Las instrucciones del programa anterior se pueden seguir mejorando, para luego adaptarlas o implementarlas en otras aplicaciones de uso práctico, donde se requiera trabajar con distintas configuraciones textuales de pantalla.