;** Bibmenu ********************************************************************
;*  Biblioteca de Rotinas de Trabalho p/ menu principal                        *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 31/05/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Uso Mouse
;Ultima Alteracao: 07/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes primeiraocorrencia
;Ultima Alteracao: 14/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BarraRolagem, Nome do Script
;Ultima Alteracao: 20/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Menu 1A.
;Ultima Alteracao: 19/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Array 150
;Ultima Alteracao: 10/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cor_A()
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tamanho janela nivel 1 e outros
;Ultima Alteracao: 18/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cores no menu
;Ultima Alteracao: 12/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Alt+E configura empresa
;Ultima Alteracao: 07/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Libera‡Æo de modulos menu principal
;Ultima Alteracao: 08/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rodape menu
;Ultima Alteracao: 05/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SYS_TITULO_MENU
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao ExibeRodape(), LimpaRodape(), ExibeRodapeSD()
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Aguarde(), Aguarde2L(), Rodape_Menu()
;Ultima Alteracao: 12/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sound..                       
;Ultima Alteracao: 18/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cancelar execu‡Æo de programa            
;Ultima Alteracao: 03/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Limpa(), sombra janela        
;Ultima Alteracao: 15/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor menu conforme SYS_COR_RODAPE
;Ultima Alteracao: 24/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de cor
;Ultima Alteracao: 30/04/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado no menu rotina para acesso restrito ao SUPORTE com senhas di rias
;Ultima Alteracao: 05/05/2015 por Bruno Carvalho
;Motivo Alteracao: Add novo menu para SYS_CHAPA_USUARIO="9998"
;Ultima Alteracao: 29/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo do Sistema                     
;Ultima Alteracao: 07/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes acesso ao rotinas particulares
;Ultima Alteracao: 22/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes menu rotina para acesso restrito ao SUPORTE com senhas di rias
;Ultima Alteracao: 31/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes menu acesso conforme pacote contratado
;Ultima Alteracao: 18/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes extensÆo arquivo rois.r -> rois.log
;Ultima Alteracao: 19/07/2018 por Bruno Carvalho
;Motivo Alteracao: Faz a verifica‡Æo se arquivo "arqtxt" existe, para utilizar Append ou criar um arquivo novo
;Ultima Alteracao: 31/08/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao reportar o erro no ErroValid(), com mais informa‡äes e ajustes no layout de grava‡Æo do arq de erro
;Ultima Alteracao: 20/09/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado o script p/ ser exibido no Grava_Log() => [Menu]
;Ultima Alteracao: 23/09/2018 por Bruno Carvalho
;Motivo Alteracao: Grava_Log() -> Completa epa‡amento p/ SYS_CHAPA_USUARIO … 5 e SYS_NIVEL_USUARIO … 2
;Ultima Alteracao: 04/01/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Organiza_Log()
;Ultima Alteracao: 11/01/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado a cria‡Æo do arquivo ROIS p/ ser gerado apenas em seu mˆs atual em que os registros sÆo processados
;Ultima Alteracao: 17/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ permitir acesso … rotina "Lista de Noiva" (M_NOIVA) somente para #0294#

@ 22,28 ?? "Gerando Biblioteca BibMenu.Lib"
Style Blink
?? "... "

If IsFile("\\Sistemas\\Cadastro\\BIBMENU.Lib")
   Then Run NoRefresh "Del \\Sistemas\\Cadastro\\BIBMENU.Lib>Nul"
EndIf
CreateLib "\\Sistemas\\Cadastro\\BIBMENU"

;*******************************************************************************
;*  Rotina para carregar variaveis                                             *
;*******************************************************************************
Proc CARGA()

If Not IsTable(Tabela)
   Then WX=9
        Return
EndIf

If IsAssigned(Rotina)        Then Release Vars Rotina       EndIf
If IsAssigned(Diretorio)     Then Release Vars Diretorio    EndIf
If IsAssigned(TpComando)     Then Release Vars TpComando    EndIf
If IsAssigned(Script)        Then Release Vars Script       EndIf

Array Rotina[150]
Array Diretorio[150]
Array TpComando[150]
Array Script[150]
View NoWindow Tabela
Moveto [Descricao]
Tipo=FieldType()
Auxi=Len(Tipo)
Taman=Substr(Tipo,2,Auxi)
Taman=NumVal(Taman)
TC=Taman+2
If NIVEL_MENU<3
   Then TC=TC+1
EndIf

NR=0
WC=0
Scan
  If (SYS_NIVEL_USUARIO="P" Or SYS_NIVEL_USUARIO="E") And [Liberado]<>"X"
     Then Loop
  EndIf
  If Upper(Tabela)="M_PRIN" And [Liberado]="N"
     Then Loop
  EndIf


 ;--- Ajustado em 07.12.2016 ---------------------------------------------------
  if sys_Codigo_cliente<>"0371" and Upper([Comando])="M_GEEC"
     then loop
  endif   

  if SYS_CLIENTE_CONFEC="" and Upper(Tabela)="M_PROD" and Upper([Comando])="M_PROD_F" 
     then loop
  endif   

  if sys_Codigo_cliente<>"0377" and Upper(Tabela)="M_PROD" and Upper([Comando])="M_PROG_M" 
     then loop
  endif
  
  If SYS_CODIGO_CLIENTE<>"0294" And Upper(Tabela)="M_PRESEN" 
     Then Loop        
  EndIf     

 ;--- Controle Sistema ---------------------------------------------------------
  if upper(SYS_SISTEMA)<>"VISERPPLUS"
     then
          switch
            case Upper(Tabela)="M_PRIN":
              switch
                case upper(SYS_SISTEMA)="VISERPFIN":
                     If Upper([Comando])="M_ESTQ"   or
                        Upper([Comando])="M_VEND"   or
                        Upper([Comando])="M_PROD"   or
                        Upper([Comando])="M_IMP"    
                        Then Loop
                     EndIf
            
                case upper(SYS_SISTEMA)="VISERPNFE" :
                     If Upper([Comando])="M_CCOR"   or
                        Upper([Comando])="M_CPAG"   or
                        Upper([Comando])="M_CREC"   or
                        Upper([Comando])="M_CHEQ"   
                        Then Loop
                     EndIf
            
                case upper(SYS_SISTEMA)="VISERPFLEX":   
                     If Upper([Comando])="M_CCOR"   or
                        Upper([Comando])="M_CPAG"   or
                        Upper([Comando])="M_CREC"   or
                        Upper([Comando])="M_CHEQ"   
                        Then Loop
                     EndIf
            
                case upper(SYS_SISTEMA)="VISERPECF" :
                     If Upper([Comando])="M_CCOR"   or
                        Upper([Comando])="M_CPAG"   or
                        Upper([Comando])="M_CREC"   or
                        Upper([Comando])="M_CHEQ"   or
                        Upper([Comando])="M_MDFE"   
                        Then Loop
                     EndIf
            
               ;case Search("2",SYS_SISTEMA)>0      :
               ;     If Upper([Comando])="M_PROD"  
               ;        Then Loop
               ;     EndIf
            
                otherwise:
                
              endswitch
          
            case Upper(Tabela)="M_VEND":
              switch
                case upper(SYS_SISTEMA)="VISERPECF" :
                     If Upper([Comando])="M_MDFE"   
                        Then Loop
                     EndIf
                
                otherwise:
                
              endswitch
            
            otherwise:
            
          endswitch
  endif
 ;------------------------------------------------------------------------------

  WC=WC+1
  pos_l=SearchFrom("~",[Descricao],1)
  If pos_l>0
     Then If (pos_l+1)<10
             Then pos_lc="0"+StrVal(pos_l+1)
             Else pos_lc=StrVal(pos_l+1)
          EndIf
          Rotina[WC]=SubStr([Descricao],(pos_l+1),1)
          Rotina[WC]=Rotina[WC]+pos_lc+" "
          Rotina[WC]=Rotina[WC]+Substr([Descricao],1,pos_l-1)
          Rotina[WC]=Rotina[WC]+Substr([Descricao],pos_l+1,Len([Descricao])-pos_l+1)
          Rotina[WC]=Rotina[WC]+(Spaces(TC-Len([Descricao])))
     Else If [Tipo de Comando]<>""
             Then If Asc(SubStr([Descricao],1,1))>=48 And
                     Asc(SubStr([Descricao],1,1))<=57
                     Then Rotina[WC]=" 00"+Substr(" "+[Descricao]+Spaces(TC),1,TC)
                     Else
                          For i From 1 to Taman
                            If (Asc(Substr([Descricao],i,1))>64 And Asc(Substr([Descricao],i,1))<91) Or
                               (Asc(Substr([Descricao],i,1))>96 And Asc(Substr([Descricao],i,1))<123)
                               Then Rotina[WC]=Substr([Descricao],i,1)
                                    If (i+1)>9
                                       Then Rotina[WC]=Rotina[WC]+StrVal(i+1)+Substr(" "+[Descricao]+Spaces(TC),1,TC)
                                       Else Rotina[WC]=Rotina[WC]+"0"+StrVal(i+1)+Substr(" "+[Descricao]+Spaces(TC),1,TC)
                                    EndIf
                                    QuitLoop
                            EndIf
                          EndFor
                  EndIf
             Else Rotina[WC]="   "+Substr(" "+[Descricao]+Spaces(TC),1,TC)
          EndIf
  EndIf

  Diretorio[WC]=[Diretorio]
  TpComando[WC]=[Tipo de Comando]
  Script[WC]   =[Comando]
EndScan
If WC<1
   Then WC=1
        WX=9
EndIf
NR=WC

ClearImage
EndPRoc    ; (Carga)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Carga

;*******************************************************************************
;*  Rotina para mover nos menus                                                *
;*******************************************************************************
Proc MOVER()
private opnumero, linha, coluna, wci, evento_OK

