/* ES_WARNING 1 / ES_ERROR 2 / ES_CATASTROPHIC 3
EG_ARG 1 / EG_BOUND 2 / EG_STROVERFLOW 3
EG_NUMOVERFLOW 4 / EG_ZERODIV 5 /
EG_MEM 11 / EG_NOFUNC 12 / EG_NOMETHOD 13
EG_NOVAR 14 / EG_NOALIAS 15 / EG_NOVARMETHOD 16
EG_BADALIAS 17 / EG_DUPALIAS 18 / EG_CREATE 20
EG_OPEN 21 / EG_CLOSE 22 / EG_READ 23
EG_WRITE 24 / EG_PRINT 25 / EG_UNSUPPORTED 30
EG_LIMIT 31 / EG_CORRUPTION 32 / EG_DATATYPE 33
EG_DATAWIDTH 34 / EG_NOTABLE 35 / EG_NOORDER 36
EG_SHARED 37 / EG_UNLOCKED 38 / EG_READONLY 39
EG_APPENDLOCK 40 / EG_LOCK 41 ///////////////////////*/
#define NTRIM(n) ( LTrim(Str(n)) )
Procedure ErrorSys()
desktop("")
ErrorBlock( {|e| DefError(e)} )
return .t.
function DefError(e)
local i, cMessage, aOptions, nChoice
Funcao := Procname(4)
Funcaolinha := Procline(4)
if e:genCode # 5
if ( e:genCode == 21 .and. e:osCode == 32 .and. e:canDefault )
NetErr(.t.)
return (.f.)
elseif ( e:genCode == 40 .and. e:canDefault )
NetErr(.t.)
return (.f.)
endif
cMessage := ErrorMessage(e)
cMessage += " (Local:"+Funcao+" Linha:"+str(FuncaoLinha,5)+")"
aOptions := {"Sair"}
if (e:canRetry) ; AAdd(aOptions, "Retentar") ; endif
if (e:canDefault); AAdd(aOptions, "Prosseguir"); endif
nChoice := 0
do while nChoice == 0
if Empty(e:osCode)
nChoice := Alert(cMessage, aOptions)
else
nChoice := Alert( cMessage + ;
";(ERRO SISTEMA " + NTRIM(e:osCode) + ")", ;
aOptions)
endif
if ( nChoice == NIL ); exit; endif
enddo
if (!Empty(nChoice))
if ( aOptions[nChoice] == "Sair" )
Sairerro(cMessage)
elseif ( aOptions[nChoice] == "Retentar" )
return (.t.)
elseif ( aOptions[nChoice] == "Prosseguir" )
return (.f.)
endif
endif
if ( !Empty(e:osCode) )
cMessage += " (DOS Error " + NTRIM(e:osCode) + ") "
endif
? cMessage
i := 2
do while (!Empty(ProcName(i)))
? "Called from", Trim(ProcName(i)) + ;
"(" + NTRIM(ProcLine(i)) + ") "
i++
enddo
ErrorLevel(1)
else &&& Erro de divisao por zero
*Return (.f.,0)
Return (.f.)
endif
Sairerro(cMessage)
return (.f.)
*******************************************************************************
* ErrorMessage()
*******************************************************************************
static func ErrorMessage(e)
local cMessage
cMessage := ""
if ( ValType(e:description) == "C" )
portugues := (" " + e:description)
if alltrim(portugues) == "Variable does not exist"
cMessage += " Variavel n„o Existe"
elseif alltrim(portugues) == "Corruption detected"
cMessage += " Corrup‡„o Detectada! Reorganize!"
elseif alltrim(portugues) == "Argument error"
cMessage += " Erro em Argumento!"
elseif alltrim(portugues) == "Print error"
cMessage += " Erro na Impressora Verifique!"
elseif alltrim(portugues) == "Create error"
cMessage += " Erro de Cria‡„o de Arquivo!"
elseif alltrim(portugues) == "Alias does not exist"
cMessage += " Alias(Apelido) n„o existe!"
elseif alltrim(portugues) == "Bound error"
cMessage += " Erro de Bound!"
elseif alltrim(portugues) == "String overflow"
cMessage += " Estouro de stringue!"
elseif alltrim(portugues) == "Numeric overflow"
cMessage += " Estouro de numero!"
elseif alltrim(portugues) == "Zero divisor"
cMessage += " Erro de divis„o por zero!"
elseif alltrim(portugues) == "Numeric error"
cMessage += " Erro de numero!"
elseif alltrim(portugues) == "Syntax error"
cMessage += " Erro na sintax!"
elseif alltrim(portugues) == "Memory low"
cMessage += " Memoria baixando verifique outros programas abertos!"
elseif alltrim(portugues) == "Undefined function"
cMessage += " Esta fun‡„o n„o existe!"
elseif alltrim(portugues) == "No exported method"
cMessage += " N„o exportado o metodo brause!"
elseif alltrim(portugues) == "No exported variable"
cMessage += " N„o exportado a variavel!"
elseif alltrim(portugues) == "Illegal characters in alias"
cMessage += " N„o pode se usar este Apelido!"
elseif alltrim(portugues) == "Alias already in use"
cMessage += " Alias (Apelido) sendo usado por outro!"
elseif alltrim(portugues) == "Create error"
cMessage += " Erro de Cria‡„o de Arquivo Verifique a Maquina!"
elseif alltrim(portugues) == "Open error"
cMessage += " Erro de Abertura de Arquivo Verifique a Maquina!"
elseif alltrim(portugues) == "Close error"
cMessage += " Erro de Fechamento de Arquivo Verifique a Maquina!"
elseif alltrim(portugues) == "Read error"
cMessage += " Erro de Leitura de Arquivo Verifique a Maquina!"
elseif alltrim(portugues) == "Write error"
cMessage += " Erro de Grava‡„o de Arquivo Verifique a Maquina!"
else
cMessage += (" " + e:description)
endif
endif
if ( !Empty(e:filename) )
cMessage += (" (" + e:filename+" ")
elseif ( !Empty(e:operation) )
cMessage += (" ->" + e:operation+"<- (")
endif
cMessage += if( e:severity > 1, "Erro ", "Fatal " )
if ( ValType(e:subsystem) == "C" )
cMessage += e:subsystem()
else
cMessage += "???"
endif
if ( ValType(e:subCode) == "N" )
cMessage += ("/" + NTRIM(e:subCode))
else
cMessage += "/???"
endif
cMessage += ")"
return (cMessage)
*------------------------------------------------------------------------------
Function Sairerro(cMessage)
Local contador := 1
Private cNomArq
cNomarq := "E"+strzero(Contador,7)
do while file(cNomArq+".ERR")
@ 10,20 say "Armazenando Erro em arquivo -->"+cNomarq
Contador++
cNomarq := "E"+strzero(Contador,7)
if Contador > 9999999
ferase(cNomArq+".ERR")
cNomarq := "E"+strzero(Contador,7)
exit
endif
enddo
cNomarq += ".ERR"
dbcloseall()
set printer on
set console off
set Device to screen
set PRINTER to &cNomArq.
? " ",date(),Time(),Getenv("USER")
? cMessage
set Printer to
set Printer off
set Device to screen
set Console on
set Cursor on
MsgBox3d1({"Erro em Maquina !! (Auto Prote‡„o!!)","Desligue a(s) Maquina(s), VERIFIQUE TODOS OS CABOS","e Religue-a(s)","Persistindo o Erro Chame assistencia!"},"Aviso do Sistema !!",,"&Saida",,,"GR+/r+","R+/w","R+/w")
Qexit(,,,.F.)
Return .t.
*-----------------------------------------------------------------------------
function VerErro(e)
local i, cMessage := "", aOptions, nChoice, tTelErro := savenv(00,00,24,80)
local nTecla := 0
Static ContEntradas := 1
i := 1
Funcao := {{},{}}
do while (!Empty(ProcName(i)))
aadd(Funcao[1],Procname(i)+space(25-len(alltrim(Procname(i)))))
aadd(Funcao[2],str(Procline(i),5))
i++
enddo
if e:genCode # 5 .and. e:genCode # 6 .and. e:genCode # 41 .and.;
e:genCode # 20 .and. e:genCode # 21 .and. e:genCode # 25
if e:genCode == 11 .or.;
e:genCode == 22 .or. e:genCode == 23 .or. e:genCode == 24 .or.;
e:genCode == 37 .or. e:genCode == 38 .or. e:genCode == 40 .or.;
e:genCode == 45
if e:canRetry == .t. .and. ContEntradas < 3
ContEntradas++
return (.t.)
elseif e:canDefault == .t. .and. ContEntradas < 5
ContEntradas++
NetErr(.t.)
return (.f.)
else
ContEntradas := 1
endif
endif
cMessage := ErroMensage(e)
aBtn := NewButton()
if e:canRetry == .t. ; AddButton(aBtn, 15,05,15, "&Retentar","Retentar a Opera‡„o") ; endif
if e:canDefault == .t.; AddButton(aBtn, 15,30,15, "&Prossequir","Tentar Pular o Erro."); endif
AddButton(aBtn, 15,55,15, "&Sair","Sair do Sistema",.t.)
nLinha := 2
Win(01,01,18,77,"Aviso do Sistema / Erro em Maquina ou Terminal","11/01","w+/w")
for a = 1 to len(cMessage) step 50
@ nLinha,02 say padc(substr(cMessage,a,50),76)
nLinha ++
next
nLinha ++
for a = 1 to len(funcao[1])
@ nLinha,02 say Funcao[1,a]+" - > "+Funcao[2,a]
nLinha ++
next
nopc := ProcButton(aBtn)
rstenv(tTelErro)
if (nopc == 1 .and. e:canRetry == .t. .and. e:canDefault == .t.) .or. ;
(nopc == 1 .and. e:canRetry == .t. .and. e:canDefault == .f.)
return (.t.)
elseif (nopc == 1 .and. e:canRetry == .f. .and. e:canDefault == .t.) .or. ;
(nopc == 2 .and. e:canRetry == .t. .and. e:canDefault == .t.)
return (.f.)
elseif (nopc == 1 .and. e:canRetry == .f. .and. e:canDefault == .f.) .or. ;
(nopc == 2 .and. e:canRetry == .t. .and. e:canDefault == .f.) .or. ;
(nopc == 2 .and. e:canRetry == .f. .and. e:canDefault == .t.) .or. Lastkey() == 27
Sair(cMessage)
endif
elseif e:genCode == 20 &&& "Erro de Cria‡„o de Arquivo Verifique a Maquina!"
msgbox3d("Retentando [ ] Criando Arquivo!!!",,,,"11/01","w+/w")
nTecla := 0
nTecla := Inkey(.1)
if nTecla == K_ESC .and. at(substr(Time(),8,1),"13579") # 0; cMessage := ErroMensage(e); Sair(cMessage+"SAIDA 20"); endif
@ 12,41 say processando()
rstenv(tTelErro)
NetErr(.t.)
return (.t.)
elseif e:genCode == 21 &&& Abertura de Arquivo rede
rstenv(tTelErro)
NetErr(.t.)
return (.f.)
elseif e:genCode == 25 &&& Erro de Impressora
msgbox3d("Retentando [ ] Verifique a Impressora!!!",,,,"11/01","w+/w")
nTecla := 0
nTecla := Inkey(.1)
if nTecla == K_ESC .and. at(substr(Time(),8,1),"13579") # 0; cMessage := ErroMensage(e); Sair(cMessage+"SAIDA 25"); endif
@ 12,41 say processando()
rstenv(tTelErro)
return (.t.)
elseif e:genCode == 41 &&& Erro de Rede Lock Failure
msgbox3d("Gravando Dados [ ] Aguarde!!!",,,,"11/01","w+/w")
nTecla := 0
nTecla := Inkey(.1)
@ 12,45 say processando()
if nTecla == K_ESC .and. at(substr(Time(),8,1),"13579") # 0; Sair(cMessage+"SAIDA 41 LOCK FAILURE"); endif
dbrunlock()
rstenv(tTelErro)
NetErr(.t.)
return (.t.)
else &&& Erro de divisao por zero
rstenv(tTelErro)
* Return (.f.,0)
Return (.f.)
endif
Sair(cMessage)
return (.f.)
*******************************************************************************
* ErroMensage()
*******************************************************************************
function ErroMensage(e)
local cMessage
cMessage := strzero(e:genCode(),4)+" - "
if ( ValType(e:description) == "C" )
if e:genCode == 1 &&alltrim(portugues) == "Argument error"
cMessage += "Erro em Argumento!"
elseif e:genCode == 2 &&alltrim(portugues) == "Bound error"
cMessage += "Erro de Bound!"
elseif e:genCode == 3 &&alltrim(portugues) == "String overflow"
cMessage += "Estouro de stringue!"
elseif e:genCode == 4 &&alltrim(portugues) == "Numeric overflow"
cMessage += "Estouro de numero!"
elseif e:genCode == 5 &&alltrim(portugues) == "Zero divisor"
cMessage += "Erro de divis„o por zero!"
elseif e:genCode == 6 &&alltrim(portugues) == "Numeric error"
cMessage += "Erro de numero!"
elseif e:genCode == 7 &&alltrim(portugues) == "Syntax error"
cMessage += "Erro na sintax!"
elseif e:genCode == 8 &&alltrim(portugues) == "Operation too completex"
cMessage += "Completar Opera‡„o!"
elseif e:genCode == 11 &&alltrim(portugues) == "Memory low"
cMessage += "Memoria baixando verifique outros programas abertos!"
elseif e:genCode == 12 &&alltrim(portugues) == "Undefined function"
cMessage += "Esta fun‡„o n„o existe!"
elseif e:genCode == 13 &&alltrim(portugues) == "No exported method"
cMessage += "N„o exportado o metodo brause!"
elseif e:genCode == 14 &&alltrim(portugues) == "Variable does not exist"
cMessage += "Variavel n„o Existe"
elseif e:genCode == 15 &&alltrim(portugues) == "Alias does not exist"
cMessage += "Alias(Apelido) n„o existe!"
elseif e:genCode == 16 &&alltrim(portugues) == "No exported variable"
cMessage += "N„o exportado a variavel!"
elseif e:genCode == 17 &&alltrim(portugues) == "Illegal characters in alias"
cMessage += "N„o pode se usar este Apelido!"
elseif e:genCode == 18 &&alltrim(portugues) == "Alias already in use"
cMessage += "Alias (Apelido) sendo usado por outro!"
elseif e:genCode == 20 &&alltrim(portugues) == "Create error"
cMessage += "Erro de Cria‡„o de Arquivo Verifique a Maquina!"
elseif e:genCode == 21 &&alltrim(portugues) == "Open error"
cMessage += "Erro de Abertura de Arquivo Verifique a Maquina!"
elseif e:genCode == 22 &&alltrim(portugues) == "Close error"
cMessage += "Erro de Fechamento de Arquivo Verifique a Maquina!"
elseif e:genCode == 23 &&alltrim(portugues) == "Read error"
cMessage += "Erro de Leitura de Arquivo Verifique a Maquina!"
elseif e:genCode == 24 &&alltrim(portugues) == "Write error"
cMessage += "Erro de Grava‡„o de Arquivo Verifique a Maquina!"
elseif e:genCode == 25 &&alltrim(portugues) == "Print error"
cMessage += "Erro na Impressora Verifique!"
elseif e:genCode == 30 &&alltrim(portugues) == "Operation not supported"
cMessage += "N„o Suportada a Opera‡„o!"
elseif e:genCode == 31 &&alltrim(portugues) == "Limite exeeded"
cMessage += "Exedeu o Limite!"
elseif e:genCode == 32 &&alltrim(portugues) == "Corruption detected"
cMessage += "Corrup‡„o Detectada! Reorganize!"
elseif e:genCode == 33 &&alltrim(portugues) == "Data type error"
cMessage += "Erro em tipo de Data!"
elseif e:genCode == 34 &&alltrim(portugues) == "Data width error"
cMessage += "Erro em gravamento de Data!"
elseif e:genCode == 35 &&alltrim(portugues) == "Workarea not in use"
cMessage += "Arquivo n„o esta em uso!"
elseif e:genCode == 36 &&alltrim(portugues) == "Workarea not indexed"
cMessage += "Arquivo n„o esta indexado!"
elseif e:genCode == 37 &&alltrim(portugues) == "Exclusive required"
cMessage += "Arquivo precisa ser aberto exclusivo!"
elseif e:genCode == 38 &&alltrim(portugues) == "Lock required"
cMessage += "Registro precisa ser em Loque!"
elseif e:genCode == 39 &&alltrim(portugues) == "Write not allowed"
cMessage += "Erro de Write n„o allowed!"
elseif e:genCode == 40 &&alltrim(portugues) == "Append Lock failed"
cMessage += "Erro de grava‡„o em Apend Loque!"
elseif e:genCode == 41 &&alltrim(portugues) == "Lock failure"
cMessage += "Falha no Luque de registro!"
elseif e:genCode == 45 &&alltrim(portugues) == "Lock error"
cMessage += "Erro em Luque de registro!"
elseif e:genCode == 46 &&alltrim(portugues) == "Lock Timeout"
cMessage += "Hora de Abetura de Lock de registro!"
else
cMessage += (" " + e:description)
endif
else
cMessage += " Sem Descri‡„o "
endif
cMessage += if(!Empty(e:filename),(" (" +e:filename+" "), " " )
cMessage += if(!Empty(e:operation),(" ->" +e:operation+"<- ("), " SEM OPERACAO" )
cMessage += if(e:severity > 1, " Erro ", " Fatal" )
cMessage += if(ValType(e:subsystem) == "C" ,e:subsystem(), "

" )
cMessage += if(ValType(e:subCode) == "N" ," /" + strzero(e:subCode,4), " /???" )
cMessage += ")"
return (cMessage)
*------------------------------------------------------------------------------
Function Sair(cMessage)
Local contador := 1
Private cNomArq
cNomarq := "E"+strzero(Contador,7)
do while file(cNomArq+".ERR")
@ 10,20 say "Armazenando Erro em arquivo -->"+cNomarq
Contador++
cNomarq := "E"+strzero(Contador,7)
if Contador > 9999999
ferase(cNomArq+".ERR")
cNomarq := "E"+strzero(Contador,7)
exit
endif
enddo
cNomarq += ".ERR"
dbcloseall()
set printer on
set console off
set Device to screen
set PRINTER to &cNomArq.
? " ",date(),Time(),getenv("USER")
for a = 1 to len(cMessage) step 50
? padc(substr(cMessage,a,50),76)
next
?
for a = 1 to len(funcao[1])
? Funcao[1,a]+" - > "+Funcao[2,a]
next
set Printer to
set Printer off
set Device to screen
set Console on
set Cursor on
MsgBox3d1({"Erro em Maquina !! (Auto Prote‡„o!!)","Desligue a(s) Maquina(s), VERIFIQUE TODOS OS CABOS","e Religue-a(s)","Persistindo o Erro Chame assistencia!"},"Aviso do Sistema !!",,"&Saida",,,"GR+/r+","R+/w","R+/w")
Qexit(,,,.F.)
Return .t.