Modificando la pantalla de logon (VTAM)

Escrito por Javier

Después de haber implementado Netview, al intentar acceder al sistema, vemos que hemos perdido la pantalla de logon roja que teníamos. No es que fuese muy bonita, pero era mejor que lo que tenemos ahora. Vamos a aprovechar para poner una nueva.

Cuando arranca VTAM, la pantalla que vemos ahora es así:

 

Lo que muestra es un código escrito en ensamblador que, una vez compilado,  se guarda en una librería **.VTAMLIB. A esto se le llama tabla USS. En ese código podemos definir el texto que queremos que se muestre, la posición, el color, los comandos de acceso para las aplicaciones, los mensajes de error, etc.

Ahora tenemos que identificar cómo se tiene que llamar el módulo que dejaremos en la librería **.VTAMLIB, ya que los terminales que se conectan usan ese miembro. Por ejemplo, estás arrancando el Hércules y aparece la pantalla azul, en el momento en el que arranca VTAM, el terminal muestra la tabla USS que tengamos definida (la pantalla roja).

Si habéis implementado Netview siguiendo las guías de este blog, vamos a la librería NETVIEW.CNM01.VTAMLST y entramos en el miembro A01LOCAL, veremos en la definición de cada terminal el parámetro “USSTAB= AUSSTAB,” esto quiere decir que el nombre de la tabla que va a usar es AUSSTAB. 

 

Hay que tener en cuenta que, como tenemos varias tablas concatenadas en el procedimiento de arranque de VTAM y estás librerías siguen un orden, si compilamos una tabla USS con el nombre AUSSTAB en varías librerías VTAMLIB, la tabla usada será aquella que esté antes en la lista de VTAMLIBs disponibles.

Por ejemplo, en la imagen vemos la librería USER.VTAMLIB y, en segundo lugar, NETVIEW.VTAMLIB. En caso de tener dos miembros AUSSTAB, uno en cada librería, se usará el de la librería USER.VTAMLIB al estar antes en la definición del procedimiento VTAM.

 

NOTA: Más información sobre las tablas USS aquí: https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.istrdr0/uss.htm

 

Vamos a comenzar a crear una pantalla de logon (una tabla USS). Como escribir el código para hacer una pantalla desde cero puede ser algo muy largo y complicado, vamos a coger un ejemplo de internet ya creado y vamos a modificar colores, líneas, comandos para acceder a aplicaciones, etc.

NOTA: El código que vamos a usar de base no ha sido escrito por mí, lo encontré en la siguiente web. Nosotros vamos a hacer modificaciones a partir de ese código. Es un gran trabajo el que ha hecho el autor, además de compartirlo con los demás. Gracias. https://mainframed.wordpress.com/2012/06/17/changing-the-logon-screen-on-the-mainframe-zos-vtam-in-adcd/

 

//USSSCHG  JOB (JOBNAME),'CREATE USS SCREEN ',CLASS=A,     

//             MSGLEVEL=(1,1),MSGCLASS=K,NOTIFY=&SYSUID   

//*

//BUILD   EXEC ASMACL

//C.SYSLIB  DD DSN=SYS1.SISTMAC1,DISP=SHR

//          DD DSN=SYS1.MACLIB,DISP=SHR

//C.SYSIN   DD *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

         MACRO

&NAME    SCREEN &MSG=™,&TEXT=™

         AIF   ('&MSG' EQ '™' OR '&TEXT' EQ '™').END

         LCLC  &BFNAME,&BFSTART,&BFEND

&BFNAME  SETC  'BUF'.'&MSG'

&BFBEGIN SETC  '&BFNAME'.'B'

&BFEND   SETC  '&BFNAME'.'E'

.BEGIN   DS    0F

&BFNAME  DC    AL2(&BFEND-&BFBEGIN)        MESSAGE LENGTH

&BFBEGIN EQU   *                       START OF MESSAGE

         DC    X'F57A'                 ERASE/WRITE, WCC

         DC    X'110000'               SBA, 0000     ROW 00 COL 01

         DC    X'290242F6C0F0'         SFE, PROTECTED/NORMAL/YELLOW

         DC    C'Mainframe Operating System           '

         DC    C'                           z/OS V1.10'

