stringtranslate.com

Lenguaje de control

El lenguaje de control ( CL ) es un lenguaje de scripts creado originalmente por IBM para el System/38 Control Program Facility [1] y posteriormente utilizado en OS/400 (ahora conocido como IBM i). Tiene un parecido con el lenguaje de control de trabajos de IBM y consiste en un conjunto de objetos de comando (*CMD) utilizados para invocar programas tradicionales u obtener ayuda sobre lo que hacen esos programas. CL también se puede utilizar para crear programas CL (congruentes con los scripts de shell ) donde hay comandos adicionales que proporcionan una funcionalidad similar a la de un programa (IF/ELSE, declaración de variables , entrada de archivos, etc.)

Aunque CL es un lenguaje de scripts para administración de sistemas, se utiliza principalmente para crear programas compilados. El uso de scripts CL interpretados a través del comando SBMDBJOB [2] es, de hecho, extremadamente limitado.

Si bien los desarrolladores de IBM escribieron miles de comandos para realizar tareas a nivel de sistema, como compilar programas, realizar copias de seguridad de datos, cambiar configuraciones del sistema, mostrar detalles de objetos del sistema o eliminarlos, los comandos no se limitan a cuestiones a nivel de sistema y también pueden redactarse para aplicaciones de usuario.

Comandos y programas

Los parámetros ( argumentos de la línea de comandos ) definidos en los procedimientos principales de todos los programas tradicionales de System/38 y AS/400 son listas codificadas de forma rígida que se componen de parámetros que pueden ser numéricos, alfanuméricos, booleanos, etc. y el orden en el que se pasan los parámetros es importante. Esta es una marcada diferencia con los mundos de Unix y DOS , donde la lista de parámetros en los scripts de shell de Unix y los programas en C es un conjunto o matriz de punteros de caracteres y, en la mayoría de los casos, los parámetros no dependen de la posición.

La solución del desarrollador a este problema fue el objeto de comando (*CMD). Si bien los parámetros del comando se pueden especificar en cualquier orden, cada parámetro está definido para ser pasado en un orden específico al programa. El programador también puede definir, entre otras cosas, el tipo de datos del parámetro , el nombre único del parámetro, el texto descriptivo (para solicitar ayuda), el valor predeterminado (usado solo si el parámetro no se especifica durante la ejecución), si los valores están restringidos a un determinado conjunto o rango, si los datos ingresados ​​deben cambiarse a otro valor antes de llamar al programa, etc.

En su forma más básica, un comando nombra un único programa que se llamará cuando el usuario escriba o solicite el comando y presione la tecla Intro. El comando toma todos los parámetros escritos por el usuario y aquellos que no escribió, y crea una lista de parámetros que pasa al programa cuando se lo llama.

Sintaxis

El BNF para una sintaxis de comando CL mucho más simplificada se definiría de la siguiente manera:

 < CL-command >  ::= nombre-de-comando [ < lista-de-parámetros-posicionales > ] [ < lista-de-parámetros-con-nombre > ] < lista-de-parámetros-posicionales >  ::=  < valor-de-parámetro > [ < lista-de-parámetros-posicionales > ] < lista-de-parámetros-con-nombre >  ::= nombre-de-parámetro "(" < lista-de-elementos-de-parámetro > ")" [ < lista-de-parámetros-con-nombre > ] < lista-de-elementos-de-parámetro >  ::=  < valor-de-parámetro > [ < lista-de-elementos-de-parámetro > ] < valor-parámetro >  ::= nombre-CL | nombre-CL-calificado | "*"valor especial | nombre-CL-genérico"*" | "'"valor-alfanumérico"'" | valor-numérico | "X'"valor hexadecimal"'"

Los elementos anteriores que terminan en -name siguen las convenciones de nombres de objetos que, en términos generales, significan que el nombre comienza con una letra y puede tener hasta diez caracteres de longitud. (Los comandos CL tampoco distinguen entre mayúsculas y minúsculas).

