Instrucciones de Pantalla

Sin duda alguna e independientemente del lenguaje de programación escogido, las instrucciones que mas se suelen utilizar, serán las que hagan uso de la pantalla, ya sea como salida o entrada de información.

Para la programación en Windows, pondré la información en la Sección «Programando en Windows».

Vamos a utilizar ésta sección para hacer un análisis profundo de dichas instrucciones.


ACCEPT, es la instrucción que usaremos para la entrada de datos. Aunque su sintaxis principal nunca ha variado, ésta ha sido una de las instrucciones que mas cláusulas se le han ido añadiendo, incluso diferentes según el compilador, aquí vamos a explicar las comunes y principales.

Aunque la forma mas usual de utilizarla, es para aceptar datos por el teclado, también es posible utilizarla para «cogerlos» también del sistema, para aceptar valores de variables de entorno definidas previamente a nivel de sistema o para aceptar pantallas completas definidas en la SCREEN-SECTION. Además siguen aumentando sus posibilidades. Veamos sus formatos principales:

Formato para aceptar datos del sistema o variables de entorno.

ACCEPT variable FROM (DATE, DAY, DAY-OF-WEEK, TIME, CENTURY-DATE, CENTURY-DAY, ESCAPE-KEY, ENVIRONMENT variable de entorno)

Según la opción escogida, así será el valor que contendrá la variable usada, una vez completada la sentencia. Veamos cada una de las opciones:

  • DATE, devuelve la fecha en formato AAMMDD, por lo que la variable debe de estar definida con PIC 9(6).
  • CENTUY-DATE, igual que DATE, pero acepta la fecha con 8 dígitos en formato SSAAMMDD. Definir con PIC 9(8).
  • DAY, devuelve el año y el día del año en que estamos con el formato AADDD, siendo el valor 1, para el 1 de Enero y así sucesivamente. Debe de estar definida con PIC 9(5).
  • CENTURY-DAY, igual que DAY, pero acepta 4 dígitos para el año, quedando el formato AAAADDD. Definir con PIC 9(7).
  • DAY-OF-WEEK, devuelve un dígito que indica el día de la semana, siendo 1 el Lunes, 2 el Martes, … Aquí, la variable debe de estar definida como PIC 9.
  • TIME, devuelve la hora con formato HHMMSSMM, la variable debe de estar como PIC 9(8).
  • ESCAPE-KEY, devuelve el código de la tecla de excepción pulsada, debe de estar definida con PIC 99 y según el compilador los valores pueden ser distintos, pero los básicos suelen ser los mismos, por ejemplo: ENTER=13, FLECHA ARRIBA=52, FLECHA-ABAJO=53 y las teclas de función desde F01 hasta F8 tomarían los valores del 1 al 8, TAB=9.
  • ENVIRONMENT «Variable de entorno» , nos devuelve el valor que dicha variable tenga asignado, normalmente éstas variables se asignan en el fichero de configuración del compilador o desde una variable del sistema. Puede ser muy útil para darle capacidades a usuarios diferentes por ejemplo. Tener en cuenta que la variable de entorno debe de ir entre comillas para que sea reconocida.

La definición de la variable que he dado, no es fija, pero si la mas conveniente, es decir para guardar el dia de la semana, he indicado una variable con PIC 9, pero podíamos haber escogido PIC 9(8), lo que pasa, es que no tendría mucho sentido malgastar espacio, cuando sabemos con seguridad, que el dato posible es de 1 a 7, y por lo tanto de PIC 9.

Además de todas éstas opciones, cada compilador ha ido incorporando las que ha creido conveniente y por ejemplo con algunas de las nuevas es posible saber información sobre el sistema sobre el que trabajamos, el terminal, la línea, etc ….


WORKING-STORAGE SECTION.
77  DIA  PIC 9.
77  FECHA PIC 9(6).
77  FECHA8 PIC 9(8).

PROCEDURE DIVISION.
INICIO.
ACCEPT DIA FROM DAY-OF-WEEK.
ACCEPT FECHA FROM DATE.
ACCEPT FECHA8 FROM CENTURY-DATE.

Nota: 
Si usarames éste programa el día 1 de Julio de 1.999, el valor de las variables sería:

     FECHA=990701.
FECHA8=19990701
DIA=4.

El 4 nos indicaría que el día de la semana sería Jueves.

Formato para aceptar datos por el teclado.

ACCEPT variable CLAUSULAS … ON EXCEPTION variable instrucción.