*              NEXT ELEVEN LINES DISPLAYS LOGOs

         DC    X'110050'               SBA, 0080     ROW 01 COL 01

         DC    X'290242F2C0F0'         SFE, PROTECTED/NORMAL/RED

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                         SSSS Y   Y  SSS'

         DC C'S  AAA                                  '

         DC C'                        S      Y Y  S   '

         DC C'  A   A                                 '

         DC C'                          SSS   Y    SSS'

         DC C'  AAAAA                                 '

         DC C'                            S   Y       '

         DC C'S A   A                                 '

         DC C'                        SSSS    Y   SSSS'

         DC C'  A   A                                 '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC C'                                        '

         DC    X'110410'               SBA, 0960     ROW 12 COL 01

         DC    X'290242F4C0F0'         SFE, PROTECTED/NORMAL/GREEN

         DC C'                   Welcome to SYSA Mainf'

         DC C'rame System!                              '

         DC    X'1104B0'               SBA, 1120     ROW 14 COL 01

         DC    X'290242F5C0F0'     SFE, PROTECTED/NORMAL/PURPLE

         DC C'                                        '

         DC C'                                        '

.* APPLICATION: TSO

         DC    X'110508'               APPLICATION POSITION

         DC    X'290242F2C0F0'         SFE, PROTECTED/NORMAL/RED

         DC    C'TSO'                  APPLICATION NAME

         DC    X'110511'               DESCRIPTION POSITION

         DC    X'290242F1C0F0'         SFE, PROTECTED/NORMAL/BLUE

         DC    C'- Logon to TSO/ISPF'  APPLICATION DESCRIPTION

.* APPLICATION: NETVIEW

         DC    X'11052C'               APPLICATION POSITION

         DC    X'290242F2C0F0'         SFE, PROTECTED/NORMAL/RED

         DC    C'CNM01'                APPLICATION NAME

         DC    X'110535'               DESCRIPTION POSITION

         DC    X'290242F1C0E0'         SFE, PROTECTED/NORMAL/BLUE

         DC    C'- Netview System'     APPLICATION DESCRIPTION

.* APPLICATION: CICSTS32

         DC    X'110558'               APPLICATION POSITION

         DC    X'290242F2C0F0'         SFE, PROTECTED/NORMAL/RED

         DC    C'CICSTS32'             APPLICATION NAME

         DC    X'110561'               DESCRIPTION POSITION

         DC    X'290242F1C0F0'         SFE, PROTECTED/NORMAL/BLUE

         DC    C'- CICS System'        APPLICATION DESCRIPTION

.* APPLICATION: SA

         DC    X'11057C'               APPLICATION POSITION

         DC    X'290242F2C0F0'         SFE, PROTECTED/NORMAL/RED

         DC    C'SA'                   APPLICATION NAME

         DC    X'110585'               DESCRIPTION POSITION

         DC    X'290242F1C0E0'         SFE, PROTECTED/NORMAL/BLUE

         DC    C'- System Automation'  APPLICATION DESCRIPTION

.* APPLICATION: IMS

         DC    X'1105A8'               APPLICATION POSITION

         DC    X'290242F2C0F0'         SFE, PROTECTED/NORMAL/RED

         DC    C'IMS'                  APPLICATION NAME

         DC    X'1105B1'               DESCRIPTION POSITION

         DC    X'290242F1C0F0'         SFE, PROTECTED/NORMAL/BLUE

         DC    C'- IMS System'         APPLICATION DESCRIPTION