EventoOrigem=""
While True

  opnumero=""
  gravalogsysOk=True
  While True

    If Not VOLTA_MENU
       Then GETEVENT KEY "ALL" MOUSE "DOWN","AUTO" TO EVENTARRAY
    EndIf

    evento_ok=True
    Switch
      Case VOLTA_MENU Or EventArray["TYPE"]="MOUSE":
           VOLTA_MENU=False
           EventoOrigem="MOUSE"

           linha =EventArray["ROW"]
           coluna=EventArray["COL"]

           For wci From 1 To 2
            Switch
             Case wci=1:

                  If Linha=23 and SYS_MODO_RODAPE="A"
                     Then Switch
                            Case Coluna>= 6 and Coluna<=16: Char=-104 QuitLoop
                            Case Coluna>=18 and Coluna<=28: Char=-106 QuitLoop
                            Case Coluna>=30 and Coluna<=40: Char=-108 QuitLoop
                            Case Coluna>=42 and Coluna<=52: Char=-110 QuitLoop
                            Case Coluna>=54 and Coluna<=65: Char=-112 QuitLoop
                            Case Coluna>=67 and Coluna<=78: Char=-139 QuitLoop
                          EndSwitch
                  EndIf
                  If Linha=24 and SYS_MODO_RODAPE="A"
                     Then Switch
                            Case Coluna>= 6 and Coluna<=16: Char=-105 QuitLoop
                            Case Coluna>=18 and Coluna<=28: Char=-107 QuitLoop
                            Case Coluna>=30 and Coluna<=40: Char=-109 QuitLoop
                            Case Coluna>=42 and Coluna<=52: Char=-111 QuitLoop
                            Case Coluna>=54 and Coluna<=65: Char=-113 QuitLoop
                            Case Coluna>=67 and Coluna<=78: Char=-140 QuitLoop
                          EndSwitch
                  EndIf

                  If Linha=(LS-1) and (Coluna=cd Or Coluna=(cd+1) Or Coluna=(cd+2))
                     Then Char=27
                          QuitLoop
                  EndIf

                  If Linha=(LS+(Tj-1)) and (Coluna=cd+tc+1) And SETA_INFERIOR<>""
                     Then Cor_A(OT, LJ)
                          OT=OT+(Linha-LJ)
                          LJ=Linha
                          Cor_N(OT, LJ)

                          Char=-81
                          QuitLoop
                  EndIf
                  If Linha=LS and (Coluna=cd+tc+1) And SETA_SUPERIOR<>""
                     Then Cor_A(OT, LJ)
                          OT=OT+(Linha-LJ)
                          LJ=Linha
                          Cor_N(OT, LJ)

                          Char=-73
                          QuitLoop
                  EndIf

                  If (Linha>=LS and Linha<=LS+(Tj-1)) And (Coluna>=(cd+1) and coluna<=(ce-1))
                     Then

                          If SubStr(Rotina[OT+(Linha-LJ)],2,2)<>"  "
                            Then
                                 Cor_A(OT, LJ)
                                 OT=OT+(Linha-LJ)
                                 LJ=Linha
                                 Cor_N(OT, LJ)
                                 sleep 100
                                 Char=13
                                 QuitLoop
                          EndIf
                  EndIf
             Case wci=2:
                  If NIVEL_MENU=3
                     Then
                          If Linha=(JA_LS-1) and (Coluna=JA_cd Or Coluna=(JA_cd+1) Or Coluna=(JA_cd+2))
                             Then WX=9
                                  VOLTA_MENU=True
                                  Return
                          EndIf
                          If (Linha>=JA_LS and Linha<=JA_LS+(JA_Tj-1)) And (Coluna>=(JA_cd+1) and coluna<=(JA_ce-1))
                             Then WX=9
                                  VOLTA_MENU=True
                                  Return
                          EndIf
                  EndIf
                  evento_ok=false
            EndSwitch
           EndFor
      Case EventArray["TYPE"]="KEY":
           VOLTA_MENU=False
           EventoOrigem="KEYCODE"
           CHAR=EventArray["KEYCODE"]
      OtherWise:
           Loop
    EndSwitch

    If Not evento_ok Then Loop EndIf

    If Char=Asc("ENTER")
       Then 
       
            ;----- Rotina Exclusiva para acesso do SUPORTE ----------------------
            If Upper(Script[OT]) = "M_UTIL_S"  
               Then If SYS_CHAPA_USUARIO="9999"                      
                       Then If Not Checa_Suporte()
                               Then evento_ok=false
                            EndIf
                       Else MENSAGEM("Rotina para Opera‡”es Internas//Exclusiva para o Suporte T‚cnico da Vise Inform tica !")
                            evento_ok=false
                    EndIf                                                       
            EndIf        
            ;--------------------------------------------------------------------

            If evento_ok 
               Then
                    If TpComando[OT]<>""
                       Then Return
                    EndIf
            EndIf
            
    EndIf
    If Char=Asc("RIGHT")
       Then If TpComando[OT]="T"
               Then Return
            EndIf
    EndIf
    If Char=Asc("LEFT")
       Then If Opcao<>"Principal"
               Then WX=9
                    Return
            EndIf
    EndIf
    If Char=Asc("ESC")
       Then If Opcao<>"Principal"
               Then WX=9
                    Return
               Else LimpaRodape(0)
                    Sound 700 5
                    ShowPopup " Deseja sair ? " CENTERED
                        "~S~IM": " Sair do sistema"     : "SIM",
                        "~N~ÇO": " N„o sair do sistema" : "NAO"
                    EndMenu
                    To MenuVar
                       If MenuVar<>"Esc" And MenuVar="SIM"
                          Then WX=9
                               Return
                       EndIf
                    Rodape_Menu()
            EndIf
    EndIf
    If Char=Asc("DOWN")
       Then Desce()
    EndIf
    If Char=Asc("UP")
       Then Sobe()
    EndIf
    If Char=Asc("PGDN")
       Then PgDesce()
    EndIf
    If Char=Asc("PGUP")
       Then PgSobe()
    EndIf
    If Char=Asc("HOME")
       Then Topo()
    EndIf
    If Char=Asc("END")
       Then Fim()
    EndIf

    If (Char=2)
       Then If SYS_MODO_RODAPE="A"
               Then SYS_MODO_RODAPE="N"
               Else SYS_MODO_RODAPE="A"
            EndIf
            CoEdit NoWindow "\\Sistemas\\Cadastro\\Usuarios"
            Moveto [Chapa]
            Locate SYS_CHAPA_USUARIO
            If RetVal
               Then [Modo Rodape Menu]=SYS_MODO_RODAPE
            EndIf
            Do_It!
            ClearImage
            Rodape_Menu()
    EndIf
    If (Char=20)
       Then Grava_Log("ATALHO/VER/EXCLUIR FUNCOES")
            gravalogsysOk=False
            Play "\\Sistemas\\Cadastro\\TcAtalho"
            Monta_Array_Teclas_Atalho()
            Rodape_Menu()
            QuitLoop

    EndIf
    If (Char=22)
       Then Mensagem(Diretorio[OT]+" - "+TpComando[OT]+" - "+Script[OT])
    EndIf

    If (Char=-104) or (Char=-105) or (Char=-106) or (Char=-107) or (Char=-108) or
       (Char=-109) or (Char=-110) or (Char=-111) or (Char=-112) or (Char=-113) or
       (Char=-139) or (Char=-140) or (Char=-22)  Or (Char=-46)  or (Char=-18)
       Then If TeclaAtalho(Char)
               Then Return
            EndIf
    EndIf
    If ((Char=-94) or (Char=-95) or (Char=-96) or (Char=-97) or (Char=-98) or
        (Char=-99) or (Char=-100) or (Char=-101) or (Char=-102) or (Char=-103) or
        (Char=-137) or (Char=-138)) And TpComando[OT]="S"
       Then Grava_Log("ATALHO/PROG.FUNCAO")
            gravalogsysOk=False
            ProgramaFuncao(Char)
    EndIf
    If (Char>64 And Char<91) Or (Char>96 And Char<123)
       Then Switch
              Case Len(opnumero)=1:
                opnumero=opnumero+Chr(char)
                If Numero(opnumero)
                   Then If TpComando[OT]<>""
                           Then Return
                        EndIf
                EndIf
              OtherWise:
                If Letra(Char)
                   Then If TpComando[OT]<>""
                           Then Return
                        EndIf
                EndIf
            EndSwitch
    EndIf
    If (Char>47 And Char<58)
       Then opnumero=opnumero+Chr(char)
            If Len(opnumero)=2
               Then If Numero(opnumero)
                       Then If TpComando[OT]<>""
                               Then Return
                            EndIf
                    EndIf
               Else Loop
            EndIf
    EndIf
    If (Char=-119) or (Char=-141)
       Then PosCursorIni()
    EndIf
    If (Char=-117) or (Char=-145)
       Then PosCursorFim()
    EndIf
    QuitLoop
  EndWhile
EndWhile
EndProc     ; (Mover)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Mover

;*******************************************************************************
;*  Rotina Numero                                                              *
;*******************************************************************************
Proc Numero(Caracter)
Private Caracter, l, lwc
For l From 1 To NR
  If SearchFrom(Caracter,Rotina[l],4)>0
     Then For lwc From (OT-(LJ-LS)) to (OT+(LI-LJ))
              If SearchFrom(Caracter,Rotina[lwc],4)>0
                 Then Cor_A(OT, LJ)
                      LJ=LS+(lwc-(OT-(LJ-LS)))
                      OT=l
                      Cor_N(OT, LJ)
                      sleep 100
                      Return True
              EndIf
          EndFor

          Cor_A(OT, LJ)
          If (l-(LI-LS))>0
             Then WC=l-(LI-LS)
             Else WC=l
          EndIf
          OT=WC
          DISPLAYJ()
          If (l-(LI-LS))>0
             Then LJ=LI
             Else LJ=LS
          EndIf
          OT=l
          Cor_N(OT, LJ)
          sleep 400
          Return True
  EndIf
EndFor
Return False
EndProc   ;  (Numero)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Numero

