Em 01/12/06, Fred Banionis<[EMAIL PROTECTED]> escreveu: > Bacana Junior! > Assim que eu tiver um pouco de tempo vou dar uma estudada nela e por pra > testar. > Eu gosto dessas coisas, pq lendo os códigos podemos estar aprimorando o > conhecimento. Exemplos nunca são de mais. ;-)
Olá pessoal, Mais algumas alteraçõezinhas e arquivos de som amador, feitos por mim num microfone de menos de meia dúzia de notas de R$ 1,00 e placa de som onboard, disponíveis em: http://cpolegatojr.no-ip.org Em minha mensagem de boas vindas, queria saber se posso deixar como está anunciando a Calculadora como fruto da AsteriskBrasil, posso? Acho que já poderíamos até colocar uma licença para garantir direitos autorais e distribuição, tipo GPL, o que acham? ; Projeto: Calculadora URA para Asterisk ; Autor: Claudio Polegato Junior ; Data: 03 de Dezembro de 2006 ; Licença: em andamento, mas será com certeza GPL v2 ; Copyright (c) Claudio Polegato Junior - 2006 [calculadora_ura] ; Atende a chamada e dá as boas vindas exten => s,1,Answer exten => s,n,Wait(2) exten => s,n,PlayBack(bvccab) ; Configurações de tempos e iniciais ; Depois de um dígito identificado, espera até 2 segundos para o próximo exten => s,n,Set(TIMEOUT(digit)=2) ; Se nada for digitado em 5 segundos, dá "timeout" e continua o fluxo exten => s,n,Set(TIMEOUT(response)=5) ; Qual número estamos perguntando exten => s,n,SetVar(Numero=1) ; Obter número ; Define Num_Op para Número (1), usado no "timeout" exten => s,n(numero),SetVar(Num_Op=1) ; Zera os acumuldor de dígitos, Digitado exten => s,n,SetVar(Digitado=) ; Mensagem para o usuário digitar um número exten => s,n,BackGround(d1n) ; Espera pelo número de acordo com os tempos acima configurados exten => s,n,WaitExten ; Caso não digite nada em 5 segundos configurados, pergunta novamente exten => s,n,Goto(numero) ; Obter operação ; Define Num_Op para Operador (2), usado no "timeout" exten => s,n(operador),SetVar(Num_Op=2) ; Mensagem para o usuário digitar um operador: 1->+, 2->-, 3->*, 4->/... exten => s,n,BackGround(e1o) exten => s,n,BackGround(1pa) exten => s,n,BackGround(2ps) exten => s,n,BackGround(3pm) exten => s,n,BackGround(4pd) ; Espera pelo operador de acordo com os tempos acima configurados exten => s,n,WaitExten ; Caso não digite nada em 5 segundos configurados, pergunta novamente exten => s,n,Goto(operador) ; Depois de digitado, desvia o fluxo se for esperado operador exten => _X,1,GotoIf($[${Num_Op} = 2]?operador) ; Pegar mais dígitos no caso de número, com espera máxima de 2 seg ; Guardando os dígitos exten => _X,n,SetVar(Digitado=${Digitado}${EXTEN}) ; Reconfigura para esperar dígito por 2 segundos exten => _X,n,Set(TIMEOUT(response)=2) ; Aguarda mais um dígito, que ao digitar vai para "exten => _X,1,..." exten => _X,n,WaitExten ; Reconfigura para a espera inicial de 5 segundos exten => _X,n,Set(TIMEOUT(response)=5) ; Se for o segundo número, desvia o fluxo para a rotina de cálculo exten => _X,n,GotoIf($[${Numero} = 2]?segundo) ; Tratando o primeiro número ; Guarda o primeiro número em Num1 exten => _X,n,SetVar(Num1=${Digitado}) ; Define que será perguntado pelo segundo número exten => _X,n,SetVar(Numero=2) ; Desvia o fluxo para perguntar pelo operador exten => _X,n,Goto(s|operador) ; Rotina de cálculo com o segundo número passado ; Guarda o segundo número em Num2 exten => _X,n(segundo),SetVar(Num2=${Digitado}) ; Calcula e guarda o resultado em Resultado exten => _X,n,SetVar(Resultado=$[${Num1} ${Op} ${Num2}]) ; Fala o primeiro número exten => _X,n,SayNumber(${Num1}) ; Fala o operador exten => _X,n,SayAlpha(${Op}) ; Fala o segundo número exten => _X,n,SayNumber(${Num2}) ; Fala "igual" exten => _X,n,SayAlpha(=) ; Fala o Resultado exten => _X,n,SayNumber(${Resultado}) ; O primeiro número agora é o resultado exten => _X,n,SetVar(Num1=${Resultado}) ; Desvia o fluxo para perguntar pelo operador exten => _X,n,Goto(s|operador) ; Tratando o Operador ; Verifica se o operador é inválido, desviando o fluxo caso for exten => _X,n(operador),GotoIf($[${EXTEN} > 4 | ${EXTEN} = 0]?op_invalido) ; Se digitado 1, guarda o operador de adição em Op exten => _X,n,ExecIf($[${EXTEN} = 1],SetVar,Op=+) ; Se digitado 2, guarda o operador de subtração em Op exten => _X,n,ExecIf($[${EXTEN} = 2],SetVar,Op=-) ; Se digitado 1, guarda o operador de multiplicação em Op exten => _X,n,ExecIf($[${EXTEN} = 3],SetVar,Op=*) ; Se digitado 1, guarda o operador de divisão em Op exten => _X,n,ExecIf($[${EXTEN} = 4],SetVar,Op=/) ; Desvia o fluxo para perguntar pelo próximo número exten => _X,n,Goto(s|numero) ; Trato o caso em que o operador é inválido ; Retorna uma mensagem dizendo que o operador é inválido exten => _X,n(op_invalido),PlayBack(oi) ; Desvia o fluxo para perguntar novamente o operador exten => _X,n,Goto(s|operador) -- Atenciosamente Junior Polegato - Claudio Polegato Junior Engenheiro Autônomo - Ribeirão Preto e Região Mestre em Física Aplicada à Medicina e Biologia - USP Engenheiro Computacional e Eletrônico - USP Página Pessoal: http://cpolegatojr.no-ip.org Um peregrino de problemas; Um pergaminho de soluções! ---------------------------------------- Estação VoIP 2006 5 e 6 Dezembro Curitiba PR http://www.estacaovoip.com.br _______________________________________________ LIsta de discussões AsteriskBrasil.org AsteriskBrasil@listas.asteriskbrasil.org http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil _______________________________________________ Acesse o wiki AsteriskBrasil.org: http://www.asteriskbrasil.org