.* OTHER INFORMATION

         DC    X'110640'               SBA, 1600     ROW 21 COL 01

         DC    C'Enter your choice==>'

         DC    X'110654'               SBA, 1622     ROW 21 COL 22

         DC    X'290242F2C0D8'         SFE, UNPROTECTED/NORMAL

         DC    X'13'                   INSERT CURSOR

         DC    X'11068F'               SBA, 1690     ROW 22 COL 01

         DC    X'290242F6C0F0'         SFE, PROTECTED/NORMAL/YELLOW

         DC    C&TEXT                  USS MESSAGES

         DC    X'11072F'               SBA, 1840     ROW 24 COL 01

         DC    X'290242F1C0F0'         SFE, PROTECTED/NORMAL/GREEN

         DC    C'Your IP(@@@@@@@@@IPADDR:@@PRT), SNA LU(@@LUNAME)'

         DC    C'       @@@@DATE @@@@TIME'

&BFEND   EQU   *                       END OF MESSAGE

.END     MEND

*

*

*               ..............

USSTAB   USSTAB TABLE=STDTRANS,FORMAT=DYNAMIC

*        SPACE

TSO      USSCMD CMD=TSO,REP=LOGON,FORMAT=BAL   

         USSPARM PARM=APPLID,DEFAULT=TSO

         USSPARM PARM=P1,REP=DATA

*        SPACE

CNM01    USSCMD  CMD=CNM01,REP=LOGON,FORMAT=BAL

         USSPARM PARM=APPLID,DEFAULT=CNM01

CICS     USSCMD  CMD=CICS,REP=LOGON,FORMAT=BAL

         USSPARM PARM=APPLID,DEFAULT=CICS

IMS      USSCMD  CMD=IMS,REP=LOGON,FORMAT=BAL

         USSPARM PARM=APPLID,DEFAULT=IMS81CR1

SA       USSCMD  CMD=CNM01,REP=LOGON,FORMAT=BAL

         USSPARM PARM=APPLID,DEFAULT=CNM01

*        SPACE

         USSMSG MSG=00,BUFFER=(BUF00,SCAN)

         USSMSG MSG=01,BUFFER=(BUF01,SCAN)

         USSMSG MSG=02,BUFFER=(BUF02,SCAN)

         USSMSG MSG=03,BUFFER=(BUF03,SCAN)

*        USSMSG MSG=04,BUFFER=(BUF04,SCAN)

         USSMSG MSG=05,BUFFER=(BUF05,SCAN)

         USSMSG MSG=06,BUFFER=(BUF06,SCAN)

         USSMSG MSG=08,BUFFER=(BUF08,SCAN)

         USSMSG MSG=10,BUFFER=(BUF10,SCAN)

         USSMSG MSG=11,BUFFER=(BUF11,SCAN)

         USSMSG MSG=12,BUFFER=(BUF12,SCAN)

         USSMSG MSG=14,BUFFER=(BUF14,SCAN)

*        SPACE

STDTRANS DC    X'000102030440060708090A0B0C0D0E0F'

         DC    X'101112131415161718191A1B1C1D1E1F'

         DC    X'202122232425262728292A2B2C2D2E2F'

         DC    X'303132333435363738393A3B3C3D3E3F'

         DC    X'404142434445464748494A4B4C4D4E4F'

         DC    X'505152535455565758595A5B5C5D5E5F'

         DC    X'604062636465666768696A6B6C6D6E6F'

         DC    X'707172737475767778797A7B7C7D7E7F'

         DC    X'80C1C2C3C4C5C6C7C8C98A8B8C8D8E8F'

         DC    X'90D1D2D3D4D5D6D7D8D99A9B9C9D9E9F'

         DC    X'A0A1E2E3E4E5E6E7E8E9AAABACADAEAF'

         DC    X'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'

         DC    X'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'

         DC    X'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'

         DC    X'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF'

         DC    X'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'

END      USSEND

*        SPACE

*********************************************************************** ********

*DEFAULT MESSAGE PROVIDED BY VTAM:

*  MSG 00: IST457I POSITIVE command COMMAND RESPONSE

*  MSG 01: IST450I INVALID command COMMAND SYNTAX

*  MSG 02: IST451I command COMMAND UNRECOGNIZED, PARAMETER=parameter

*  MSG 03: IST452I parameter PARAMETER EXTRANEOUS

*  MSG 04: IST453I parameter PARAMETER VALUE value NOT VALID

