You are on page 1of 3

ARMANAS9 START

USING ARMANAS9,R2 DEFINIR REG BASE


LR R2,R15 CARREGAR REG BASE
ST R14,SAVER14 SALVAR R14
**************** ABRIR ARQUIVOS ***********
OPEN (ENTRADA,INPUT) ABRIR ENTRADA
OPEN (SAIDA,OUTPUT) ABRIR SAIDA
* CAPTURAR CPF
GET ENTRADA,DADOS LER CPF
FIMARQ EQU *
MVC CPFPARM,CPFIN CARREGA CPF NA AREA COMUM DAS CSECT
* CHAMADA DA SUBROTINA
L R9,=V(CALCDIG) R9 = ENDERECO DO MODULO CALCDIG
LA R7,WPARM R7 = ENDERECO DA AREA COMUM
BALR R8,R9 EXECUTA CALCDIG
* EXIBIR MENSAGENS
MVC MSGOUT,=CL132' ' LIMPAR MENSAGEM
MVC MSGOUT(11),=C'CPF LIDO = '
MVC MSGOUT+11(11),CPFIN CPF NA MENSAGEM
PUT SAIDA,MSG EXIBE MENSAGEM
MVC MSGOUT,=CL132' ' LIMPAR MENSAGEM
MVC MSGOUT(19),=C'DIGITO CALCULADO = '
MVC MSGOUT+19(02),DIGIPARM DIGITO NA MENSAGEM
PUT SAIDA,MSG EXIBE MENSAGEM
* FECHAR ARQUIVOS
CLOSE ENTRADA FECHAR ENTRADA
CLOSE SAIDA FECHAR SAIDA
**************** VOLTA PARA CHAMADOR ****************
L R14,SAVER14
BR R14 VOLTA PARA O CHAMADOR
********* REGISTRADORES **********
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
********* VARIAVEIS **************
SAVER14 DS F
WPARM DS 0CL13
CPFPARM DS CL11
DIGIPARM DS CL2
*
DADOS DS 0CL80
CPFIN DS CL11
DS CL69
*
MSG DS 0CL133
DC CL1' '
MSGOUT DS CL132
*
SAIDA DCB DDNAME=SAIDA, NOME DO ARQUIVO *
DSORG=PS, *
MACRF=PM, *
LRECL=133, *
RECFM=FBA, *
BLKSIZE=6650
*
ENTRADA DCB DDNAME=ENTRADA, NOME DO ARQUIVO *
DSORG=PS, *
MACRF=GM, *
LRECL=80, *
RECFM=FB, *
BLKSIZE=4000, *
EODAD=FIMARQ
LTORG
END ARMANAS9
*****************************************************************
**************** ROTINA DE CALCULO DO DIGITO DO CPF ***********
*****************************************************************
CALCDIG CSECT
USING CALCDIG,R9 R9 = REGISTRADOR BASE
USING PARAM,R7 R7 = ENDERECO PARAM (AREA COMUM)
*
LA R3,CPFPARM R3 = ENDERECO DO CPF
LA R4,ALGARC R4 = ENDERECO DO ALGARISMO P CALCULO
ZAP FATORP,=P'10' FATORP = 10 PARA INICIAR CALCULO
LA R5,9 R5 = QUANTIDADE DE MULTIPLICACOES
ZAP SOMAP,=P'0' ZERAR SOMAP
BAL R10,CALCULO EXECUTA CALCULO
MVC DIGIPARM(1),DIGITO COLOCA PRIMEIRO DIGITO NO DIGIPARM
*
LA R3,CPFPARM R3 = ENDERECO DO CPF
LA R4,ALGARC R4 = ENDERECO DO ALGARISMO P CALCULO
ZAP FATORP,=P'11' FATORP = 10 PARA INICIAR CALCULO
LA R5,10 R5 = QUANTIDADE DE MULTIPLICACOES
ZAP SOMAP,=P'0' ZERAR SOMAP
BAL R10,CALCULO EXECUTA CALCULO
MVC DIGIPARM+1(1),DIGITO COLOCA SEGUNDO DIGITO NO DIGIPARM
BR R8 VOLTA PARA MODULO PRINCIPAL
CALCULO EQU *
MVC 0(1,R4),0(R3) COLOCAR 1 ALGARISMO DO CPF EM ARGARC
PACK ALGARP,ALGARC COMPACTAR ALGARISMO
ZAP WTRAB,ALGARP ALGARP = PRIM OPERANDO DA MULTIPLIC
MP WTRAB,FATORP WTRAB = ALGARISMO * FATOR
AP SOMAP,WTRAB SOMAR PRODUTO(WTRAB) EM SOMA
* PREPARAR A PROXIMA MULTIPLICACAO
AH R3,=H'1' AVANCA R3 P PROXIMO ALGARISMO
SP FATORP,=P'1' DIMINUI 1 EM FATORP
BCT R5,CALCULO LOOP P CALCULO DO PROX ALGARISMO
* SEGUNDA PARTE DO CALCULO DO CPF
ZAP WTRAB,SOMAP SOMAP = DIVIDENDO (WTRAB)
DP WTRAB,=P'11' DIVIDE SOMA (WTRAB) POR 11
ZAP RESTOP,WTRAB+2(2) RESTO EM RESTOP
CP RESTOP,=P'2' COMPARA RESTO COM 2
BL P1 SE MENOR QUE 2 -> P1
* RESTO >= 2
ZAP WTRAB,=P'11' 11 = SUBTRAENDO
SP WTRAB,RESTOP WTRAB = 11 - RESTO
UNPK DIGITO,WTRAB DESCOMPACTA DIGITO
OI DIGITO,X'F0' ACERTA SINAL DO DIGITO
B P2 IR PARA FIM DO CALCULO
P1 EQU * RESTO < 2
MVC DIGITO,=C'0' DIGITO = 0
P2 EQU *
BR R10 SAI DA ROTINA
********* REGISTRADORES **********
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
********* VARIAVEIS **************
ALGARC DS CL1
ALGARP DS PL1
WTRAB DS PL4
FATORP DS PL2
SOMAP DC PL2'0'
RESTOP DS PL2
DIGITO DS CL1
LTORG
***********************************************
************ DUMMY SECTION DA AREA COMUM ******
***********************************************
PARAM DSECT
CPFPARM DS CL11
DIGIPARM DS CL2
END

You might also like