Compilar progrmas en Hercules

Todo lo relacionado con simuladores de HW para otras plataformas. Hercules y ...
Responder
Sandra MO
Usuario
Usuario
Mensajes: 8
Registrado: 08 Jul 2012, 21:03
País: México
Ciudad: d.f
Ocupación: Programador

Compilar progrmas en Hercules

Mensaje por Sandra MO » 28 Abr 2014, 22:23

Un gran saludo a toda la comunidad.

Quiero pedirles ayuda.
Deseo hacer mi primer programa en cics con hercules pero no sé como podría compilar el mapa y el programa

de Antemano les agradezco su apoyo. :wink:

jbonich

Re: Compilar progrmas en Hercules

Mensaje por jbonich » 04 May 2014, 10:44

Hola,
Lo habitual es tener un Job ( grupo se sentencias Jcl ) escrito previamente, el cual contenga en su código, las sentencias necesarias y suficientes para apuntar tanto a las librerías donde están almacenados los programas cics traducidos y también las de las rutinas propias del lenguaje.
Hasta el año pasado estuve practicando con estas herramientas, por lo que si deseas, puedes escribirme a mi correo y es posible que te pueda encontrar el Job que yo usaba para compilar mis pgm de prueba Cics en hercules.
Saludos.
Julio S. Bonich S.

JPL
Usuario avanzado
Usuario avanzado
Mensajes: 53
Registrado: 18 Oct 2009, 13:41
País: Mexico
Ciudad: Mexico
Ocupación: Analista de desarrollo

Re: Compilar progrmas en Hercules

Mensaje por JPL » 04 May 2014, 13:56

Ejercicio 50 enviar un mapa con un mensaje fijo

Para este fin:
• Definiremos un mapa
• Compilaremos el mapa, se genera un mapa logico o simbolico, con los nombre de los campos del mapa y sus nombres simbolicos
• Daremos de alta el mapa como recursos de CICS y lo instalaremos
• Crearemos un programa que despliege ese mapa
• Daremos de alta el programa como recurso de CICS y lo instalaremos
• Lo daremos refrescaremos con NEW en CEMT
• Daremos de alta una transaccion como recurso de CICS que invoque el programa y la instalaremos

Definicion del mapa, conceptos

El mapa es lo que desplegamos en una pantalla en 24 renglones por 80 columnas
Ahi pones datos fijos (etiquetas o campos no referenciados) y valiables (campos referenciados) que son los que tecleamos o que nos envia un programa.

MAPSET es un conjunto de mapas

Son 3 los tipo de definiciones para un mapa: el MAPSET, el mapa o mapas que lo componen y los campos que componen en mapa

DFH es el prefijo que IBM asigna a los modulos de CICS


Un ejemplo de MAPSET es este:

HOLAMP DFHMSD TYPE=DSECT,MODE=INOUT,TERM=ALL,STORAGE=AUTO,LANG=COBOL

sus campos significan esto:

HOLAMP nombre del MAPSET, 7 caracteres maximo
DFHMSD Map set definition
TYPE=DSECT crear mapa simbolico (map=fisico)
MODE=INOUT modo, entrada, saida o entrada/salida
TERM=ALL todas las terminales
STORAGE=AUTO areas de mapa simbolicos separadas no redefinidas
LANG=COBOL lenguaje en que se generara el mapa simbolico

Un ejemplo de mapa es este:

HOLAMP DFHMDI SIZE=(24,80),LINE=1,COLUMN=1,COLOR=GREEN,HILIGHT=OFF, X
MAPATTS=(COLOR,HILIGHT),DSATTS=HILIGHT,CTRL=FREEKB

sus campos significan esto:

HOLAMP nombre del mapa, 7 caracteres maximo
DFHMDI map definition
SIZE=(24,80) tamano del mapa
LINE=1 linea donde empieza el mapa
COLUMN=1 columna donde empieza el mapa
COLOR=GREEN color en general (cambiado en la def campos)
HILIGHT=OFF sin brillo en general (cambiado en la def cmpos)
MAPATTS=(COLOR,HILIGHT) atributos a usar en el mapa fisico
DSATTS=HILIGHT atributos a usar en el mapa simbolico
CTRL=FREEKB FREEKB no bloquear teclado, ALARM sonar alarma,FSET reestablecer campos













