Olá pessoal, Agora sim, consegui testar, fiz os devidos ajustes, mas só faz operações com inteiros, porém ficou muito legal! Quanto eu tiver mais uma insônia, eu aperfeiçoo mais. Qualquer dica será bem válido e logo logo vou "arrumar" minha página e colocar essa calculadora lá! :P
[calculadora_ura] ; Atende a chamada exten => s,1,Answer ; 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(digite_numero) ; 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(digite_operador) ; 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 guardo 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]?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(operador_invalido) ; 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