
Instr. 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érica, longitud 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érica, anchura 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.
|
|