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