La lista de cláusulas es muy larga, y por desgracia algunos compiladores pueden tener mas que otros, así que voy a explicar las mas comunes a continuación: Recordad que lo que se explica aquí puede ser válido tanto para ACCEPT como para DISPLAY.

  • LINE variable, constante numérica(ACCEPT Y DISPLAY) le indicamos la línea donde se aceptará el campo, puede ser una variable o un número, tendremos siempre en cuenta que la línea 1 será la primera de arriba de la pantalla, normalmente podremos trabajar con 24 líneas. Si no se específica tomará la referencia de la siguiente línea en la que estemos.
  • COLUMN, COL, POSITION variable, constante numérica(ACCEPT Y DISPLAY) aquí le indicamos la columna dentro de la línea y sus valores pueden ser desde 1 (izquierda) hasta 80 (derecha) de la pantalla. En algunos terminales es posible capturar 132 columnas. Si no se especifica tomará el valor 1.
  • BEEP, NO BEEP(ACCEPT Y DISPLAY) con ésta opción le indicamos si queremos o no que emita un pitido al llegar al comando. Por defecto sonará.
  • BLINK(ACCEPT Y DISPLAY) si aparece ésta cláusula, el campo que aceptemos parpadeará.
  • HIGH, LOW, OFF(ACCEPT Y DISPLAY) le indicamos el nivel de luminosidad con que se acepta el campo, solo puede ir especificado uno: HIGH con brillo, LOW sin brillo, OFF hace que los datos que introducimos no se vean, se utiliza cuando queremos aceptar una contraseña o alguna clave, en la pantalla no salen los datos que vamos introduciendo. Si no indicamos ninguna el sistema coge HIGH por defecto.
  • TAB(ACCEPT) la presencia de ésta cláusula hace que no salte al siguiente campo hasta que no pulsemos ENTER. Por defecto al introducir el número de caracteres o dígitos del campo salta automáticamente.
  • TIME variable, constante numérica(ACCEPT) conseguiremos que la espera para introducir el campo sea limitada y vendrá dada por el valor que le asignemos. El valor se indica en centésimas de segundo.
  • CURSOR variable(ACCEPT) si especificamos ésta cláusula, el sistema guardará en la variable la posición donde se ha terminado la introducción de los datos. Por ejemplo si aceptamos un campo de PIC X(40) y solo rellenamos 9 caracteres, el valor de la variable asociada a CURSOR será de 10.
  • ERASE, haremos que se borra toda la pantalla.
  • ERASE EOL(ACCEPT Y DISPLAY) le indicamos que borre la línea sobre la que estamos desde la posición del ACCEPT.
  • ERASE EOS(ACCEPT Y DISPLAY) le indicamos que borre toda la página desde la posición de la línea en la que estamos.
  • PROMPT carácter(ACCEPT) conseguimos que rellene con algún carácter específico o por defecto el cursor bajo (_) la longitud del campo que vamos a aceptar. Es bastante útil ya que el usuario puede ver claramente la longitud del campo.
  • ECHO(ACCEPT) con ésta cláusula hacemos que vuelva a «pintar» el contenido del campo después de aceptado. Es decir si le hemos puesto PROMPT ECHO, mientras se acepta saldrán los guiones bajos para indicar el tamaño pero al salir del campo se volverá a displayar y éstos guiones desaparecerán.
  • REVERSE(ACCEPT Y DISPLAY) conseguimos que el campo que aceptamos se vea en video inverso, si normalmente es blanco sobre negro, se hará negro sobre blanco, y si tenemos otros colores, pues en su color inverso.
  • SIZE variable, constante numérica(ACCEPT) variamos el tamaño de la variable que teníamos declarado. Por ejemplo si definimos una variable con PIC X(40) y le indicamos al aceptarla SIZE 10, solo aceptará 10 caracteres para esa variable.
  • CONVERT(ACCEPT Y DISPLAY) con ésta cláusula conseguimos que si estamos aceptando un campo numérico o alfabético, e introducimos un valor no aplicable, lo ignore. Por ejemplo si introducimos una letra en un campo numérico será ignorada si CONVERT aparece.
  • UPDATE(ACCEPT) hace que el valor actual del campo aparezca y al aceptar podamos modificar sobre su contenido actual. Es muy aconsejable cuando estamos modificando datos.
  • CONTROL tipo de control(ACCEPT Y DISPLAY) ésta cláusula es bastante amplia y en ella podemos atribuir otras opciones como caracteres gráficos, colores, etc.. Su uso puede variar según los compiladores. Mas abajo encontrareis mas información.
  • ON EXCEPTION variable instrucción (ACCEPT) si al aceptar el campo introducimos una de las teclas que causa excepción, es decir que no es reconocida dentro de la tabla de caracteres admitida, el valor de la tecla se guardará en la variable que definamos y a continuación podremos realizar una instrucción. Por ejemplo si estamos aceptando un campo con PIC X(40) y cuando estamos metiendo su valor pulsamos la tecla escape, si tenemos ésta cláusula puesta la variable tomará el valor 27 (correspondiente a la tecla escape) y a continuación se ejecutaría la instrucción que hubiéramos puesto. Pero todo esto se ve mejor con los ejemplos que a continuación voy a indicar. Decir que la variable debe de estar definida con PIC 9 COMP-1.
  • UPPER, LOWER, (ACCEPT) con éstas opciones obligamos a que el valor del campo aceptado esté en Mayúsculas (UPPER ) o Minúsculas (LOWER).
  • COLOR, (ACCEPT y DISPLAY) cláusula propia de Acucobol con la que conseguimos aceptar el campo con un determinado color dependiendo de una tabla para asignación de colores.
  • REQUIRED, (ACCEPT) con ésta opción obligamos al usuario a que no deje el campo en blanco e introduzca cualquier dato.
  • FULL, (ACCEPT) obligamos a que una vez empecemos a introducir un campo, este no se acepte hasta que esté completo, es decir si aceptamos una variable con PIC X(30), mientras no introduzcamos los 30 caracteres no nos dejará seguir.