Un ejemplo de definicion de campo es este:

DFHMDF POS=(10,10),LENGTH=20,INITIAL='********************', X
COLOR=BLUE,ATTRB=(ASKIP,NORM)

y significan esto:

DFHMDF Map Definition Field
POS=(10,10) Posicion en el mapa
LENGTH=20 Longitud
INITIAL='********************' Valor inicial
COLOR=BLUE Color
ATTRB=(ASKIP,NORM) Atributos: ASKIP (protegido salto automatico al siguiente no protegido), PROT (protegido), NUM (numerico), BRT (brillante), NORM (normal), DRK (oculto), IC (posiciona el cursor aqui), FSET (conserva el valor)


Codificaremos el siguiente mapa para enviar este mensaje

*******************
* *
* FIN TRANSC T001 *
* *
*******************

EJE0050 DFHMSD TYPE=DSECT,MODE=INOUT,TERM=ALL,STORAGE=AUTO,LANG=COBOL
EJ05001 DFHMDI SIZE=(24,80),LINE=1,COLUMN=1,COLOR=GREEN,HILIGHT=OFF, X
MAPATTS=(COLOR,HILIGHT),DSATTS=HILIGHT,CTRL=FREEKB
DFHMDF POS=(10,10),LENGTH=20,INITIAL='********************', X
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(11,10),LENGTH=20,INITIAL='* *', X
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(12,10),LENGTH=20,INITIAL='* FIN TRANSC T001 *', X
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(13,10),LENGTH=20,INITIAL='* *', X
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(14,10),LENGTH=20,INITIAL='********************', X
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMSD TYPE=FINAL
END



El JCL para compilar el mapa es el siguiente:

//COMPMAPA JOB (ZIP),'ENSAMBLA MAPA',
// MSGLEVEL=(1,1),
// MSGCLASS=S,
// REGION=0M,
// CLASS=A,
// NOTIFY=&SYSUID
//*
//*COMPMAPA JOB 'DESA', ACCOUNTING DATA
//* 'EMSR', USER NAME
//* COND=(0,NE), CONDICION PARA EJECUTARLO
//* CLASS=A, CLASE QUE USA (GRUPO)
//* MSGCLASS=H, MANTENGA LOS MENSAJES (HOLD)
//* MSGLEVEL=(1,1), ENVIA JCL>OUTPUT
//* NOTIFY=&SYSUID, NOTIFICAR AL USUARIO
//* REGION=5M 5 MEGAS RAM P EJECUCION
//*
//**********************************************************************
//*
//* NOTA : SOLO HAY QUE REMPLAZAR EL COMPONENTE
//* EJE0050 POR EL QUE SE DESEE ENSAMBLAR, EL COPY DE
//* DICHO MAPA SE GENERA EN LA BIBLITOCA CPY(mapa simbolico)
//*
//**********************************************************************
//* PASO : PSCH0010
//* PROGRAMA : ASMA90
//* FUNCION : VALIDA ARQUITECTURA DEL MAPA Y GENERA EL COPY
//**********************************************************************
//*
//PSCH0010 EXEC PGM=ASMA90,
// REGION=2M,
// PARM='DECK,NOOBJECT,LIST,XREF(FULL),ALIGN,SYSPARM(DSECT)'
//SYSLIB DD DSN=DFH320.CICS.SDFHMAC,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.MODGEN,DISP=SHR
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSPRINT DD SYSOUT=*
//SYSIN DD DSN=USER.AVAN.JP.MAP(EJE0050),DISP=SHR fte del mapa
//SYSPUNCH DD DSN=USER.AVAN.JP.CPY(EJE0050),DISP=SHR mapa simbolico
//*
//**********************************************************************
//* PASO : PSCH0020
//* PROGRAMA : ASMA90
//* FUNCION : ENSAMBLA MAPA PARA GENERAR EL MODULO DE CARGA
//**********************************************************************
//*
//PSCH0020 EXEC PGM=ASMA90,COND=(4,LT,PSCH0010),
// REGION=2M,
// PARM='DECK,NOOBJECT,LIST,XREF(FULL),ALIGN,SYSPARM(MAP)'
//SYSLIB DD DSN=DFH320.CICS.SDFHMAC,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
// DD DSN=SYS1.MODGEN,DISP=SHR
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSPRINT DD SYSOUT=*
//SYSIN DD DSN=USER.AVAN.JP.MAP(EJE0050),DISP=SHR
//SYSPUNCH DD DSN=&&MAPA,UNIT=3390,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=400),
// DISP=(NEW,PASS,DELETE),SPACE=(1700,(1000,300),RLSE)
//SYSLIN DD DUMMY
//*
//**********************************************************************
//* PASO : PSCH0030
//* PROGRAMA : IEWL
//* FUNCION : VALIDA Y GENERA EL MODULO DE CARGA PARA CICSLIB
//**********************************************************************
//*
//PSCH0030 EXEC PGM=IEWL,
// PARM='LET,LIST,SIZE=(512K,128K)',
// COND=(4,LT,PSCH0020)
//SYSLMOD DD DSN=DFH320.CICS.SDFHLOAD(EJE0050), mapa objeto
// DISP=SHR
//SYSLIN DD DSN=&&MAPA,DISP=(OLD,DELETE)
// DD *
NAME EJE0050(R)
/*
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(100,50))
//SYSPRINT DD SYSOUT=*,DCB=(RECFM=FB,LRECL=121,BLKSIZE=1210)
//*
//**********************************************************************
//* FINALIZA PROCESO
//**********************************************************************

notese la biblioteca de carga DFH320.CICS.SDFHLOAD donde se dejara el objeto del mapa


El copy que se genero es este:

01 EJ05001I.
02 FILLER PIC X(12).
01 EJ05001O REDEFINES EJ05001I.
02 FILLER PIC X(12).

TIOAPFX=YES in maps, this will include(prefix) filler/s in your symbolic map/s. It will add a 12-byte field at the beginning of each symbolic map.
TIOAPFX specifies whether BMS should include a filler in the symbolic description maps to allow for the unused TIOA prefix.
TIOA - Terminal input/output area
TIOAPFX=YES To reserve the prefix space (12 bytes) for BMS commands to access TIOA properly. BMS removes the responsibility of formatting the screen from the application program. BMS places the data with necessary control characters in the TIOA. The control characters are removed before the message is displayed on the screen. The symbolic map starts with the 01 level definition of FILLER PIC X(12), which is the TIOA prefix created by TIOAPFX=YES of the DFHMSD macro, and this is required by BMS under the CICS command level.

Tenemos que dar de alta como recurso de CICS el mapa

CEDA DEFine Mapset( EJE0050 )
Mapset : EJE0050
Group : DESA
Description ==> MAPA PROG EJER0050 MUESTRA MENSAJE
REsident ==> No No | Yes
USAge ==> Normal Normal | Transient
USElpacopy ==> No No | Yes
Status ==> Enabled Enabled | Disabled
RSl : 00 0-24 | Public

Instalarlo

CEDA DIS MAP(EJE0050) GR(*)
ENTER COMMANDS
NAME TYPE GROUP DATE TIME
EJE0050 MAPSET DESA I INSTALL SUCCESSFUL

Podemos probar como sale el mapa con la siguiente instrucción:

CECI SEND MAP(EJE0050)

saldra esto:

SEND MAP(EJE0050)
STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS SENd Map( 'EJE0050' )
<< FROm() > < LEngth() > < DAtaonly > | MAPOnly >
< MAPSet() >
< FMhparm() >
< Reqid() >
< LDc() | < ACTpartn() > < Outpartn() > >
< MSr() >
< Cursor() >
< Set() < MAPPingdev() > | PAging | Terminal < Wait > < LAst > >
< PRint >
< FREekb >
< ALArm >
< L40 | L64 | L80 | Honeom >
< NLeom >
< ERASE < DEfault | ALTernate > | ERASEAup >
< ACCum >
< FRSet >
+ < NOflush >

Si nos manda este mensaje al usar CECI

RESPONSE: ABEND APCT EIBRESP=+0000000000 EIBRESP2=+0000000000

quiere decir que no hemos definido como recurso de CICS el mapa

Si modificamos el mapa lo refrescamos con CEMT asi:

CEMT I PROG(EJE0051)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(EJE0051 ) Leng(0000000240) Map Ena Pri NEW
Res(000) Use(0000000005) Qua Cic

notese es PROG no MAP

Le damos ENTER y saldra el mapa

********************
* *
* FIN TRANSC T001 *
* *
********************

para borrarlo usese la tecla CLEAR


El programa que desplegara el mapa sera este:

IDENTIFICATION DIVISION.
PROGRAM-ID. EJER0050.
*DESPLIEGA UN MAPA
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
DES.
EXEC CICS SEND MAP('EJE0050')
MAPONLY
ERASE
NOHANDLE
END-EXEC.
FIN.
EXEC CICS
RETURN
END-EXEC.





La instrucción:

EXEC CICS SEND MAP('EJE0050')
MAPONLY
ERASE
NOHANDLE
END-EXEC.

Enviara el mapa EJE0050 a la terminal que la invoca , borrandola antes y no tiene rutinas para manejo de errores.

La instrucción:

EXEC CICS
RETURN
END-EXEC.

Da por terminado el programa COBOL-CICS

Lo compilamos con este JCL:

//COMPILA JOB 'DESA', ACCOUNTING DATA
// 'JPTS', USER NAME
// COND=(0,NE), CONDICION PARA EJECUTARLO
// CLASS=A, CLASE QUE USA (GRUPO)
// MSGCLASS=H, MANTENGA LOS MENSAJES (HOLD)
// MSGLEVEL=(1,1), ENVIA JCL>OUTPUT
// NOTIFY=&SYSUID, NOTIFICAR AL USUARIO
// REGION=5M 5 MEGAS RAM P EJECUCION
//*--------------------------------------
//DFHEITVL PROC
//TRN EXEC PGM=DFHECP1$,
// PARM='COBOL2,SP',
// REGION=2M
//STEPLIB DD DSN=DFH320.CICS.SDFHLOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSPUNCH DD DSN=&&SYSCIN,
// DISP=(,PASS),UNIT=SYSDA,
// DCB=BLKSIZE=400,
// SPACE=(400,(400,100))
//*---------------------------------
//COB EXEC PGM=IGYCRCTL,REGION=2M,
// PARM='NODYNAM,LIB,OBJECT,APOST,MAP,XREF'
//STEPLIB DD DSN=IGY340.SIGYCOMP,DISP=SHR
//SYSLIB DD DSN=USER.AVAN.JP.FTE,DISP=SHR
// DD DSN=USER.AVAN.JP.CPY,DISP=SHR
// DD DSN=DFH320.CICS.SDFHCOB,DISP=SHR
// DD DSN=DFH320.CICS.SDFHMAC,DISP=SHR
// DD DSN=DFH320.CICS.SDFHSAMP,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD DSN=&&SYSCIN,DISP=(OLD,DELETE)
//SYSLIN DD DSN=&&LOADSET,DISP=(MOD,PASS),
// UNIT=SYSDA,SPACE=(80,(250,100))
//SYSUT1 DD UNIT=SYSDA,SPACE=(460,(350,100))
//SYSUT2 DD UNIT=SYSDA,SPACE=(460,(350,100))
//SYSUT3 DD UNIT=SYSDA,SPACE=(460,(350,100))
//SYSUT4 DD UNIT=SYSDA,SPACE=(460,(350,100))
//SYSUT5 DD UNIT=SYSDA,SPACE=(460,(350,100))
//SYSUT6 DD UNIT=SYSDA,SPACE=(460,(350,100))
//SYSUT7 DD UNIT=SYSDA,SPACE=(460,(350,100))
//*-----------------------------------------
//COPYLINK EXEC PGM=IEBGENER,COND=(7,LT,COB)
//SYSUT1 DD DSN=DFH320.CICS.SDFHCOB(DFHEILIC),DISP=SHR
//SYSUT2 DD DSN=&&COPYLINK,DISP=(NEW,PASS),
// DCB=(LRECL=80,BLKSIZE=400,RECFM=FB),
// UNIT=SYSDA,SPACE=(400,(20,20))
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//* ---------------------------------------
//LKED EXEC PGM=IEWL,REGION=2M,
// PARM='LIST,XREF',COND=(5,LT,COB)
//SYSLIB DD DSN=DFH320.CICS.SDFHLOAD,DISP=SHR
// DD DSN=CEE.SCEELKED,DISP=SHR
//SYSLMOD DD DSN=DFH320.CICS.SDFHLOAD,DISP=SHR
//SYSUT1 DD UNIT=SYSDA,DCB=BLKSIZE=1024,
// SPACE=(1024,(200,20))
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=&&COPYLINK,DISP=(OLD,DELETE)
// DD DSN=&&LOADSET,DISP=(OLD,DELETE)
// DD DDNAME=SYSIN
// PEND
//*-------------------------------------
//COMPILA EXEC DFHEITVL
//TRN.SYSIN DD DSN=USER.AVAN.JP.FTE(EJER0050),DISP=SHR
//LKED.SYSIN DD *
NAME EJER0050(R)

tomese nota de que la biblioteca de carga del programa debe ser donde CICS lo buscara para cargarlo con el comando CEMT al darle NEW DFH320.CICS.SDFHLOAD

Tenemos que dar de alta el programa como recurso de CICS con los siguientes datos

CEDA DEFine PROGram( EJER0050 ) GR(DESA)
PROGram : EJER0050
Group : DESA
DEscription ==> DESPLIEGA MAPA SIMPLEMENTE
Language ==> CObol CObol | Assembler | Le370 | C | Pli
RELoad ==> No No | Yes
RESident ==> No No | Yes
USAge ==> Normal Normal | Transient
USElpacopy ==> No No | Yes
Status ==> Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf ==> Yes Yes | No
DAtalocation ==> Below Below | Any
EXECKey ==> User User | Cics
COncurrency ==> Quasirent Quasirent | Threadsafe
Api ==> Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
+ DYnamic ==> No No | Yes

Instalarlo

CEDA DIS PROG(EJER0050) GR(DESA)
ENTER COMMANDS
NAME TYPE GROUP DATE TIME
EJER0050 PROGRAM DESA I INSTALL SUCCESSFUL

Refrescarlo (cargar el objeto en los recursos de CICS) con CEMT asi:

CEMT I PROG(EJER0050)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(EJER0050) Leng(0000004872) Cob Pro Ena Pri NEW Ced NORMAL
Res(000) Use(0000000000) Bel Uex Ful Qua Cic

Tenemos que dar de alta una transaccion para que a traves de ella ejecutemos el programa:

CEDA DEF TRANS(T050) GR(DESA)
OVERTYPE TO MODIFY CICS RELEASE = 0650
CEDA DEFine TRANSaction( T050 )
TRANSaction ==> T050
Group ==> DESA
DEscription ==> TRANSACCION PARA PROBAR MAPAS
PROGram ==> EJER0050
TWasize ==> 00000 0-32767
PROFile ==> DFHCICST
PArtitionset ==>
STAtus ==> Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc ==> Below Below | Any
TASKDATAKey ==> User User | Cics
STOrageclear ==> No No | Yes
RUnaway ==> System System | 0 | 500-2700000
SHutdown ==> Disabled Disabled | Enabled
ISolate ==> Yes Yes | No
Brexit ==>
+ REMOTE ATTRIBUTES
.
.
.
RECOVERY
DTimout ==> 0001 No | 1-6800 (MMSS)
RESTart ==> No No | Yes
SPurge ==> No No | Yes
TPUrge ==> No No | Yes
+ DUmp ==> Yes Yes | No

notese que se le pone un segundo 0001 segundo de Timeout por si entra en un loop

Se instala:

DIS TRANS(T050) GR(DESA)
ENTER COMMANDS
NAME TYPE GROUP DATE TIME
T050 TRANSACTION DESA INSTALL SUCCESSFUL








Se corre invocando la transaccion en una sesion de CICS asi:

T050 (y ENTER)

Respondera limpiando la pantalla y desplegando esto:

********************
* *
* FIN TRANSC T050 *
* *
********************

notese en AZUL

Sandra MO
Usuario
Usuario
Mensajes: 8
Registrado: 08 Jul 2012, 21:03
País: México
Ciudad: d.f
Ocupación: Programador

Re: Compilar progrmas en Hercules

Mensaje por Sandra MO » 04 May 2014, 14:57

Hola

Muchas gracias por su valiosa aportación, voy a habilitar los pasos y en seguida me pongo en contacto.


Agradezco mucho la atención y su tiempo.

Responder