Un buen ejemplo de un comando CL típico es el comando Cambiar programa (CHGPGM) que aparece a continuación:

CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('Mi programa.')

El comando anterior pasa cuatro parámetros al programa que realiza el procesamiento de cambio de programa y son:

En realidad, el sistema pasará muchos más parámetros que los cuatro especificados anteriormente. Esto se debe a que el resto de los parámetros del comando CHGPGM no se especificaron, por lo que se pasarán los valores predeterminados en su lugar. Para cada parámetro de este comando, además del parámetro PGM, el valor predeterminado es *SAME , lo que significa que no se debe cambiar.

Incitación

Todos los comandos CL se pueden solicitar directamente desde la línea de comandos o desde el código fuente del programa CL , escribiendo el comando y presionando la tecla de función F4 . También se puede solicitar un comando OS/400 escribiendo un signo de interrogación antes del comando. (Esto resulta útil en un programa interactivo que muestra una cadena de comandos, habiendo completado ya algunos valores).

A continuación, el sistema presentará una pantalla con el conjunto de parámetros que el programa acepta/requiere (los parámetros requeridos normalmente aparecen resaltados).

Los parámetros obligatorios se enumeran primero y los parámetros con valores predeterminados proporcionados por el sistema se enumeran al final. Para ver todos los parámetros, presione F10. Si alguna opción requiere selecciones adicionales, estas se indican a medida que selecciona ese valor para ese parámetro, apareciendo en la pantalla.

El sistema de avisos se ha mejorado aún más para permitir al programador encontrar qué valores son válidos para cada parámetro. Para ello, durante el aviso, el usuario debe mover el cursor al campo del parámetro en cuestión y presionar F4 nuevamente. El sistema mostrará una pantalla que describe el tipo de entrada requerida y una lista disponible de valores permitidos.

Para introducir un nombre más largo o ampliar la lista para que le permita introducir valores adicionales, escriba un signo más en lugar de un valor (como cuando se enumeran los nombres de los objetos que se guardarán o restaurarán).

Ayuda de comando

También se puede proporcionar ayuda sensible al cursor sobre los comandos, pero no es obligatorio. Si se ha proporcionado ayuda, se puede ver la ayuda para un parámetro moviendo el cursor al campo del parámetro deseado y presionando F1 (ayuda). Para obtener ayuda para todo el comando (y todos sus parámetros), el usuario presionaría F1 en cualquier parte de la pantalla de solicitud y luego presionaría F2 (ayuda extendida).

Creando nuevos comandos

Se pueden crear nuevos comandos para llamar a programas que no sean del sistema y funcionarán exactamente como los que vienen incorporados. El lenguaje de definición de comandos se describe en la Guía del programador de CL.

Es una buena idea crear pantallas de ayuda para los nuevos comandos y sus parámetros. Todas las pantallas de ayuda utilizan objetos de grupo de paneles (*PNLGRP) y estos pueden crearse utilizando el lenguaje UIM descrito en el manual de programación de la pantalla de aplicaciones AS/400 de IBM.

A partir de la versión V5R3 del sistema operativo, se agregó un método nuevo y mucho más simple para crear ayuda: ejecutar el comando

GENCMDDOC CMD(MYLIB/MYCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM)

Se generará automáticamente un grupo de paneles UIM de esqueleto que incluye todos los parámetros descritos por el comando. El archivo resultante se puede editar (seu, wdsc, rdi), luego compilar con el comando CRTPNLGRP y, finalmente, asociar con el comando mediante CHGCMD HLPPNLGRP().

Encontrar el comando correcto

Hay 2262 comandos IBM incorporados en V7R3, [3] pero encontrarlos no es tan difícil debido a varios diseños del sistema que hacen la vida más fácil. Estos diseños que ahorran trabajo son: Abreviaturas estandarizadas, Menús de agrupación de comandos y Selección de comandos.

Abreviaturas estandarizadas