Color Letra Fondo Observaciones
Negro 1 32 Para conseguir los colores, debemos de sumar las dos cantidades correspondientes a la letra y al fondo, por ejemplo si queremos el fondo blanco y la letra azul, el valor que se le debería de asigna a la cláusula COLOR será de 258 (256 fondo blanco + 2 letra azul).
Azul 2 64
Verde 3 96
Celeste 4 128
Rojo 5 160
Morado 6 192
Marrón 7 224
Blanco 8 256

TIPOS DE CONTROL. Voy a explicar algunos de los atributos que se pueden utilizar cuando la frase CONTROL se especifica en ACCEPT o DISPLAY. El formato es el siguiente:

CONTROL «FCOLOR=color, ………….».

  • FCOLOR, color de primer plano, utilizaremos los nombres de los colores (white, black, red, blue, green, magenta, brown y cyan).
  • BCOLOR, color de fondo y la gama de colores igual que la anterior.

Formatos Windows (100&100) de ACCEPT en Acucobol:

Con Acucobol (y hablo de él, por ser el que utilizo en la actualidad) se permite aceptar cualquier control gráfico típico de windows, como un ENTRY-FIELD, directamente desde la PROCEDURE DIVISION y con el comando ACCEPT propio de Cobol. Evidentemente cambia un poco sobre todo porque las cláusulas o propiedades son mucho mas amplias.


WORKING-STORAGE SECTION.
77  NOMBRE  PIC X(30).
77  CODIGO   PIC 9(5).
77  ESCA        PIC 9 COMP-1.
77  QW           PIC 9.

PROCEDURE DIVISION.
INICIO.
ACCEPT NOMBRE LINE 10 COL 20 PROMPT LOW REVERSE ECHO CONTROL «FCOLOR=BLUE, BCOLOR=WHITE» ON EXCEPTION  ESCA MOVE 1 TO QW.
ACCEPT CODIGO LINE 12 COL 20 CONVERT.


Nota: 
Con el primer ACCEPT conseguiriamos introducir un valor en la variable NOMBRE, lo aceptaremos en brillo suave con video reverso y una vez introducido el campo, este se volverá a mostrar tal y como va a quedar, gracias a ECHO. Además se aceptará en color azul con fondo blanco y si pulsamos una de las teclas que causan excepcion según los valores permitidos, esta se guardaría en la variable ESCA y luego podríamos preguntar por su valor. Por ejemplo si pulsamos F1, F2, F3 tomará el valor 1, 2, 3. Si pulsamos ENTER (13) ESCAPE (27), Tabular (9), etc …
La siguiente orden nos permitirá aceptar la variable CODIGO en la cual los carácteres no numéricos no se admitirán al llevar la clásusula CONVERT.

Os aconsejo que hagáis todo tipo de pruebas con las opciones disponibles hasta que el resultado sea el que deseáis.

Muchas veces cuando se muestra un mensaje, se acepta una variable a continuación solo para dar tiempo al usuario. Algunos compiladores como Acucobol han implementado la siguiente opción:
ACCEPT OMITTED, y así no tenemos que definir ninguna variable.

Teneis que tener en cuenta que algunas de las cláusulas que explico es posible que no funcionen en todos los compiladores, así como es posible que existan otras que yo desconozca debido a que son usadas por otros compiladores.

DISPLAY, es la instrucción que usaremos como salida de datos en pantalla. Con ella mostraremos cualquier texto, cualquier variable, cualquier constante o cualquier valor, en resumidas es la instrucción para que aparezca lo que sea en pantalla. Las cláusulas asociadas a esta instrucción son practicamente las mismas que hemos visto para ACCEPT, con lo que solo las indicaré, su explicación la obtendréis arriba. De todas maneras ésta instrucción está siendo implementada en muchos mas campos, por determinados compiladores y no sería justo pensar que su única función es la que voy a explicar aquí, lo que si es cierto es que ésta es la común a todos los compiladores. Mas abajo hablaré un poco de todo esto que os digo y de su futuro.