;*******************************************************************************
;*  Rotina para mover para Letra em destaque                                   *
;*******************************************************************************
Proc Letra(Caracter)
Private Caracter, l, lwc
For l From 1 To NR
  If SubStr(Rotina[l],1,1)=Upper(Chr(Caracter)) or
     SubStr(Rotina[l],1,1)=Lower(Chr(Caracter))
     Then For lwc From (OT-(LJ-LS)) to (OT+(LI-LJ))
              If SubStr(Rotina[l],1,1)=SubStr(Rotina[lwc],1,1)
                 Then Cor_A(OT, LJ)
                      LJ=LS+(lwc-(OT-(LJ-LS)))
                      OT=l
                      Cor_N(OT, LJ)
                      sleep 100
                      Return True
              EndIf
          EndFor

          Cor_A(OT, LJ)
          If (l-(LI-LS))>0
             Then WC=l-(LI-LS)
             Else WC=l
          EndIf
          OT=WC
          DISPLAYJ()
          If (l-(LI-LS))>0
             Then LJ=LI
             Else LJ=LS
          EndIf
          OT=l
          Cor_N(OT, LJ)
          sleep 400
          Return True
  EndIf
EndFor
Return False
EndProc   ;  (Letra)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Letra

;*******************************************************************************
;*  Rotina para destacar a cor                                                 *
;*******************************************************************************
Proc Cor_A(Op_Array, Op_Linha)
Private Op_Array, Op_Linha, CD_L
 Style
 @ Op_Linha,CD ?? " "+SubStr(Rotina[Op_Array],4,Len(Rotina[Op_Array]))+" "
 If SubStr(Rotina[Op_Array],2,2)>"00"
    Then CD_L=CD+NumVal(SubStr(Rotina[Op_Array],2,2))
         PaintCanvas Attribute SYS_COR_MENUD Op_Linha, CD_L, Op_Linha, CD_L
 EndIf

 If IsBlank(TpComando[Op_Array])
    Then If Search(Chr(196),Rotina[Op_Array])>0
            Then PaintCanvas Attribute 120 Op_Linha, CD+1, Op_Linha, CD+1+Len(Rotina[Op_Array])-4
            Else @ Op_Linha,CD+1 ?? "-"
                 PaintCanvas Attribute SYS_COR_MENUD Op_Linha, CD  , Op_Linha, CD+1+Len(Rotina[Op_Array])-3
         EndIf
    Else If SubStr(Rotina[Op_Array],7,1)="."
            Then PaintCanvas Attribute SYS_COR_MENUD Op_Linha, CD+1, Op_Linha, CD+3
         EndIf
 EndIf

EndProc
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Cor_A

Proc Cor_N(Op_Array, Op_Linha)
Private Op_Array, Op_Linha, CD_L, ch, tx
 If TpComando[Op_Array]<>"T"
    Then tx=Rotina[Op_Array]
    Else tx=SubStr(RTrim(Rotina[Op_Array])+"..",1,26)
 EndIf

 BarraRolagem()
 ch=" "
 @ Op_Linha,CD+1 ?? ch+LTrim(SubStr(tx,4,Len(Rotina[Op_Array])))
 PaintCanvas Attribute 143 Op_Linha, CD+1, Op_Linha, CD+1+Len(Rotina[Op_Array])-4
 If SubStr(Rotina[Op_Array],2,2)>"00"
    Then CD_L=CD+NumVal(SubStr(Rotina[Op_Array],2,2))
         ;;;PaintCanvas Attribute 128 Op_Linha, CD_L, Op_Linha, CD_L
 EndIf
 Style

 If TpComando[Op_Array]="S"
    Then MontaTitulo_Menu(Script[Op_Array])
    Else 
         If Search("__",Script[Op_Array])>0
            Then MontaTitulo_Menu("")
            Else MontaTitulo_Menu(Script[Op_Array])
         EndIf
 EndIf

EndProc    ; (Cor_A)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Cor_N

;*******************************************************************************
;*  Rotina DiplaYJ                                                             *
;*******************************************************************************
Proc DISPLAYJ()
 WL=LS
 While WL<(LS+TJ)
   If Not tcesc
      Then Cor_A(WC, WL)
   EndIf
   WL=WL+1
   WC=WC+1
 EndWhile
EndProc   ;  (Displayj)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" DisplayJ

;*******************************************************************************
;*  Rotina Barra de Rolagem                                                    *
;*******************************************************************************
Proc BarraRolagem()
If ((OT+(TJ-(LJ-LS)))-1)<NR
   Then SETA_INFERIOR=""
   Else SETA_INFERIOR=""
EndIf
If ((OT-(LJ-LS))-1)>0
   Then SETA_SUPERIOR=""
   Else SETA_SUPERIOR=""
EndIf

@ LS,CD+(TC+1) ?? SETA_SUPERIOR
@ LI,CD+(TC+1) ?? SETA_INFERIOR
EndProc   ;  (BarraRolagem)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" BarraRolagem

;*******************************************************************************
;*  Rotina Topo                                                                *
;*******************************************************************************
Proc TOPO()
 Cor_A(OT, LJ)
 WC=1
 OT=WC
 DISPLAYJ()
 LJ=LS
 Cor_N(OT, LJ)
 If SubStr(Rotina[OT],2,2)="  "
   Then Desce()
 EndIf
EndProc  ; (Topo)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Topo

;*******************************************************************************
;*  Rotina Posicao do Cursor                                                   *
;*******************************************************************************
Proc PosCursor()
 WC=OT-(LJ-LS)
 DISPLAYJ()
 Cor_N(OT, LJ)
 If SubStr(Rotina[OT],2,2)="  "
   Then Desce()
 EndIf
EndProc  ; (PosCursor)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" PosCursor

;*******************************************************************************
;*  Rotina Posiciona o Cursor no Inicio da Janela                              *
;*******************************************************************************
Proc PosCursorIni()
Cor_A(OT, LJ)
OT=OT-(LJ-LS)
LJ=LS
If SubStr(Rotina[OT],2,2)="  "
  Then Desce()
  Else Cor_N(OT, LJ)
EndIf
EndProc  ; (PosCursorIni)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" PosCursorIni

;*******************************************************************************
;*  Rotina Posiciona o Cursor no Final da Janela                               *
;*******************************************************************************
Proc PosCursorFim()
Cor_A(OT, LJ)
OT=(OT+(TJ-(LJ-LS)))-1
LJ=LS+TJ-1
If SubStr(Rotina[OT],2,2)="  "
  Then Sobe()
  Else Cor_N(OT, LJ)
EndIf
EndProc  ; (PosCursorFim)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" PosCursorFim

;*******************************************************************************
;*  Rotina FIM                                                                 *
;*******************************************************************************
Proc FIM()
 Cor_A(OT, LJ)
 OT=NR
 WC=(OT-TJ)+1
 DISPLAYJ()
 LJ=LS+TJ-1
 Cor_N(OT, LJ)
EndProc   ; (Fim)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Fim

;*******************************************************************************
;*  Rotina Desce                                                               *
;*******************************************************************************
Proc DESCE()
While True
  If LJ<(LS+TJ-1)
     Then Cor_A(OT, LJ)
          OT=OT+1
          LJ=LJ+1
     Else If OT=NR
             Then OT=1
                  WC=1
                  DISPLAYJ()
                  LJ=LS
             Else OT=OT+1
                  WC=(OT-TJ)+1
                  DISPLAYJ()
          Endif
  Endif
  Cor_N(OT, LJ)
  If SubStr(Rotina[OT],2,2)<>"  "
    Then QuitLoop
  EndIf
EndWhile
EndProc   ; (Desce)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Desce

;*******************************************************************************
;*  Rotina Sobe                                                                *
;*******************************************************************************
Proc SOBE()
While True
  If LJ>LS
     Then Cor_A(OT, LJ)
          OT=OT-1
          LJ=LJ-1
     Else If OT=1
             Then OT=NR
                  WC=(OT-TJ)+1
                  DISPLAYJ()
                  LJ=LS+TJ-1
             Else OT=OT-1
                  WC=OT
                  DISPLAYJ()
          Endif
  Endif
  Cor_N(OT, LJ)
  If SubStr(Rotina[OT],2,2)<>"  "
    Then QuitLoop
  EndIf
EndWhile
EndProc   ;  (Sobe)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Sobe

;*******************************************************************************
;*  Rotina PGDESCE                                                             *
;*******************************************************************************
Proc PgDESCE()
 WC=OT+(((LS+TJ-1)-LJ)+(TJ-1))

 If WC>=NR
    Then If (OT+((LS+TJ-1)-LJ))<NR
            Then WC=(NR-TJ+1)
                 OT=WC
                 DISPLAYJ()
                 LJ=LS
         EndIf
    Else WC=WC-TJ+1
         OT=WC
         DISPLAYJ()
         LJ=LS
 Endif
 Cor_N(OT, LJ)
EndProc   ;  (PgDesce)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" PgDesce


;*******************************************************************************
;*  Rotina PGSOBE                                                              *
;*******************************************************************************
Proc PgSOBE()
 WC=(OT-(LJ-LS))-(TJ-1)

 If WC>0
    Then OT=WC
         DISPLAYJ()
         LJ=LS
    Else WC=OT-(LJ-LS)
         If WC>1
            Then WC=1
                 OT=WC
                 DISPLAYJ()
                 LJ=LS
         EndIf
 Endif

 Cor_N(OT, LJ)
EndProc  ; (PgSobe)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" PgSobe

;*******************************************************************************
;* Rotina Monta Senha do Suporte                                               *
;*******************************************************************************
Proc Suporte_Senha(SENHA)
Private SENHA,VALIDADOR

SENHA = Upper(SubStr(SENHA,1,5))+AlinhM(Upper(SubStr(SENHA,6,2)),2)

If Upper(SubStr(SENHA,1,5)) = "VVSUP"
   Then VALIDADOR = AlinhM(StrVal(Day(Today())),2)
        If Upper(SENHA) = "VVSUP"+VALIDADOR
           Then Return True
        EndIf
EndIf           
Return False

EndProc ;Suporte_Senha()
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Suporte_Senha

;*******************************************************************************
;* Rotina Dialog Acesso p/ Supervisor                                          *
;*******************************************************************************
Proc Suporte_Dialog(Disparo_Sup,Campo_Sup,Evento_Sup,Elemento_Sup)
Temp=True
TECLA    =""
MSG_Campo_Sup=""
If Disparo_Sup="OPEN"
   Then Campo_Sup=Campo_Sup_Ini