*  MSG 05: N/A

*  MSG 06: IST792I NO SUCH SESSION EXISTS

*  MSG 07: N/A

*  MSG 08: IST454I command COMMAND FAILED, INSUFFICIENT STORAGE

*  MSG 09: N/A

*  MSG 10: READY

*  MSG 11: IST455I parameters SESSIONS ENDED

*  MSG 12: IST456I keyword REQUIRED PARAMETER OMITTED

*  MSG 13: N/A

*  MSG 14: IST458I USS MESSAGE number NOT DEFINED

*********************************************************************** ********

*  CUSTOMIZED USS MESSAGES:

         SCREEN MSG=00,TEXT='Command is in progress...'

         SCREEN MSG=01,TEXT='Invalid command or syntax'

         SCREEN MSG=02,TEXT='Invalid Command'

         SCREEN MSG=03,TEXT='Parameter is unrecognized!'

*        SCREEN MSG=04,TEXT='Parameter with value is invalid'

         SCREEN MSG=05,TEXT='The key you pressed is inactive'

         SCREEN MSG=06,TEXT='There is not such session.'

         SCREEN MSG=08,TEXT='Command failed as storage shortage.'

         SCREEN MSG=10,TEXT='Enter one of above commands in red'

         SCREEN MSG=11,TEXT='Your session has ended'

         SCREEN MSG=12,TEXT='Required parameter is missing'

         SCREEN MSG=14,TEXT='There is an undefined USS message'

         END