Los desarrolladores de IBM estandarizaron las abreviaturas utilizadas para crear nombres de comandos. Los verbos como change siempre se representan como CHG , display como DSP , work como WRK , create como CRT , etc. Los temas como program siempre son PGM , user es USR , module es MOD , server es SVR , etc. Puede ver todos los verbos y temas posibles utilizados en el sistema en los menús VERB y SUBJECT , solo ingrese los comandos GO VERB o GO SUBJECT.

De la misma manera, "Control Language Programming" se abrevió como CLP, y el tipo de fuente fue en consecuencia CLP. Con la introducción del modelo de programación ILE, el tipo de fuente se cambió a "CLLE". [4]

Menús de agrupación de comandos

Los menús VERB y SUBJECT forman parte de lo que se denominan menús de agrupación de comandos. Para cada abreviatura de tres (o cuatro) letras hay un menú dedicado a ella que comienza con las letras CMD . Por lo tanto, para ver todos los comandos CHG, el usuario ejecutaría el comando GO CMDCHG. Para los comandos de programa, el menú sería CMDPGM.

Existen otros menús además de los menús de agrupación de comandos. Se puede acceder al punto de inicio del sistema de menús presionando F4 en una línea de comando vacía.

Selección de comandos

Si sólo se conoce una parte de un comando o si se utiliza un software de terceros en el que los comandos no cumplen con el estándar de abreviaturas AS/400, se debe ingresar la parte del comando que se conoce, agregar un asterisco (para que sea genérico) y presionar Enter. El sistema mostrará una lista de comandos en la lista de la biblioteca del trabajo que coinciden con los nombres genéricos que se acaban de escribir. Luego, se puede recorrer la lista en busca del comando necesario y luego seleccionarlo usando la opción 1.

En segundo plano, el sistema utiliza el comando SLTCMD para realizar esta función. Si se desea seleccionar todos los comandos de una biblioteca , se solicita este comando e ingresa el valor especial *ALL.

Código de muestra

El siguiente es un ejemplo de programación CL. El programa convierte de forma interactiva fechas de juliano a MDY y viceversa. Los resultados se muestran en la línea 24 de la terminal. Acepta dos parámetros. El &INparámetro que es la cadena de fecha que se va a convertir. Si es una cadena juliana, debe tener el formato YYNNN, donde YY es el número del año y NNN es el número del día del año. Si es una cadena MDY, debe tener el formato MMDDYY. El segundo parámetro es &TYPque es el tipo de fecha al que se va a convertir. Debe ser 'J' (juliano) o 'M' (MDY). Por ejemplo: el comando CALL PGM(ICVTDATC) PARM('04180' 'M')convertirá la fecha juliana 04180 a 062804 (28 de junio de 2004).

PGM (&EN &TIP) DCL y EN *CARACTER 6 DCL y SALIDA *CARACTER 8 DCL y TIPO *CARACTER 1 SI (&TIPO = J) + HACER CVTDAT FECHA(&ENTRADA) AVAR(&SALIDA) DESDEFMT(*MDY) + TOFMT(*JUL) TOSEP(*NINGUNO) FINALIZAR DE LO CONTRARIO SI (&TYP = M) + HACER CVTDAT FECHA(&ENTRADA) A VAR(&SALIDA) DESDE FMT(*JUL) + TOFMT(*MDY) TOSEP(*NINGUNO) FINALIZAR SNDPGMMSG MENSAJE ('ENTRADA=' || &ENTRADA || ' SALIDA=' || & SALIDA) + TIPOMSG(*COMP)FIN DE LA PRESENCIA 

Véase también

Referencias

  1. ^ "Manual de referencia del lenguaje de control del IBM System/38" (PDF) . IBM. 1982-09-10 . Consultado el 2021-03-24 .[ enlace muerto permanente ]
  2. ^ itjungle.com
  3. ^ IBM.com
  4. ^ Meyers, Bryan (1997). Programación en lenguaje de control para AS/400 (2.ª edición). 29th Street Press. ISBN 9781882419760.