2.7 - Procedures de compilação

Uma procedure CLG padrão (compila/linka/Go - executa) possui esses 3 step's.

Durante o processo de compilação de um programa, o qual ocorre no step C, a procedure que executa o programa que compila nosso codigo fonte(entrada) gerando um código-objeto(saida) que será linkeditado no proximo step (L) dessa mesma procedure.

Durante a compilação são realizadas 3 tipos de analises distintas lexica semantica e sintatica.

Tais analises verificam se o codigo fonte a ser compilado esta ok ou se apresenta inconsistencias ou erros que impedem sua compilação. Se estiver tudo ok o processamento segue para a proxima etapa (step L) que é a linkedição do codigo-objeto gerado no step C. Em L o codigo-objeto recebe um tratamento no qual são inseridas instruções necessarias para que o seu programa rode naquele mainframe e possa gerar um carga executavel.

O carga gerado no step L é executado no step G gerando o resultado final esperado a mensagem Hello World "impressa" em algum dispositivo de saida.

Agora voltando ao fato que queremos executar o nosso hello world e não temos o carga pronto.

Suponha que o processo de compilação, linkedição e execucao sejam de nosso programa em ASSEMBLER

É necessário criar um job para que a procedure CLG seja executada, segue um exemplo:

//ASM00001 JOB 'COMPILA E LOAD DE PROGRAMA HLASM',
// CLASS=A,NOTIFY=&SYSUID
//STEP1 EXEC ASMACLG
//SYSIN DD *
          HELLO CSECT
          USING ,15
          WTO 'HELLO WORLD' BR 14
          END
//

Para o job acima além de dados já conhecidos, temos: /

/ CLASS=A,NOTIFY=&SYSUID CLASS= -> A Classe é definida na instalação do JES e possui diferentes caracteristicas para cada valor desde não executar o job após a submissão (sendo necessária liberação pelo operador) até mesmo apenas verificar se o job não contem erros - existe um parametro que também faz isso é o TYPRUN=SCAN. A -> Classe "A" da instalação que executei esse job

Caso o parametro CLASS=A for omitido o sistema envia para a classe "default". Esta aqui só para ilustrar o copia e cola.

//STEP1 EXEC ASMACLG poderiamos informar PROC= seguido do nome da procedure ou como o exemplo acima.

//SYSIN DD * Indica que os dados a seguir - em ingles 'in-stream' - serão utilizados como "parametros" para o step em execucao, no nosso caso esse parametro é nosso codigo fonte. Sempre que possivel programe sua aplicação para emitir em sysout os dados recebidos via sysin ou via parametro, existem profissionais que trabalham com mainframe a décadas e desconhecem o comando input on, então deixa a dica aqui.

Pode utilizar DD DATA ao inves de DD * .

Para submissão do job informe na linha de comando SUB

Como codificamos o parametro notify, após a conclusao do job somos informados com algo do tipo:

05.48.49 JOB00193 $HASP165 ASM00001 ENDED AT N1 MAXCC=0 CN(INTERNAL)

Last updated