DISPLAY variable, literal CLAUSULAS …

  • LINE, COL, SIZE, HIGH, LOW, REVERSE, BEEP, BLINK, ERASE. Todos funcionan igual que con la sentencia ACCEPT.

TIPOS DE CONTROL. Además de los vistos en ACCEPT y DISPLAY podemos utilizar otros:

CONTROL «FCOLOR=color, ………….».

  • FCOLOR, igual que en ACCEPT.
  • BCOLOR, igual que en ACCEPT.
  • GRAPHICS, según una tabla es posible utilizar caracteres semigráficos en cualquier sistema. Cuando programamos en MS-DOS, estos caracteres se pueden asignar muy facilmente pero al trabajar con sistemas UNIX-LINUX, gracias a ésta cláusula podemos conseguir esos carácteres. Existe una tabla para asignar los valores, por ejemplo la «q» nos da la linea horizontal (Alt+196 (-)) con la que se forman los cuadros, la «m» nos da la vertical (Alt+179 (¦)) Aqui no se ven bien.
  • WINDOW-CREATE, WINDOW-REMOVE, En RM/Cobol, también se utiliza para crear y borrar las pantallas virtuales con las que Cobol puede trabajar, pero para ver su uso, os podeis ir a la sección que existe específica para ello en TEMATICOS.

 


WORKING-STORAGE SECTION.
77  NOMBRE  PIC X(30).

PROCEDURE DIVISION.
INICIO.
DISPLAY » » LINE 1 ERASE CONTROL «FCOLOR=BLUE, BCOLOR=WHITE».
DISPLAY «INTRODUZCA EL NOMBRE» LINE 10 COL 10 REVERSE.
ACCEPT NOMBRE LINE 10 COL 34 PROMPT LOW ECHO.


Nota: 
Una cosa a tener en cuenta tanto con FCOLOR, como con BCOLOR, es que los colores que tomen seguirán activos hasta encontrar otra orden que los cambie, por eso al comenzar con esa primera linea conseguimos que toda la pantalla se muestre blanca y el texto en azul para todo el programa, hasta que se encuentre el compilador con otra linea que lo cambie. O sea que no será necesario seguir incluyendo la cláusula CONTROL, en todos los ACCEPT y DISPLAY que vayamos a utilizar mientras queramos mantener éste formato.

Otros formatos de DISPLAY:

DISPLAY nombre de pantalla CLAUSULAS …, podemos mostrar una pantalla completa que previamente hayamos definido en la SCREEN SECTION.

DISPLAY WINDOW CLAUSULAS … , en Acucobol se utiliza para crear las ventanas virtuales con las que Cobol puede trabajar, pero para ver su uso, os podeis ir a la sección que existe específica para ello TEMATICOS.

DISPLAY LINE CLAUSULAS …, conseguimos dibujar una línea vertical u horizontal donde le indiquemos con las cláusulas correspondientes. (No todos los compiladores), se incorporan además éstas cláusulas:

  • SIZE variable, constante numéricalongitud de la línea (horizontal).
  • LINES variable, constante numérica, altura de la línea (vertical).

DISPLAY BOX CLAUSULAS …, igual a la anterior per conseguimos dibujar un cuadro, muy útil, pero no todos los compiladores lo tienen implementado. Se incorporan además éstas cláusulas:

  • SIZE variable, constante numéricaanchura del cuadro (horizontal).
  • LINES variable, constante numérica, altura del cuadro (vertical).
  • TITLE variable, constante alfanumérica, título del cuadro.
  • TOP, BUTTON, CENTERED, RIGHT, LEFT posición que ocupará el título dentro del cuadro.


Formatos Windows (100&100) de DISPLAY en Acucobol:

Acucobol en su afán por conseguir una programación totalmente integrada con los sistemas gráficos, ha conseguido implementar a la orden DISPLAY la potencia necesaria para displayar ventanas Windows (100%100) así como cualquier tipo de control. Hoy podemos con una linea de código displayar un COMBOBOX, LABEL, FRAME, BITMAP, STANDARD WINDOW, FLOATING WINDOW, PUSH-BUTTON, ENTRY-LABEL, etc… y asignarle cualquiera de sus propiedades. Pero es un tema demasiado amplio para tratarlo desde aquí. Necesitaría una sección unica y exclusivamente para la programación gráfica, pero todo se andará.

Os aseguro que es muy grato obtener resultados Windows, programando directamente con el editor de MS-DOS (ese azul con muy pocas opciones) sin necesidad de ninguna herramienta externa, que también existe.