08/11/15

Criando um Programa Cobol pelo TSO - Hercules z/OS

Este post explica como criar e compilar um programa COBOL no TSO.



Introdução

Primeiro de tudo, você deve entender como um programa COBOL é compilado. Nós temos uma fonte, rodamos um job que copila e dai temos um objeto ou executável. Uma vez que o programa objeto, podemos executar ele que mostrara um resultado obtido.

Então, primeiro, temos uma biblioteca onde ele será o nosso arquivo de origem, editar um membro onde a linguagem de programação COBOL. Esta biblioteca é definido como qualquer JCL biblioteca, ou seja, particionado e com bloco fixo de 80.

Em segundo lugar, precisamos de ter uma biblioteca onde, uma vez compilado, deixe o programa executável ou objeto resultado da nossa programação. Esta biblioteca, que contém um objeto, NÃO deve ser definido como bloco fixo de 80, mas como U ou indefinido (undefined). Isto é muito importante por causa da não definição da biblioteca, ele não irá funcionar.

E, finalmente, precisamos de um JCL para chamar as ferramentas de compilação e montagem, que vai ler o nosso membro de origem COBOL e nos deixar o objeto na biblioteca criada com formato de U, usando as variáveis ​​e parâmetros apropriados.

Criando o programa COBOL (fonte)

Se você não tiver, nós criamos uma biblioteca particionado e com um formato de registro fixo de 80 caracteres. No nosso exemplo, a chamada ADCD.LIB.JCL. Nesta biblioteca, criamos um membro do chamado OLAMUNDO contendo o seguinte programa (OLÁ MUNDO é o clássico):
   File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help

 EDIT       ADCD.LIB.JCL(OLAMUNDO) - 01.05                  Columns 00001 00072
 ****** ***************************** Top of Data ******************************
 000001        IDENTIFICATION DIVISION.
 000002        PROGRAM-ID. HOLAMUN.
 000003        AUTHOR. JAVIER CASTILLA PARA EUSKAL ENCONTER Y MAINFRAMECORNER
 000004        INSTALLATION. IBM-ZOS.
 000005         DATE-WRITTEN. 13 FEBRERO DE 2013.
 000006         DATE-COMPILED.
 000007         SECURITY. NONE.
 000008        ENVIRONMENT DIVISION.
 000009         CONFIGURATION SECTION.
 000010          SOURCE-COMPUTER. MIORDENADOR.
 000011          OBJECT-COMPUTER. MIORDENADOR.
 000012          SPECIAL-NAMES.
 000013            DECIMAL-POINT IS COMMA.
 000014        DATA DIVISION.
 000015        WORKING-STORAGE SECTION.
 000016
 000017        PROCEDURE DIVISION.
 000018        001-MAIN.
 000019
 000020        DISPLAY "OLA MUNDO - RODAMOS UM PROGRAMA COBOL"
 000021        GOBACK.
 ****** **************************** Bottom of Data ****************************
 Command ===>                                                  Scroll ===> PAGE
  F1=Help      F2=Split     F3=Exit      F5=Rfind     F6=Rchange   F7=Up
  F8=Down      F9=Swap     F10=Left     F11=Right    F12=Cancel

Criando o objeto de programa

Esta etapa envolve dois pontos: Primeiro, já temos criados a biblioteca de objetos de software com formato de U (não canso de repetir) e em segundo lugar, iniciar o JCL para nos ler o membro cobol fonte, e irá compilar e vai deixar o objeto nos objetos de biblioteca programa.

Criando objetos de biblioteca

É simples: O JCL abaixo vamos pegar o objeto fonte ADCD.LIB.JCL(OLAMUNDO) e vamos gravar o objeto na ADCD.Z110.VTAMLIB(OLAMUNDO);

Compilando um COBOL