/*

//L.SYSLMOD DD DISP=SHR,DSN=USER.VTAMLIB

//L.SYSIN   DD *

  NAME AUSSTAB(R)

//*

 

 

Es un código largo y puede llegar a ser complicado de entender. Hay que dedicarle tiempo. Lo primero que vamos a hacer es copiar el código y meterlo en un miembro de alguna librería que usemos para guardar JCLs y demás. Yo tengo una llamada IBMUSER.JCLS.

 

Ahora, al final del JCL, vamos a modificar la librería de salida. En esa librería es dónde quedará el módulo ya compilado. Puede ser USER.VTAMLIB, NETVIEW.VTAMLIB, ADCD.Z113.VTAMLIB, dependiendo de cómo lo tengáis concatenado en el procedimiento del VTAM. Yo voy a usar USER.VTAMLIB.

 

También tenemos en cuenta que el nombre que tendrá será AUSSTAB. Ahora lo vamos a submitir, antes de modificar nada más, para confirmar que es un código que funciona.

 

El código ha terminado con RC=0. Podemos confirmar que en la librería de salida hay un miembro llamado AUSSTAB. IMPORTANTE que el JCL haya terminado con RC=0, sino puede que encontremos el módulo compilado, pero posiblemente no funcione correctamente y no podamos acceder correctamente al sistema.

 

Ahora vamos a la Consola (o al SDSF y ponemos una barra /) y usamos el comando:

F VTAM,TABLE,OPTION=LOAD,NEWTAB=AUSSTAB

Ese comando cargará de nuevo la tabla USS.

 

Aparecerá la confirmación “MODIFY TABLE COMMAND COMPLETE-TABLE AUSSTAB”.

 

Ahora abrimos un nuevo terminal (IMPORTANTE no cerrar el terminal que tenemos con el TSO abierto, por si hay algún problema con la tabla USS y no funciona al abrir un nuevo terminal, poder borrar el miembro AUSSTAB de la librería VTAMLIB). Si todo ha ido bien aparecerá la siguiente pantalla y podremos entrar a TSO.

 

Ya hemos verificado que el código que vamos a usar como base funciona. Vamos empezar a modificar la posición de los textos, colores, etc. Para entender la parte del código que nos interesa, vamos a usar como ayuda una web con información muy completa y un PDF de IBM.

http://www.prycroft6.com.au/misc/3270.html (recomiendo leer este enlace completo porque las tablas que usamos más abajo están sacadas de ahí)

http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/3270/GA27-2749-1_IBM_3270_Information_Display_System_Component_Description_Jun72.pdf

 

Nos posicionamos la línea que se ve en la imagen y nos fijamos donde pone “X’110000’ SBA, 0000 ROW 00 COL 01”. El dato importante es “X’110000’”, el resto es un comentario.

 

Teniendo en cuenta que trabajamos con una pantalla de 24 filas y 80 columnas, para poder posicionar un texto, por ejemplo, necesitamos indicar la fila y columna en la que estará situado. Los terminales disponen de un buffer en el que se guardan cada una de las posiciones de la pantalla. Según el tipo de terminal que usemos, tendrá un buffer mayor o menor.

3270 Screen

Columns

Rows

Buffer Size

3277 Model 1

40

12

480

3277 Model 2

80

24

1,920

3278 Model 3

80

32

2,560

3278 Model 4

80

43

3,440

3278 Model 5

132

27

3,564

3290

160

62

9,920

 

Para poder posicionar los elementos en la pantalla, tenemos que hacer referencia a su dirección del buffer. Por ejemplo, la fila 1 columna 1 se corresponde con la dirección 0000.

Para saber cada una de las posiciones, podemos utilizar el PDF que mencionamos anteriormente. (http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/3270/GA27-2749-1_IBM_3270_Information_Display_System_Component_Description_Jun72.pdf)

En la página 75 del PDF empieza una tabla con todas las posiciones por fila y columna y su correspondiente valor hexadecimal, que es el que usaremos para posicionarlo.

 

En la imagen nos tenemos que fijar en la columna “Mod 2” que hace referencia a un terminal de 24x80 y ver su valor correspondiente en la columna “Hex”.

Volviendo al dato que estábamos analizando “X’110000’” y teniendo en cuenta la siguiente tabla, podemos ver que ese comando hace referencia a la dirección del buffer (Set Buffer Address X’11’) 0000 que se corresponde con la fila 1 columna 1.

Si queremos ese texto en la fila 2 columna 5, vamos a la tabla del PDF y vemos que la posición es 0054, por lo tanto pondriamos “X’110054’”. Para cambiar de posición el texto es tan fácil como modificar los 4 últimos dígitos con la posición hexadecimal correspondiente.

3270 Order Name

EBCDIC

ASCII

Subsequent Bytes

Start Field (SF)

x'1D'

x'1D'

1 - Attribute Byte

Set Buffer Address (SBA)

x'11'

x'11'

2 - Buffer Address

Insert Cursor (IC)

x'13'

x'13'

0

Program Tab (PT)

x'05'

x'09'

0

Repeat to Address (RA)

x'3C'

x'14'

3 - Buffer Address and Repeat Byte

Erase Unprotected to Address (EUA)

x'12'

x'12'

2 - Buffer Address

 

Ahora vamos a explicar la siguiente línea “X'290242F6C0F0' SFE, PROTECTED/NORMAL/YELLOW”. La parte importante es “X'290242F6C0F0'”, el resto es comentario.

Volvemos a ir a la web http://www.prycroft6.com.au/misc/3270.html y nos fijamos en las siguientes tablas:

3270 Order Name

Byte 1

Byte 2

Byte 3

Byte 4

Start Field Extended (SFE)

x'29'

Count of Type/Value pairs

Type

Value

Modify Field (MF)

x'2C'

Count of Type/Value pairs

Type

Value

Set Attribute (SA)

x'28'

Type

Value

 

 

Attribute types for extended orders (SFE, MF and SA).

Attribute Type

Allowed Values

x'00' - Character Attribute reset

x'00' - only use with SA:
x'280000' will reset all character attributes to default values

x'C0' - Field Attribute

Standard 3270 field attribute byte
- only use with SFE and MF orders
- values as per figure 7

x'41' - Extended Highlighting

x'00' - Default
x'F1' - Blink
x'F2' - Reverse video
x'F4' - Underscore

x'42' - Color

x'00' - Default
x'F?' - colors as per figure 6

x'43' - Symbol Set

x'00' - Default
x'F1' - APL - use only with SA order
x'40'-x'EF' - symbol sets loaded by host program

 

Teniendo en cuenta esas dos tablas, vemos que el código “X'290242F6C0F0'” hace lo siguiente:

  • “X’2902”. Hace “Start Field Extended” con dos valores, un valor es 42F6 y el otro es C0E0 (ahora vemos que significa). Si queremos tres valores, pondríamos “X’290342F6C0F0MMMM”, siendo MMMM el otro valor que necesitemos.
  • “42F6”. Viendo la tabla superior, vemos que pone “x’42’”, por lo tanto, ese valor está definiendo el color del campo el F6 es el color amarillo, como vemos en la siguiente tabla. Si queremos cambiar el color a verde pondremos 42F4.

Attribute Value

Color

F1

Blue

F2

Red

F3

Pink

F4

Green

F5

Turquoise

F6

Yellow

F7

White

 

  • “C0F0”. Hace referencia a “Field Attribute” y sirve para definir si un campo es protegido o no. Un campo protegido significa que el usuario no podrá escribir encima, por ejemplo, si mostramos un mensaje. En un campo desprotegido el usuario podrá escribir, por ejemplo para poner el nombre de la aplicación a la que quiere acceder. Si queremos un campo desprotegido pondremos C0D0. En esta página hay más información sobre el “Field Attribute” http://www.tommysprinkle.com/mvs/P3270/sfe.htm 

 

Una vez visto esto, si queremos un campo protegido de color rojo y que parpadee (blink) pondremos: X'290342F2C0F041F1'. O si queremos un campo desprotegido con el fondo color blanco y las letras en negro (Reverse video) pondremos: X’290342F7C0D041F2’.

También podemos insertar el cursor para usarlo en un campo desprotegido usando la línea “X’13’”.

 

El resto de líneas que empiezan con “C’…’” son los textos que se muestran en pantalla y se pueden editar libremente modificando el texto. Hay que tener en cuenta que las líneas de texto de este JCL solo tienen 40 posiciones, por lo tanto, dos líneas C’….’ de 40 posiciones cada una, harán 1 línea del terminal, que tiene 80 posiciones (columnas). Esto explica que el texto de “SYSA” salga movido en el JCL, pero, cuando lo ves al logarte, se ve correctamente.

 

Si seguimos bajando, llegaremos a la parte de los comandos que podemos introducir para acceder a las aplicaciones.

 

En el caso de mi versión de z/OS, el comando para acceder a CICS es CICSTS42, pero podemos acceder poniendo solo CICS si modificamos las líneas de la siguiente forma:

CICS     USSCMD  CMD=CICS,REP=LOGON,FORMAT=BAL 

         USSPARM PARM=APPLID,DEFAULT=CICSTS42

De esta forma el comando que usaremos para entrar será CICS, pero por defecto dará el comando correcto, CICSTS42.

Igual para IMS:

IMS      USSCMD  CMD=IMS,REP=LOGON,FORMAT=BAL 

         USSPARM PARM=APPLID,DEFAULT=IMS3270

Para acceder a Netview se usa el comando CNM01, pero podemos repetir esas dos líneas y modificarlas de la siguiente forma para acceder poniendo NETVIEW:

NETVIEW  USSCMD  CMD=NETVIEW,REP=LOGON,FORMAT=BAL  

         USSPARM PARM=APPLID,DEFAULT=CNM01         

En esta imagen vemos estos últimos cambios que acabamos de realizar.

 

Si seguimos bajando, casi al final, vemos los mensajes VTAM personalizados que muestran si hay algún error. También podemos modificarlos.

 

Una vez hayamos hecho los cambios deseados, submitiremos el job y, si ha terminado con RC=0 (IMPORTANTE), volveremos a dar el comando “F VTAM,TABLE,OPTION=LOAD,NEWTAB=AUSSTAB” para tener cargada la nueva tabla. 

Siguiendo estas indicaciones, se puede hacer el panel que se os ocurra. El resultado mi pantalla de logon ha sido el siguiente:

 

¡Hasta la próxima!

 

Visto: 4050

Escribir un comentario


Código de seguridad
Refescar