EndIf
If Disparo_Sup="EVENT" And Evento_Sup["Type"]="KEY" Then
   Switch
     Case Evento_Sup["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo_Sup="TG_SENHA"             : Campo_Sup="NO"
            Case Campo_Sup="YES" Or Campo_Sup="NO": Campo_Sup="TG_SENHA"
          EndSwitch
     Case Evento_Sup["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo_Sup="TG_SENHA"       : Campo_Sup="YES"
                 VSDGSENHA = ControlValue("TG_SENHA")
						Case Campo_Sup="YES":
								 MSG_CAMPO_Sup="Executando"
								 AcceptDialog
						Case Campo_Sup="NO" :
								 MSG_CAMPO_Sup="Cancelando"
								 CancelDialog
          EndSwitch
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo_Sup="TG_SENHA":
       MSG_Campo_Sup="Informe a senha para acesso restrito \"SUPORTE\""
  Case Campo_Sup="NO" :
       MSG_Campo_Sup="Cancelar/Retornar !"
  Case Campo_Sup="YES":
       MSG_Campo_Sup="Confirmar Dados/Entrar !"
EndSwitch

SelectControl Campo_Sup

ExibeRodapeSD(MSG_Campo_Sup)
ExibeRodape(2,"Esc=Retornar  Enter=Avan‡ar  "+TECLA)
RefreshDialog

Return Temp
EndProc
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Suporte_Dialog

;*******************************************************************************
;* Rotina Monta Janela Acesso p/ Suporte                                       *
;*******************************************************************************
Proc Checa_Suporte()
Private VSDGUSUARIO, VSDGNOMUSUARIO, VSDSENHA, USUARIOANT,
        sd_i, sd_index, cod_ok, acessook, Campo_Sup_Ini, CS

VSDGSENHA     =""

CS=1
Campo_Sup_Ini ="TG_SENHA"
While True
  ShowDialog "Acesso p/ SUPORTE" Proc "Suporte_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "ENTER","ESC"
     @ 7,20   Height 07 Width 34

       Label  @ 0,0 "Senha" for "TG_SENHA"
       Accept @ 1,1 Width 10 "A7" picture "@*@" hidden Tag "TG_SENHA" to VSDGSENHA

       Pushbutton @ 03,3 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
       Pushbutton @ 03,17 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then Acessook=False QuitLoop EndIf

  If IsBlank(VSDGSENHA)
     Then MENSAGEM("A senha deve ser informada !")
          Acessook=False
          Loop
  EndIf

  If Not Suporte_Senha(VSDGSENHA)
     Then MENSAGEM("A senha informada ‚ inv lida !")
          Acessook=False
          VSDGSENHA = ""
          Loop
  EndIf
  Acessook=True
  QuitLoop
EndWhile
Return acessook
EndProc         
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Checa_Suporte

;*******************************************************************************
;* Rotina Para Limpa Area de Trabalho                                          *
;*******************************************************************************
Proc Limpa(nl,nc)
Private nl,nc

While nl < 23
   PaintCanvas Border Fill Chr(176) Attribute SYS_COR_FUNDO nl, nc, nl, 79
   nl=nl+1
EndWhile
Style

TITSHOW=SYS_TITULO_MENU
ShowPullDown
  TITSHOW : "" : ""
EndMenu
EndProc   ; (Limpa)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Limpa

;*******************************************************************************
;*  Rotina para carregar variaveis                                             *
;*******************************************************************************
Proc PROCESSO()

 CARGA()
 If (LS+NR)>21
    Then TJ=21-LS
    Else TJ=NR
 EndIf
 LI=(LS+TJ)-1
 If (CD+TC)>76
    Then CD=76-TC
 EndIF
 CE=CD+TC+1
 If tcesc
    then return
 endif
 @ (LS-1),CD ?? Spaces(TC+2)
 Switch
   Case Tabela="M_PRIN"   : @ (LS-1),CD ?? "["+Chr(254)+"]"
   OtherWise              : @ (LS-1),CD ?? "["+Chr(017)+"]"
 EndSwitch
 
 @ (LS-1),cd+Int(((TC+2)-len(LTrim(RTrim(Opcao))))/2) ?? LTrim(RTrim(Opcao))
 
 PaintCanvas Attribute SYS_COR_RODAPE   LS-1, CD, LS-1, CE
 PaintCanvas Attribute SYS_COR_RODAPED  LS-1, CD+1, LS-1, CD+1
 
 PaintCanvas Border Attribute 08 LI+1, CD+2, LI+1, CE+2
 PaintCanvas Border Attribute 08 LS  , CE+1, LI  , CE+2
 
Endproc  ; (Processo)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Processo

;*******************************************************************************
;*  Rotina para carregar variaveis                                             *
;*******************************************************************************
Proc PRINCIPAL()

 LS=03
 CD=02
 JA=112

 If Not tcesc
    Then Rodape_Menu()
 EndIf

EndProc  ; (Principal)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Principal


;*******************************************************************************
;*  Rotina PRIMENU                                                             *
;*******************************************************************************
Proc PRIMENU()

While True

  Opcao ="Principal"
  Principal()
  
  Tabela="M_PRIN"
  
  ;If SYS_CHAPA_USUARIO="9998"
  ;   Then Tabela="M_DEV"  
  ;EndIf
  
  PROCESSO()
  ot=ow
  lj=lw
  PosCursor()

  MOVER()
  OTA=OT
  LJA=LJ

  If TpComando[OT]="T"
     Then TABSEL=Script[OT]
          TABELA=Script[OT]
          OpcANT=SubStr(Rotina[OT],4,Search("  ",Rotina[OT])-1)
          Opcao=SubStr(Rotina[OT],4,Search("  ",Rotina[OT])-1)
          TabM=Script[OT]
          OpcM=SubStr(Rotina[OT],4,Search("  ",Rotina[OT])-1)
  EndIf
  If TpComando[OT]="C"
     Then If Script[OT]="SAIR" Or
             Script[OT]="Sair"
             Then WX=9
          EndIF
  EndIf
  QuitLoop
EndWhile
EndPRoc    ; (PRIMENU)
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" PriMenu

;*******************************************************************************
;*  Rotina SUBSMENU                                                            *
;*******************************************************************************
Proc SUBSMENU()
Private TEMP

 TEMP=True
 If Not tcesc
    Then LIMPA((ls-1),cd)
 EndIf
 While True
   PRINCIPAL()
   PROCESSO()
   
   If WX=9
      Then If (SYS_NIVEL_USUARIO="P" Or SYS_NIVEL_USUARIO="E")
              Then Mensagem("Op‡„o n„o configurada pelo Supervisor, Verificar !")
              Else Mensagem("Op‡„o n„o configurada !")
           EndIf
           QuitLoop
   EndIf
   ot=oy
   lj=ly

   PosCursor()

   JA_LS=LS
   JA_TJ=TJ
   JA_TC=TC
   JA_CD=CD
   JA_CE=CE
   
   tcesc=False
   If primeiraocorrencia And EventoOrigem="MOUSE"
      then primeiraocorrencia=false
           If TpComando[OT]<>"T"
              Then MOVER()
           EndIf
      Else MOVER()
   EndIf
   
   If TpComando[OT]="T"
      Then 
           TABELA=Script[OT]
           Opcao =SubStr(Rotina[OT],4,Search("  ",Rotina[OT])-1)
           TabM  =Script[OT]
           OpcM  =SubStr(Rotina[OT],4,Search("  ",Rotina[OT])-1)
   EndIf
   OTA=OT
   LJA=LJ
   QuitLoop
 EndWhile
 
 Return TEMP
 
EndPRoc ;SUBSMENU()
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" SubsMenu

;*******************************************************************************
;* ROTINA CONFGERAL DIALOG                                                     *
;*******************************************************************************
Proc Rodape_Menu()
Private lrdp1, lrpd2,f

Switch
  Case SYS_MODO_RODAPE="N":
       Switch
         Case Opcao ="Principal":
              @ 23,0 ?? " Esc       Enter     /Mouse    Ctrl+F?      Ctrl+T               Ctrl+B       "
              @ 24,0 ?? " Sair      Executar  Selecionar  Prog.Fun‡„o  Ver/Excluir Fun‡”es  Modo Barra   "
         OtherWise:
              @ 23,0 ?? " Esc       Enter     /Mouse    Ctrl+F?      Ctrl+T               Ctrl+B       "
              @ 24,0 ?? " Retornar  Executar  Selecionar  Prog.Fun‡„o  Ver/Excluir Fun‡”es  Modo Barra   "
       EndSwitch
       PaintCanvas Attribute SYS_COR_RODAPED   23,00,23,79
       PaintCanvas Attribute SYS_COR_RODAPE    24,00,24,79
  Case SYS_MODO_RODAPE="A":
       lrdp1=" Alt+ "
       lrdp2="      "
       For f From 1 To 12
         If Int(f/2)-(f/2)=0
            Then If f=4
                    Then lrdp2=lrdp2+RTrim(Substr(sys_tecla_atalho[f],1,3))+Completa("Sair",9," ")+" "
                    Else lrdp2=lrdp2+RTrim(Substr(sys_tecla_atalho[f],1,3))+Completa(Substr(sys_tecla_atalho[f],5,9),9," ")+" "
                 EndIf
            Else lrdp1=lrdp1+RTrim(Substr(sys_tecla_atalho[f],1,3))+Completa(Substr(sys_tecla_atalho[f],5,9),9," ")+" "
                 If f=9
                    Then lrdp1=lrdp1+" "
                 EndIf
         EndIf
       Endfor
       @ 23,0 ?? Completa(lrdp1,80," ")
       @ 24,0 ?? Completa(lrdp2,80," ")
       PaintCanvas Attribute SYS_COR_RODAPE   23,00,24,79

       PaintCanvas Attribute SYS_COR_RODAPED  23,00,24,07
       PaintCanvas Attribute SYS_COR_RODAPED  23,18,24,19
       PaintCanvas Attribute SYS_COR_RODAPED  23,30,24,31
       PaintCanvas Attribute SYS_COR_RODAPED  23,42,24,43
       PaintCanvas Attribute SYS_COR_RODAPED  23,54,23,55
       PaintCanvas Attribute SYS_COR_RODAPED  24,54,24,56
       PaintCanvas Attribute SYS_COR_RODAPED  23,67,24,69
       Release vars lrdp1,lrdp2, f

;0123456789012345678901234567890123456789012345678901234567890123456789
;Alt+ F9123456789 F9123456789 F9123456789 F9123456789 F9123456789  F99123456789
;     F9123456789 F9123456789 F9123456789 F9123456789 F99123456789 F99123456789

EndSwitch
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Rodape_Menu

;************************************
;* Rotina para Gravar Log           *
;************************************
Proc Grava_Log(op)
Private s,arqtxt,op,LOG_MES,LOG_ANO,TXT_MES,TXT_ANO
If not gravalogsysOk
   Then gravalogsysOk=True
        Return
EndIf

;**** LOGSYS.TXT ***************************************************************
LOG_MES = Month(Today())
LOG_ANO = Year(Today())
TXT_MES = Ltrim(StrVal(LOG_MES))                                   If Len(TXT_MES)=1 Then TXT_MES = AlinhM(TXT_MES,2) EndIf 
TXT_ANO = SubStr(StrVal(LOG_ANO),3,2) 
arqtxt  = SubStr(Directory(),1,2)+"\\Sistemas\\Cadastro\\rois"+TXT_MES+TXT_ANO+".log"

s=Format("D13",Today())+" "
s=s+Time()+" "
s=s+Completa(SYS_CHAPA_USUARIO            ,05," ")
s=s+Completa(SubStr(SYS_NOME_USUARIO,1,10),11," ")
s=s+Completa(SYS_NIVEL_USUARIO            ,02," ")
s=s+Format("W2,AL",SYS_NCONEXAO)+" "
s=s+Completa(SubStr(SYS_ESTACAO,1,12),13," ")
If Not IsBlank(op)
   Then s=s+">[Menu    ]"+op
   Else If IsAssigned(OPCANT) And
           IsAssigned(Opcao)
           Then If OPCANT<>Opcao
                   Then s=s+">[Menu    ] "+Format("W8,AL",Upper(Script[OT]))+" "+Upper(LTrim(RTrim(OpcANT))+"/"+LTrim(RTrim(Opcao)))
                   Else s=s+">[Menu    ] "+Format("W8,AL",Upper(Script[OT]))+" "+Upper(LTrim(RTrim(Opcao)))
                EndIf
           Else s=s+">[Menu    ] "+Format("W8,AL",Upper(Script[OT]))+" "+Upper(LTrim(RTrim(Opcao)))
        EndIf
        s=s+"/"+Upper(LTrim(RTrim(SubStr(Rotina[OT],5,40))))
EndIf

FileWrite Append arqtxt From s+"\n"
Release Vars s,arqtxt,LOG_MES,LOG_ANO,TXT_MES,TXT_ANO

If Not IsBlank(op)
   Then If Search("FINALIZADO",op)>0
           Then Return
        EndIf
EndIf

;**** LOGNET *******************************************************************
CoEdit NoWindow "\\Sistemas\\Cadastro\\LogNet"
While True
  Moveto [Chapa]
  Locate SYS_CHAPA_USUARIO, SYS_NCONEXAO
  If RetVal
     Then QuitLoop
     Else End Down
          [Chapa   ]=SYS_CHAPA_USUARIO
          [NConexao]=SYS_NCONEXAO
          LockRecord
          If RetVal
             Then [Nome   ]=SYS_NOME_USUARIO
                  [Estacao]=SYS_ESTACAO
                  [Login  ]=SYS_LOGIN
                  [Data   ]=Today()
                  [Hora   ]=Time()
                  QuitLoop
             Else MENSAGEM("Registro em uso por "+Upper(ErrorUser())+" !")
          EndIf
  EndIf
EndWhile
If Not IsBlank(op)
   Then [Rotina]=op
   Else If IsAssigned(OPCANT) And
           IsAssigned(Opcao)
           Then If OPCANT<>Opcao
                   Then [Rotina  ]=Upper(LTrim(RTrim(OpcANT))+"/"+LTrim(RTrim(Opcao)))
                   Else [Rotina  ]=Upper(LTrim(RTrim(Opcao)))
                EndIf
           Else [Rotina  ]=Upper(LTrim(RTrim(Opcao)))
        EndIf
        [Rotina     ]=[Rotina]+"/"+Upper(LTrim(RTrim(SubStr(Rotina[OT],5,40))))
EndIf
[Data_Rotina]=Today()
[Hora_Rotina]=Time()
UnLockRecord
Do_It!
ClearImage
EndProc   ; (Grava_Log)
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Grava_Log

;************************************
;* Rotina para Atualizar Log        *
;************************************
Proc Atualiza_Log()
CoEdit NoWindow "\\Sistemas\\Cadastro\\LogNet"
Moveto [Chapa]
Locate SYS_CHAPA_USUARIO, SYS_NCONEXAO
If RetVal
   Then [Rotina          ]="MENU"
        [Data_Rotina     ]=Today()
        [Hora_Rotina     ]=Time()
        UnLockRecord
EndIf
Do_It!
ClearImage

If IsFile(PrivDir()+"PES_CAMP.SC")
  Then Play PrivDir()+"PES_CAMP"
EndIf  

EndProc  ; (Atualiza_Log)
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Atualiza_Log

;************************************
;* Rotina para Excluir Log          *
;************************************
Proc Exclui_Log()
CoEdit NoWindow "\\Sistemas\\Cadastro\\LogNet"
Moveto [Chapa]
Locate SYS_CHAPA_USUARIO,SYS_NCONEXAO
If RetVal
   Then Del
EndIf
Do_It!
ClearImage
EndProc  ; (Exclui_Log)
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Exclui_Log

;************************************
;* Rotina para Gravar Log           *
;************************************
Proc Organiza_Log()
Private LOG_MES,LOG_ANO,TXT_MES,TXT_ANO,arqtxt

LOG_MES = Month(Today())
LOG_ANO = Year(Today())
TXT_MES = Ltrim(StrVal(LOG_MES))                                   If Len(TXT_MES)=1 Then TXT_MES = AlinhM(TXT_MES,2) EndIf 
TXT_ANO = SubStr(StrVal(LOG_ANO),3,2) 
arqtxt  = SubStr(Directory(),1,2)+"\\Sistemas\\Cadastro\\rois"+TXT_MES+TXT_ANO+".log"
           
If Not Isfile(arqtxt)
   Then FileWrite arqtxt From "" 
EndIf

EndProc   ; (Organiza_Log)

WriteLib "\\Sistemas\\Cadastro\\BibMenu" Organiza_Log

;************************************
;* Rotina para Tecla de Atalho      *
;************************************
Proc TeclaAtalho(Char)
Private tc, tcok,msg,i
tcok=False

If (Char=-22)
   Then Diretorio[OT]="\\Sistemas\\Cadastro\\"
        TpComando[OT]="S"
        Script[OT]   ="Senha"
        Grava_Log("ATALHO/MUDA USUARIO")
        gravalogsysOk=False
        Return True
EndIf

If (Char=-18)
   Then Diretorio[OT]="\\Sistemas\\Cadastro\\"
        TpComando[OT]="S"
        Script[OT]   ="P_emp"
        Grava_Log("ATALHO/MUDA EMPRESA")
        gravalogsysOk=False
        Return True
EndIf

If (Char=-46)
   Then Diretorio[OT]="\\Sistemas\\Cadastro\\"
        TpComando[OT]="S"
        Script[OT]   ="ContrDia"
        Grava_Log("ATALHO/CRIA CONTROLE")
        gravalogsysOk=False
        Return True
EndIf

If (Char=-104) Then tc="F1"  EndIf
If (Char=-105) Then tc="F2"  EndIf
If (Char=-106) Then tc="F3"  EndIf
If (Char=-107)
   Then Limpa(0,0)
        LimpaRodape(1)
        Aguarde("Finalizando Sistema")
        Sound 700 5
        Sleep 1500

        Exclui_Log()
        Grava_Log("* FINALIZADO SISTEMA")
        gravalogsysOk=False

        Release Vars All
        Release Procs All
        UnPassword "t01avivcl"
        Exit

EndIf
If (Char=-108) Then tc="F5"  EndIf
If (Char=-109) Then tc="F6"  EndIf
If (Char=-110) Then tc="F7"  EndIf
If (Char=-111) Then tc="F8"  EndIf
If (Char=-112) Then tc="F9"  EndIf
If (Char=-113) Then tc="F10" EndIf
If (Char=-139) Then tc="F11" EndIf
If (Char=-140) Then tc="F12" EndIf

sa=""
View NoWindow "\\Sistemas\\Cadastro\\TCAtalho"
Moveto [\Sistemas\Cadastro\TCAtalho->Chapa]
Locate SYS_CHAPA_USUARIO, tc
If RetVal
   Then If ([\Sistemas\Cadastro\TCAtalho->Comando]<>"") And
           ([\Sistemas\Cadastro\TCAtalho->Diretorio]<>"") And
           ([\Sistemas\Cadastro\TCAtalho->Tipo de Comando]="S")
           Then View NoWindow [\Sistemas\Cadastro\TCAtalho->Tabela]
                Moveto [Comando]
                Locate [\Sistemas\Cadastro\TCAtalho->Comando]
                If RetVal
                   Then If ([Tipo de Comando]=[\Sistemas\Cadastro\TCAtalho->Tipo de Comando])
                           Then If (SYS_NIVEL_USUARIO<>"P" And SYS_NIVEL_USUARIO<>"E") Or
                                   (SYS_NIVEL_USUARIO ="P" And [Liberado]="X") Or
                                   (SYS_NIVEL_USUARIO ="E" And [Liberado]="X")
                                   Then tcok=true
                                        Diretorio[OT]=[\Sistemas\Cadastro\TCAtalho->Diretorio]
                                        TpComando[OT]=[\Sistemas\Cadastro\TCAtalho->Tipo de Comando]
                                        Script[OT]   =[\Sistemas\Cadastro\TCAtalho->Comando]

                                        sa=[\Sistemas\Cadastro\TCAtalho->Descricao]
                                EndIf
                        EndIf
                EndIf
                ClearImage
                msg="["+tc+"] n„o confere c/ a rotina -> "+[\Sistemas\Cadastro\TCAtalho->Descricao]+"// //"
                msg=msg+"Verificar ou Reconfigurar a fun‡„o ["+tc+"] Ok !"
                If not tcok
                   then Mensagem(msg)
                EndIf
        EndIf
EndIf

Moveto "\\Sistemas\\Cadastro\\TCAtalho"
ClearImage

If tcok
   Then Grava_Log("ATALHO/"+Upper(sa))
        Release Vars sa
        gravalogsysOk=False
EndIf

Return tcok
EndProc  ; (TeclaAtalho)
WriteLib "\\Sistemas\\Cadastro\\BibMenu" TeclaAtalho

;************************************
;* Rotina para Programa Funcao      *
;************************************
Proc ProgramaFuncao(Char)
Private tc

If (Char=-94)  Then tc="F1"  EndIf
If (Char=-95)  Then tc="F2"  EndIf
If (Char=-96)  Then tc="F3"  EndIf
If (Char=-97)
   Then Return
EndIf
If (Char=-98)  Then tc="F5"  EndIf
If (Char=-99)  Then tc="F6"  EndIf
If (Char=-100) Then tc="F7"  EndIf
If (Char=-101) Then tc="F8"  EndIf
If (Char=-102) Then tc="F9"  EndIf
If (Char=-103) Then tc="F10" EndIf
If (Char=-137) Then tc="F11" EndIf
If (Char=-138) Then tc="F12" EndIf
MSG=tc
Play "\\Sistemas\\Cadastro\\TCSetar"
Monta_Array_Teclas_Atalho()
Rodape_Menu()
EndProc  ; (ProgramaFuncao)
WriteLib "\\Sistemas\\Cadastro\\BibMenu" ProgramaFuncao

;*******************************************************************************
;* ROTINA CONFGERAL DIALOG                                                     *
;*******************************************************************************
Proc Monta_Array_Teclas_Atalho()
If IsAssigned(SYS_TECLA_ATALHO)
   Then Release Vars SYS_TECLA_ATALHO
EndIf
Array SYS_TECLA_ATALHO[12]
For I From 1 To 12
    SYS_TECLA_ATALHO[I]=""
    SYS_TECLA_ATALHO[I]=Completa("F"+StrVal(I),3," ")
EndFor

View NoWindow "\\Sistemas\\Cadastro\\TcAtalho"
Scan For [\Sistemas\Cadastro\TcAtalho->Chapa]=SYS_CHAPA_USUARIO
  SYS_TECLA_ATALHO[NumVal(RTrim(SubStr([\Sistemas\Cadastro\TcAtalho->Tecla],2,2)))]=SYS_TECLA_ATALHO[NumVal(RTrim(SubStr([\Sistemas\Cadastro\TcAtalho->Tecla],2,2)))]+
  " "+Completa([\Sistemas\Cadastro\TcAtalho->Nome do Atalho],9," ")+" "+[\Sistemas\Cadastro\TcAtalho->Descricao]
EndScan
ClearImage
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Monta_Array_Teclas_Atalho

;*******************************************************************************
;* ROTINA MONTA TITULO MENU COM SCRIPT CAREGADO                                *
;*******************************************************************************
Proc MontaTitulo_Menu(s)
Private s

SYS_TITULO_MENU=substr(SYS_TITULO_MENU,1,69)+Upper(s)
ShowPullDown
  SYS_TITULO_MENU : "" : ""
EndMenu
SYS_SCRIPT=S
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" MontaTitulo_Menu


;---------- Rotinas iguais ao Bibliot ------------------------------------------



;****************************************************
;** ROTINA PARA ALINHAMENTO DE VARIAVEL DE MEMORIA **
;****************************************************
Proc AlinhM(VR,TAMAN)
Private LETR,FALT,TAMAN,VR,ZERO
LETR=Len(VR)
FALT=TAMAN-LETR
ZERO=Fill("0",FALT)
NVR=ZERO+VR
Return NVR
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" AlinhM

;****************************************************
;** ROTINA PARA ALINHAMENTO DE VARIAVEL DE MEMORIA **
;****************************************************
Proc Completa(VR,TAMAN,COMPLETA)
Private Vr,Taman,Completa
LETR=Len(VR)
FALT=TAMAN-LETR
If FALT > 0
   Then ZERO=Fill(COMPLETA,FALT)
        NVR=VR + ZERO
   Else NVR = SUBSTR(VR,1,TAMAN)
EndIf
Return NVR
EndProc
WriteLib "\\Sistemas\\Cadastro\\BIBMENU" Completa

;******************************************************
;* Rotina p/ confirmacao Sim/Nao - Janela c/ Mensagem *
;******************************************************
Proc ConfGeral(MSG)
Private MSG

If Not IsAssigned(ConfGeralNao) Then ConfGeralNao="S" EndIf  

tpmsg="Confgeral"
Monta_Mensagem(MSG)
TpSD_ConfGeral="Sim/Nao"
Mouse Show
Sound 700 5
Showdialog "ATEN€ŽO !" Proc "SD_ConfGeral"
   Trigger "OPEN","ARRIVE"
    Key "ENTER","LEFT","RIGHT","S","s","N","n"
     @ Int((25-(NLinhas+6))/2),CIM Height NLinhas+6 width LJM

   @ NumVal(SubStr(Linha_MSg[01],1,2)),Int((LJM-Len(Linha_Msg[01]))/2) ?? SubStr(Linha_Msg[01],3,LJM)
   @ NumVal(SubStr(Linha_MSg[02],1,2)),Int((LJM-Len(Linha_Msg[02]))/2) ?? SubStr(Linha_Msg[02],3,LJM)
   @ NumVal(SubStr(Linha_MSg[03],1,2)),Int((LJM-Len(Linha_Msg[03]))/2) ?? SubStr(Linha_Msg[03],3,LJM)
   @ NumVal(SubStr(Linha_MSg[04],1,2)),Int((LJM-Len(Linha_Msg[04]))/2) ?? SubStr(Linha_Msg[04],3,LJM)
   @ NumVal(SubStr(Linha_MSg[05],1,2)),Int((LJM-Len(Linha_Msg[05]))/2) ?? SubStr(Linha_Msg[05],3,LJM)
   @ NumVal(SubStr(Linha_MSg[06],1,2)),Int((LJM-Len(Linha_Msg[06]))/2) ?? SubStr(Linha_Msg[06],3,LJM)
   @ NumVal(SubStr(Linha_MSg[07],1,2)),Int((LJM-Len(Linha_Msg[07]))/2) ?? SubStr(Linha_Msg[07],3,LJM)
   @ NumVal(SubStr(Linha_MSg[08],1,2)),Int((LJM-Len(Linha_Msg[08]))/2) ?? SubStr(Linha_Msg[08],3,LJM)
   @ NumVal(SubStr(Linha_MSg[09],1,2)),Int((LJM-Len(Linha_Msg[09]))/2) ?? SubStr(Linha_Msg[09],3,LJM)
   @ NumVal(SubStr(Linha_MSg[10],1,2)),Int((LJM-Len(Linha_Msg[10]))/2) ?? SubStr(Linha_Msg[10],3,LJM)
   @ NumVal(SubStr(Linha_MSg[11],1,2)),Int((LJM-Len(Linha_Msg[11]))/2) ?? SubStr(Linha_Msg[11],3,LJM)
   @ NumVal(SubStr(Linha_MSg[12],1,2)),Int((LJM-Len(Linha_Msg[12]))/2) ?? SubStr(Linha_Msg[12],3,LJM)
   @ NumVal(SubStr(Linha_MSg[13],1,2)),Int((LJM-Len(Linha_Msg[13]))/2) ?? SubStr(Linha_Msg[13],3,LJM)
   @ NumVal(SubStr(Linha_MSg[14],1,2)),Int((LJM-Len(Linha_Msg[14]))/2) ?? SubStr(Linha_Msg[14],3,LJM)
   @ NumVal(SubStr(Linha_MSg[15],1,2)),Int((LJM-Len(Linha_Msg[15]))/2) ?? SubStr(Linha_Msg[15],3,LJM)

   PushButton @ NLinhas+2,Int((LJM-26)/2)    width 11 "~S~im"     OK  Default Value "Sim" Tag "YES" To BottonValue
   PushButton @ NLinhas+2,Int((LJM-26)/2)+13 width 11 "~N~„o" CANCEL                      Tag "NO"  To BottonValue

Enddialog
If RetVal
   Then OK="S"
   Else OK="N"
EndIf
LimpaRodape(0)

Release Vars MSG, NLinhas, Linha_Msg, LJM, CIM, COR_MENSAGEM
Style Attribute 31

If OK="S"
   Then Return True
   Else Return False
EndIf

EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" ConfGeral

;*******************************************************************************
;* Rotina Monta Janela de Mensagem                                             *
;*******************************************************************************
Proc Mensagem(MSG)
Private MSG,titmsg

If not IsAssigned(ConfGeralNao) Then ConfGeralNao="S" EndIf  

tpmsg="Mensagem"
Monta_Mensagem(MSG)
Mouse Show
Sound 700 5
If IsAssigned(COR_MENSAGEM)
   Then titmsg="LEMBRETE !"
   Else titmsg="ATEN€ŽO !"
EndIf

Showdialog titmsg Proc "SD_ConfGeral"
   Trigger "OPEN","ARRIVE"
    Key "ALL"
     @ Int((25-(NLinhas+6))/2),CIM Height NLinhas+6 width LJM

   @ NumVal(SubStr(Linha_MSg[01],1,2)),Int((LJM-Len(Linha_Msg[01]))/2) ?? SubStr(Linha_Msg[01],3,LJM)
   @ NumVal(SubStr(Linha_MSg[02],1,2)),Int((LJM-Len(Linha_Msg[02]))/2) ?? SubStr(Linha_Msg[02],3,LJM)
   @ NumVal(SubStr(Linha_MSg[03],1,2)),Int((LJM-Len(Linha_Msg[03]))/2) ?? SubStr(Linha_Msg[03],3,LJM)
   @ NumVal(SubStr(Linha_MSg[04],1,2)),Int((LJM-Len(Linha_Msg[04]))/2) ?? SubStr(Linha_Msg[04],3,LJM)
   @ NumVal(SubStr(Linha_MSg[05],1,2)),Int((LJM-Len(Linha_Msg[05]))/2) ?? SubStr(Linha_Msg[05],3,LJM)
   @ NumVal(SubStr(Linha_MSg[06],1,2)),Int((LJM-Len(Linha_Msg[06]))/2) ?? SubStr(Linha_Msg[06],3,LJM)
   @ NumVal(SubStr(Linha_MSg[07],1,2)),Int((LJM-Len(Linha_Msg[07]))/2) ?? SubStr(Linha_Msg[07],3,LJM)
   @ NumVal(SubStr(Linha_MSg[08],1,2)),Int((LJM-Len(Linha_Msg[08]))/2) ?? SubStr(Linha_Msg[08],3,LJM)
   @ NumVal(SubStr(Linha_MSg[09],1,2)),Int((LJM-Len(Linha_Msg[09]))/2) ?? SubStr(Linha_Msg[09],3,LJM)
   @ NumVal(SubStr(Linha_MSg[10],1,2)),Int((LJM-Len(Linha_Msg[10]))/2) ?? SubStr(Linha_Msg[10],3,LJM)
   @ NumVal(SubStr(Linha_MSg[11],1,2)),Int((LJM-Len(Linha_Msg[11]))/2) ?? SubStr(Linha_Msg[11],3,LJM)
   @ NumVal(SubStr(Linha_MSg[12],1,2)),Int((LJM-Len(Linha_Msg[12]))/2) ?? SubStr(Linha_Msg[12],3,LJM)
   @ NumVal(SubStr(Linha_MSg[13],1,2)),Int((LJM-Len(Linha_Msg[13]))/2) ?? SubStr(Linha_Msg[13],3,LJM)
   @ NumVal(SubStr(Linha_MSg[14],1,2)),Int((LJM-Len(Linha_Msg[14]))/2) ?? SubStr(Linha_Msg[14],3,LJM)
   @ NumVal(SubStr(Linha_MSg[15],1,2)),Int((LJM-Len(Linha_Msg[15]))/2) ?? SubStr(Linha_Msg[15],3,LJM)

   PushButton @ NLinhas+2,Int((LJM-11)/2)    width 11 "~O~k"    OK       Default Value "Ok" Tag "MENS_OK"  To BottonValue

Enddialog
LimpaRodape(0)

Release Vars MSG, NLinhas, Linha_Msg, LJM, CIM, COR_MENSAGEM
Style Attribute 31
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Mensagem

;******************************************************
;* Rotina p/ Montagem Mensagem ou ConfGeral           *
;******************************************************
Proc Monta_Mensagem(MSG)
Private MSG, posinicial, posicaoc, MaiorLinha, nl

Switch
  Case tpmsg="MsgHelp"  : nl=17
  Case tpmsg="Mensagem" : nl=17
  OtherWise             : nl=15
EndSwitch

Array Linha_Msg[nl]
NLinhas=1
posinicial=1
For i From 1 To nl
  posicaoc=SearchFrom("//",MSG,posinicial)
  If posicaoc>0
     Then Linha_Msg[NLinhas]=AlinhM(StrVal(NLinhas),2)+SubStr(MSG,posinicial,posicaoc-posinicial)
          NLinhas=NLinhas+1
          posinicial=posicaoc+2
     Else Linha_Msg[NLinhas]=AlinhM(StrVal(NLinhas),2)+SubStr(MSG,posinicial,Len(MSG))
          For i2 From NLinhas+1 To nl
            Linha_Msg[i2]=AlinhM(StrVal(NLinhas+1),2)+""
          EndFor
          QuitLoop
  EndIf
EndFor

If NLinhas>nl
   Then NLinhas=nl
EndIf   

MSG=Linha_MSG[1]
MaiorLinha=1
For i From 1 To nl
  If Len(Linha_Msg[i])>Len(MSG)
     Then MaiorLinha=i
          MSG=Linha_MSG[i]
  EndIf
EndFor

LJM=Len(Linha_Msg[MaiorLinha])+2
If LJM>78
   Then LJM=74
   Else If LJM < 30
           Then LJM=30
        EndIf
EndIf
CIM=INT((80-LJM)/2)+1

Release Vars posinicial,posicaoc,MaiorLinha,MSG, nl
Endproc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Monta_Mensagem

;*******************************************************************************
;* ROTINA CONFGERAL DIALOG                                                     *
;*******************************************************************************
Proc SD_ConfGeral(Disparo_SDCF,Campo_SDCF,Evento_SDCF,Elemento_SDCF)
Private Disparo_SDCF,Campo_SDCF,Evento_SDCF,
        Elemento_SDCF,Temp,CoresSD_ConfGeral,
        TECLA, MSG_CAMPO
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo_SDCF="OPEN"
   Then 
        Window handle Dialog To Janela_SD_ConfGeral
        If IsAssigned(CoresSD_ConfGeral)
           Then Release Vars CoresSD_ConfGeral
        EndIf
        Dynarray WinArray8[]
        Dynarray CoresSD_ConfGeral[]

        If IsAssigned(COR_MENSAGEM)
           Then CoresSD_ConfGeral[01]=46 ;47
                CoresSD_ConfGeral[05]=47 ;47
                CoresSD_ConfGeral[14]=32 ;32
                CoresSD_ConfGeral[02]=46        
           Else CoresSD_ConfGeral[01]=79
                CoresSD_ConfGeral[05]=79
                CoresSD_ConfGeral[14]=64
                CoresSD_ConfGeral[02]=79
        EndIf
        If tpmsg="MsgHelp" Or
           tpmsg="Mensagem"
           Then WinArray8["CANCLOSE"]=True
           Else WinArray8["CANCLOSE"]=False
        EndIf   
        Window SetColors Janela_SD_ConfGeral     From CoresSD_ConfGeral
        Window SetAttributes JANELA_SD_ConfGeral From WinArray8

        If tpmsg="Confgeral" And ConfGeralNao="N" Then Campo_SDCF="NO" EndIf
        
EndIf
If Disparo_SDCF="CLOSE" Then cancelDialog        EndIf

If Disparo_SDCF="EVENT" And Evento_SDCF["Type"]="KEY" Then
   Temp=False
   Switch
     Case Evento_SDCF["KeyCode"] = 27:
          CancelDialog
     Case Campo_SDCF="MENS_OK" :
         Sound 700 5
     Case Evento_SDCF["KeyCode"] = -75 Or Evento_SDCF["KeyCode"] = -77:
          If Campo_SDCF="NO"
             Then Campo_SDCF="YES"
             Else Campo_SDCF="NO"
          EndIf
     Case Evento_SDCF["KeyCode"] = 13:
          Switch
            Case Campo_SDCF="NO" : CancelDialog
            Case Campo_SDCF="YES": AcceptDialog
          EndSwitch
     Case Evento_SDCF["KeyCode"] = 115 Or Evento_SDCF["KeyCode"] = 83:
          AcceptDialog
     Case Evento_SDCF["KeyCode"] = 110 Or Evento_SDCF["KeyCode"] = 78:
          CancelDialog
   EndSwitch
EndIf

SelectControl Campo_SDCF
Switch
  Case Campo_SDCF="YES"    :  MSG_CAMPO="Confirmar [S]=SIM !"
  Case Campo_SDCF="NO"     :  MSG_CAMPO="  Ignorar [N]=NÇO !"
  Case Campo_SDCF="MENS_OK":  MSG_CAMPO="Pressione a tecla [Esc] p/ continuar !                     "
EndSwitch

If Campo_SDCF="YES" Or Campo_SDCF="NO"
   Then TECLA=" "+Chr(27)+" "+Chr(26)+"/Tab=Seleciona  "
   Else TECLA=" "
EndIf

ExibeRodapeSD(MSG_CAMPO)
ExibeRodape(2,TECLA)

RefreshDialog

Return Temp
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" SD_ConfGeral

;******************************************
;* Rotina exibe string na linha do radape
;******************************************
Proc ExibeRodape(l,s)
Private l,s

If Not IsAssigned(SYS_COR_RODAPE) 
   Then SYS_COR_RODAPE =31 
        SYS_COR_RODAPED=30 
EndIf
Switch
  Case l=1:
    @ 23,0 ?? " "+Completa(s,79," ")
    PaintCanvas Attribute SYS_COR_RODAPED 23,0,23,79
  Case l=2:
    @ 24,0 ?? " "+Completa(s,79," ")
    PaintCanvas Attribute SYS_COR_RODAPE  24,0,24,79
EndSwitch
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" ExibeRodape

;******************************************
;* Rotina exibe string na linha do radape
;******************************************
Proc ExibeRodapeSD(s)
Private s

If Not IsAssigned(SYS_COR_RODAPE) 
   Then SYS_COR_RODAPE =31 
        SYS_COR_RODAPED=30 
EndIf
If Not IsBlank(s)
  Then If s<>"."
          Then If Search("[Esc]",s)=0
                  Then s=s+" [ENTER] "
               EndIf   
          Else s=Fill(" ",80)
       EndIf
EndIf
@ 23,0 ?? Format("W80,AR",s)
PaintCanvas Attribute SYS_COR_RODAPED 23,00,23,79
PaintCanvas Attribute SYS_COR_RODAPE  23,72,23,79
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" ExibeRodapeSD

;******************************************
;* Rotina Limpa rodape                     
;******************************************
Proc LimpaRodape(l)
Private l

If Not IsAssigned(SYS_COR_RODAPE) 
   Then SYS_COR_RODAPE =31        
        SYS_COR_RODAPED=30 
EndIf
Switch
  Case l=0:
    @ 23,0 ?? Fill(" ",80)
    @ 24,0 ?? Fill(" ",80)
    PaintCanvas Attribute SYS_COR_RODAPE 23,0,24,79
  Case l=1:
    @ 23,0 ?? Fill(" ",80)
    PaintCanvas Attribute SYS_COR_RODAPE 23,0,23,79
  Case l=2:
    @ 24,0 ?? Fill(" ",80)
    PaintCanvas Attribute SYS_COR_RODAPE 24,0,24,79
EndSwitch
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" LimpaRodape

;************************************
;* ROTINA PARA MENSAGEM DE AGUARDE  *
;************************************
Proc Aguarde(s)
Private s
ExibeRodape(2,s+"...")
EndProc
WriteLib "\\Sistemas\\Cadastro\\BibMenu" Aguarde     


;*******************************************************************************
;* Checagem de Erros                                                           *
;*******************************************************************************
Proc ErroValid()
Private ERROM,OK,Opcaoc,OK,Opcaoc,msgerro,valor,s,arqtxt,infoerro,ArrayVal,varlorc,
        Tabela,MENSAGEM,TAMANHO,Array_Mensagem,ii,PosI,CONTA_ARRAY

If IMAGETYPE()="None"
   Then Tabela = ""
   Else Tabela = Table()
EndIf
   
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO =""  EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  =""  EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""  EndIf

;**** LOGError.TXT ***************************************************************
ErrorInfo To Infoerro

LOG_MES = Month(Today())
LOG_ANO = Year(Today())
TXT_MES = Ltrim(StrVal(LOG_MES))                                   If Len(TXT_MES)=1 Then TXT_MES = AlinhM(TXT_MES,2) EndIf 
TXT_ANO = SubStr(StrVal(LOG_ANO),3,2) 
arqtxt  = SubStr(Directory(),1,2)+"\\Sistemas\\Cadastro\\lger"+TXT_MES+TXT_ANO+".log"

s=Format("D13",Today())+DELIMITADOR
s=s+Time()+DELIMITADOR
s=s+SYS_CHAPA_USUARIO+DELIMITADOR
s=s+Completa(SubStr(SYS_NOME_USUARIO,1,10),10," ")+DELIMITADOR
s=s+Completa(SubStr(SYS_ESTACAO,1,12),12," ")+DELIMITADOR
s=s+Completa(infoErro["SCRIPT"],30," ")+DELIMITADOR
s=s+StrVal(infoErro["LINE"])+DELIMITADOR
s=s+StrVal(infoErro["POSITION"])+DELIMITADOR
s=s+infoErro["PROC"]+DELIMITADOR
s=s+StrVal(infoErro["CODE"])+DELIMITADOR
s=s+infoErro["USER"]+DELIMITADOR
s=s+infoErro["MESSAGE"]

FileWrite Append arqtxt From s+"\n"

ERRO_MSG = Completa("  Script: ",Infoerro["SCRIPT"],70," ")+"//"+
           Completa("   Linha: ",Infoerro["LINE"],70," ")+"//"+
           Completa(" Posicao: ",Infoerro["POSITION"],70," ")+"//"+
           Completa("  Codigo: ",Infoerro["CODE"],70," ")+"//"+
           Completa(" Usuario: ",Infoerro["USER"],70," ")+"//"+
           Completa("Mensagem: ",Infoerro["MESSAGE"],70," ")+"//"+
           Completa("    Proc: ",Infoerro["PROC"],70," ")
           
Mensagem(ERRO_MSG)

Array ERROM[67]
ERROM[01] = "Drive Despreparado"
ERROM[02] = "Diret¢rio n„o Encontrado"
ERROM[03] = "Tabela em uso por "+ErrorUser()
ERROM[04] = "Bloqueio Completo colocado na Tabela por " +ErrorUser()
ERROM[05] = "Arquivo n„o Encontrado"
ERROM[06] = "Arquivo Corrompido"
ERROM[07] = "Arquivo de Indice Corrompido"
ERROM[08] = "Erro na Vers„o do Objeto"
ERROM[09] = "Registro Bloqueado por " +ErrorUser()
ERROM[10] = "Diret¢rio em Uso por " +ErrorUser()
ERROM[11] = "Diret¢rio Privado de " +ErrorUser()
ERROM[12] = "Acesso negado ao Diret¢rio ao N¡vel do DOS"
ERROM[13] = "Indice Inconsistente com a Ordem de Classifica‡„o"
ERROM[14] = "Acesso MultiUsu rio Negado"
ERROM[15] = "Conflito com Arquivo Paradox.Net"
ERROM[16] = ""
ERROM[17] = ""
ERROM[18] = ""
ERROM[19] = ""
ERROM[20] = "Contexto Inv lido para a Opera‡„o"
ERROM[21] = "Direitos de Senha Insuficientes"
ERROM[22] = "Tabela Protegida Contra Grava‡„o"
ERROM[23] = "Valor de Campo Inv lido "
ERROM[24] = "Biblioteca de Procedure Obsoleta"
ERROM[25] = "Direitos … Imagem Insuficientes"
ERROM[26] = "Contexto Inv lido da PAL"
ERROM[27] = "Opera‡„o n„o Conclu¡da"
ERROM[28] = "Excesso de Procedures Fechadas Agrupadas"
ERROM[29] = "Tabela Remota"
ERROM[30] = "Tipo de Dado n„o Correspondente"
ERROM[31] = "Argumento Fora da Faixa"
ERROM[32] = "Quantidade Incorreta de Argumentos"
ERROM[33] = "Argumento Inv lido"
ERROM[34] = "Vari vel ou Procedure n„o Atribu¡da"
ERROM[35] = "Sele‡„o de Menu Inv lida"
ERROM[36] = ""
ERROM[37] = "Grupo de Express„o Muito Complexa"
ERROM[38] = ""
ERROM[39] = ""
ERROM[40] = "Mem¢ria Insuficiente para Concluir a Opera‡„o"
ERROM[41] = "Espa‡o em Disco Insuficiente para Concluir a Opera‡„o"
ERROM[42] = "Espa‡o na Pilha Insuficiente para Concluir a Opera‡„o"
ERROM[43] = "Impressora Fora de Linha ou Desligada"
ERROM[44] = "Aten‡„o! Sai do Sistema e Resete a M quina"
ERROM[45] = ""
ERROM[46] = ""
ERROM[47] = ""
ERROM[48] = ""
ERROM[49] = ""
ERROM[50] = "Registro Eliminado por "+ErrorUser()
ERROM[51] = "Registro Alterado por "+ErrorUser()
ERROM[52] = "Registro Inserido por "+ErrorUser()
ERROM[53] = "Registro com Essa Chave J  Existente"
ERROM[54] = "Registro ou Tabela n„o estava Bloqueada"
ERROM[55] = "Registro J  Bloqueado por Vocˆ"
ERROM[56] = "Chave de Pesquisa n„o Encontrada"
ERROM[57] = "Registro e Grupo Bloqueado Dependentendo do Bloqueio daquela Tabela"
ERROM[58] = ""
ERROM[59] = ""
ERROM[60] = "Verifica‡„o de Integridade Referencial"
ERROM[61] = "Formul rio MultiTabela Inv lido"
ERROM[62] = "Formul rio Bloqueado"
ERROM[63] = "V¡nculo Bloqueado"
ERROM[64] = "Grupo de Bloqueio Aplicado em Tabelas com Chaves Diferentes"
ERROM[65] = "Grupo de Registros Bloqueados"
ERROM[66] = "Esse Arquivo e Incompat¡vel com Essa Vers„o do PDOX"

DynArray Array_Mensagem[] 
TAMANHO  = 60
MENSAGEM = Rtrim("("+StrVal(Infoerro["CODE"])+") " + Infoerro["MESSAGE"])

ERRO_MSG = Completa("     Run: "+StrVal(Infoerro["LINE"])+"_"+StrVal(Infoerro["POSITION"])+"_"+Infoerro["SCRIPT"],TAMANHO+10," ")+"//"+
           Completa("    User: "+Infoerro["USER"],TAMANHO+10," ")+"//"

PosI = Int(Len(MENSAGEM)/TAMANHO)+1
For ii From 1 To PosI
  Switch
    Case ii=1 : CONTA_ARRAY = ii
    OtherWise : CONTA_ARRAY = (TAMANHO*(ii-1))+1
  EndSwitch
  If SubStr(MENSAGEM,CONTA_ARRAY,TAMANHO)<>""
     Then If ii=1
             Then ERRO_MSG = ERRO_MSG + Completa(" Message: "+SubStr(MENSAGEM,CONTA_ARRAY,TAMANHO),TAMANHO+10," ")+"//"
             Else ERRO_MSG = ERRO_MSG + Completa("          "+SubStr(MENSAGEM,CONTA_ARRAY,TAMANHO),TAMANHO+10," ")+"//"
          EndIf
     Else QuitLoop
  EndIf   
Endfor
ERRO_MSG = ERRO_MSG + Completa("    Proc: "+Infoerro["PROC"],TAMANHO+10," ")+"////"

If ErrorCode()=23
   Then Switch
          Case SubStr(FieldType(),1,1)="A":
            []=""
          Case FieldType()="N" or
               FieldType()="S" or
               FieldType()="$":
            []=BlankNum()
          Case FieldType()="D":
            []=BlankDate()
        EndSwitch
        Mensagem(ERRO_MSG+"("+StrVal(ErrorCode())+") "+ERROM[ErrorCode()]+" p/ Campo="+Field())
        Return 1
EndIf

Mensagem(ERRO_MSG+"("+StrVal(ErrorCode())+") "+ERROM[ErrorCode()])

LimpaRodape(0)
Sound 700 5
ShowPopup " Cancelar a execu‡Æo ? " CENTERED
    "~S~IM": " Cancela a execu‡„o deste programa !"  : "SIM",
    "~N~ÇO": " Continua a execu‡„o deste Programa !" : "NAO"
EndMenu
To Opcaoc

If Opcaoc="SIM"
   Then Do_It!
        ClearAll
        Play "\\Sistemas\\Cadastro\\InfoErro"
        Exit
   Else Return 0
EndIf
EndProc  ; (ErroValid)
WriteLib "\\Sistemas\\Cadastro\\BibMenu" ErroValid



;---------- Rotinas iguais ao Bib_Show -----------------------------------------