Para compilar o programa usamos o seguinte JCL:
   File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help

 EDIT       ADCD.LIB.JCL(OLAMUND1) - 01.01                  Columns 00001 00072
 Command ===> sub                                              Scroll ===> CSR
 ****** ***************************** Top of Data ******************************
 000001 //TSOAD05J JOB 1AD40G12,'IBMUSER',NOTIFY=&SYSUID,
 000002 //  MSGCLASS=Q,CLASS=A,MSGLEVEL=(1,1),REGION=0M,TIME=(0,7)
 000003 //STEP0    EXEC IGYWCLG,PARM.COBOL='LIB,APOST,XREF,MAP,OFFSET'
 000004 //STEPLIB  DD DSN=ADCD.Z110.VTAMLIB,DISP=SHR
 000005 //* --------------------------------------------------------------
 000006 //* COMPILAR Y LINKEDITAR HOLAMUN (HOLAMUNDO EUSKAL ENC Y MFCORNER)
 000007 //* SYSLIB  ES LA LIB. DE COPYS
 000008 //* SYSIN   ES LA LIB. DE PROGRAMAS FUENTES
 000009 //* SYSLMOD ES LA LIB. DE PROGRAMAS OBJETOS O EJECUTABLES
 000010 //* --------------------------------------------------------------
 000011 //COBOL.SYSIN   DD DSN=ADCD.LIB.JCL(OLAMUNDO),DISP=SHR
 000012 //LKED.SYSLMOD  DD DSN=ADCD.Z110.VTAMLIB(OLAMUNDO),DISP=SHR
 000013 /*
Os parâmetros em negrito são as que precisam editar ele não deve trabalhar no nosso exemplo:

- COBOL.SYSIN DD é o registro onde irá apontar para o nosso COBOL fonte.

- STEPLIB DD é o registro que irá apontar para a biblioteca de objetos.

- LKED.SYSLMOD guia DD é onde definimos o objeto membro que é criado resultado da compilação.

Uma vez liberado JCL deve terminar Cond.Code 0. Se apenas um outro, tem que olhar para fora para certo se o trabalho tem sido um erro na transcrição do programa e corrigir o programa de origem. Se consultarmos Livreiro ADCD.Z110.VTAMLIB, deve ser um membro criado chamado OLAMUNDO.
   File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help

 EDIT       ADCD.LIB.JCL(OLAMUND1) - 01.01                  Columns 00001 00072
 Command ===> sub                                              Scroll ===> CSR
 ****** ***************************** Top of Data ******************************
 000001 //TSOAD05J JOB 1AD40G12,'IBMUSER',NOTIFY=&SYSUID,
 000002 //  MSGCLASS=Q,CLASS=A,MSGLEVEL=(1,1),REGION=0M,TIME=(0,7)
 000003 //STEP0    EXEC IGYWCLG,PARM.COBOL='LIB,APOST,XREF,MAP,OFFSET'
 000004 //STEPLIB  DD DSN=ADCD.Z110.VTAMLIB,DISP=SHR
 000005 //* --------------------------------------------------------------
 000006 //* COMPILAR Y LINKEDITAR HOLAMUN (HOLAMUNDO EUSKAL ENC Y MFCORNER)
 000007 //* SYSLIB  ES LA LIB. DE COPYS
 000008 //* SYSIN   ES LA LIB. DE PROGRAMAS FUENTES
 000009 //* SYSLMOD ES LA LIB. DE PROGRAMAS OBJETOS O EJECUTABLES
 000010 //* --------------------------------------------------------------
 000011 //COBOL.SYSIN   DD DSN=ADCD.LIB.JCL(OLAMUNDO),DISP=SHR
 000012 //LKED.SYSLMOD  DD DSN=ADCD.Z110.VTAMLIB(OLAMUNDO),DISP=SHR
 000013 /*
 000014
 000015
 IKJ56250I JOB TSOAD05J(JOB00293) SUBMITTED
 ***
Rodou
 05.47.12 JOB00293 $HASP165 TSOAD05J ENDED AT N1  MAXCC=0 CN(INTERNAL)
 *** 

A execução do programa COBOL

Para executar o programa, basta fazer uma CHAMADA TSO é o membro ao abrigo do programa. No nosso exemplo, o comando seria:
TSO CALL 'ADCD.Z110.VTAMLIB(OLAMUNDO)'
Dando o comando no TSO;
   Menu  Functions  Confirm  Utilities  Help

 BROWSE            ADCD.LIB.JCL                              Row 00278 of 00481
            Name     Prompt       Size   Created          Changed          ID
 _________ OLAMUND1 *RC=0           23  2008/11/06  2015/11/04 05:32:58  IBMUSER
 _________ OLCUTL                   23  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDOPMEMO                100  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDOPPGM                  83  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDORIMLD                 17  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDSE                     21  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PORTRACF                 16  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PORTTOOL                305  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PROCTEST                  7  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PROFILE                 388  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMHP                  35  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMID                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIE                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIG                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIP                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIT                  35  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMJV                 123  2008/11/06  2008/11/06 15:55:48  IBMUSER
 Command ===> tso call 'ADCD.Z110.VTAMLIB(OLAMUNDO)'           Scroll ===> PAGE
  F1=Help    F2=Split   F3=Exit    F5=Rfind   F7=Up      F8=Down    F9=Swap
 F10=Left   F11=Right  F12=Cancel
Resultado
   Menu  Functions  Confirm  Utilities  Help

 BROWSE            ADCD.LIB.JCL                              Row 00278 of 00481
            Name     Prompt       Size   Created          Changed          ID
 _________ OLAMUND1 *RC=0           23  2008/11/06  2015/11/04 05:32:58  IBMUSER
 _________ OLCUTL                   23  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDOPMEMO                100  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDOPPGM                  83  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDORIMLD                 17  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PDSE                     21  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PORTRACF                 16  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PORTTOOL                305  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PROCTEST                  7  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ PROFILE                 388  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMHP                  35  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMID                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIE                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIG                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIP                  65  2008/11/06  2008/11/06 15:55:48  IBMUSER
 _________ Q80SMIT                  35  2008/11/06  2008/11/06 15:55:48  IBMUSE
 OLA MUNDO - RODAMOS UM PROGRAMA COBOL
 ***

Vamos rodar um jcl para ver o resultado;
   File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help

 EDIT       ADCD.LIB.JCL(COBOL003) - 01.06                  Columns 00001 00072
 Command ===>                                                  Scroll ===> CSR
 ****** ***************************** Top of Data ******************************
 000001 //TSOAD05J JOB 1AD40G12,'IBMUSER',NOTIFY=&SYSUID,
 000002 //  MSGCLASS=Q,CLASS=A,MSGLEVEL=(1,1),REGION=0M,TIME=(0,7)
 000003 //* -------------------------------------------
 000004 //* RODANDO UM COBOL POR JCL
 000005 //* -------------------------------------------
 000006 //STEP10    EXEC PGM=OLAMUNDO
 000007 //STEPLIB   DD DSN=ADCD.Z110.VTAMLIB,DISP=SHR
 000008 //SYSPRINT DD SYSOUT=*
 000009 /*
 000010
 000011
 000012
 000013
 000014
 000015
 000016
 000017
 000018
 000019
Resultado
   Display  Filter  View  Print  Options  Help
 -------------------------------------------------------------------------------
 SDSF OUTPUT DISPLAY TSOAD05J JOB00185  DSID     2 LINE 0       COLUMNS 02- 81
 COMMAND INPUT ===>                                            SCROLL ===> PAGE
********************************* TOP OF DATA **********************************
                         J E S 2  J O B  L O G  --  S Y S T E M  S Y S 1  --  N

09.20.37 JOB00185 ---- WEDNESDAY, 04 NOV 2015 ----
09.20.37 JOB00185  IRR010I  USERID IBMUSER  IS ASSIGNED TO THIS JOB.
09.20.37 JOB00185  ICH70001I IBMUSER  LAST ACCESS AT 09:12:17 ON WEDNESDAY, NOVE
09.20.37 JOB00185  $HASP373 TSOAD05J STARTED - INIT 1    - CLASS A - SYS SYS1
09.20.37 JOB00185  IEF403I TSOAD05J - STARTED - TIME=09.20.37
09.20.38 JOB00185  IEF404I TSOAD05J - ENDED - TIME=09.20.38
09.20.38 JOB00185  $HASP395 TSOAD05J ENDED
------ JES2 JOB STATISTICS ------
  04 NOV 2015 JOB EXECUTION DATE
           22 CARDS READ
           45 SYSOUT PRINT RECORDS
            0 SYSOUT PUNCH RECORDS
            2 SYSOUT SPOOL KBYTES
         0.00 MINUTES EXECUTION TIME
        1 //TSOAD05J JOB 1AD40G12,'IBMUSER',NOTIFY=&SYSUID,
          //  MSGCLASS=Q,CLASS=A,MSGLEVEL=(1,1),REGION=0M,TIME=(0,7)
          //* -------------------------------------------
          //* RODANDO UM COBOL POR JCL
          //* -------------------------------------------
          IEFC653I SUBSTITUTION JCL - 1AD40G12,'IBMUSER',NOTIFY=IBMUSER,MSGCLASS
          TIME=(0,7)
        2 //STEP10    EXEC PGM=OLAMUNDO
        3 //STEPLIB   DD DSN=ADCD.Z110.VTAMLIB,DISP=SHR
        4 //SYSPRINT DD SYSOUT=*
          /*
        5 //SYSIN     DD *               GENERATED STATEMENT
ICH70001I IBMUSER  LAST ACCESS AT 09:12:17 ON WEDNESDAY, NOVEMBER 4, 2015
IEF236I ALLOC. FOR TSOAD05J STEP10
IEF237I 0A81 ALLOCATED TO STEPLIB
IEF237I JES2 ALLOCATED TO SYSPRINT
IEF237I JES2 ALLOCATED TO SYSIN
IEF237I JES2 ALLOCATED TO SYSOUT
IEF285I   IBMUSER.TSOAD05J.JOB00185.D0000103.?         SYSOUT
IEF142I TSOAD05J STEP10 - STEP WAS EXECUTED - COND CODE 0000
IEF285I   ADCD.Z110.VTAMLIB                            KEPT
IEF285I   VOL SER NOS= ZARES1.
IEF285I   IBMUSER.TSOAD05J.JOB00185.D0000102.?         SYSOUT
IEF285I   IBMUSER.TSOAD05J.JOB00185.D0000101.?         SYSIN
IEF373I STEP/STEP10  /START 2015308.0920
IEF374I STEP/STEP10  /STOP  2015308.0920 CPU    0MIN 00.17SEC SRB    0MIN 00.04S
IEF375I  JOB/TSOAD05J/START 2015308.0920
IEF376I  JOB/TSOAD05J/STOP  2015308.0920 CPU    0MIN 00.17SEC SRB    0MIN 00.04S
OLA MUNDO - RODAMOS UM PROGRAMA COBOL
******************************** BOTTOM OF DATA ********************************
  F1=HELP      F2=SPLIT     F3=END       F4=RETURN    F5=IFIND     F6=BOOK
  F7=UP        F8=DOWN      F9=SWAP     F10=LEFT     F11=RIGHT    F12=RETRIEVE
Clique Aqui

12 comentários:

  1. Como cria a biblioteca com padrao U?

    ResponderEliminar
    Respostas
    1. Zatanael boa tarde, vou deixar abaixo um exemplo:

      //AAFSNATB JOB (AAF,TSS),'CLAUDEMAR',CLASS=S,MSGCLASS=A
      //*UQ ALLOW
      //ALLOC3 EXEC PGM=IEFBR14
      //TRIM3 DD DSN=?NOME.DO.ARQUIVO,
      // SPACE=(32760,(160,10,10)),
      // UNIT=SYSDA,VOL=SER=?DISCO,
      // DISP=(,CATLG,DELETE),
      // DCB=(RECFM=U,BLKSIZE=32760,DSORG=PO)

      O (U) seria o RECFM - O nome do arquivo e o disco tem que ser alterados;

      Eliminar
    2. RECFM - Especificação do formato dos dados - F/FB/V/VB/U
      LRECL - Especificação do tamanho dos dados
      BLKSIZE - Especificação do tamanho dos blocos

      Para mais exemplos e dicas dá uma olhada - http://regismain.wikidot.com/jcl
      Esta em portugues;

      Eliminar
  2. Não consigo compilar, e a primeira vez, que uso hercules, e o z/so , nao apresenta nem o erro , nao executa o job.

    ResponderEliminar
  3. Jcl com erro rsr copiei errado agora foi rsr vlw

    ResponderEliminar
    Respostas
    1. Acho que pode ter sido o espaçamento, jcl tem uns detalhes, tem que estar tudo certinho senão dá erro.

      Eliminar
  4. Bom dia. Qual a média de valores para a instalação no meu notebook do sistema ZOS?

    ResponderEliminar
    Respostas
    1. Não sei te falar o minimo que precisa o notebook ter para poder rodar o Hercules mais tenha uma coisa em mente que o Hercules é como outros software que emulam outros sistema operacionais "Virtualbox, VMware, Parallels, QEMU", eles ficam extremamente lentos rodando em computadores sem memoria, HD, o Hercules como esses programas consome também muito recursos do notebook.

      Eliminar
  5. Pessoal onde baixar o Hércules completo?

    ResponderEliminar
    Respostas
    1. Tem nos sites gringos de torrent, procura como ADCD z/os - Não vou colocar o link aqui pois uma vez um cara veio me questionar o porque estava colocando links de sites de torrent gringo de um software pago - dai parei

      Eliminar
  6. Olá, sou iniciante no COBOL, eu instalei o Hércules (TK4), mas não sei onde e como digitar um programa, fico parado na tela "TSO Applications" por gentileza poderia me informar os passos seguintes ?

    ResponderEliminar