terça-feira, 9 de abril de 2019


Doações: NOVA CONTA

Contribua depositando $0.50, $1.00, $2.00, $5.00, $10.00, $20.00, $50.00 ou $100.00 na conta:
País: Brasil

Banco: Caixa Econômica Federal (CEF)
Agência: 0014
Conta: 000830215249-6
Tipo de Operação: 013

 Obrigado!

sexta-feira, 1 de março de 2013

/*
Doações: NOVA CONTA

Contribua depositando $0.50, $1.00, $2.00, $5.00, $10.00, $20.00, $50.00 ou $100.00 na conta:
País: Brasil

Banco: Caixa Econômica Federal (CEF)
Agência: 0014
Conta: 000830215249-6
Tipo de Operação: 013

 Obrigado!
*/
//////////////////////////////////////////////////////////////////////////////
///////////////////////// Banco de Dados Gˆnius //////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/*
    Programa: Banco de Dados Gˆnius
    Projeto & Programador: Giuliano Menezes
       
    Data: 25/11/1998 - //
    Fun‡äes:

        Este programa permite criar e alterar Bancos de Dados conforme
    nescidades, assim como a Entrada de Dados e ImpressÆo de relat¢rios.
        Tamb‚m se pode definir dados do tipo f¢rmulas, permitindo o acesso
    ao conte£do de outros campos atrav‚z do r¢tulo dos mesmos, usando em
    expressäes aritim‚ticas ou l¢gica. E fun‡äes que permitem vincular
    dois Banco de Dados.

O sitema de pesquisa em campo(s) com registros ordenado é um variação
da pesquisa binária, chamei de pesquisa binária 3 pontos, no qual faz
verifição simutânio do primeiro, do último e do registro do meio. Almen-
tando a eficiência da pesquisa binária em três vezes. É mais rápido guan-
do o dado inexistente está na ordem inferior ao primeiro registro ou
superior último registro, no qual a rotina de perquisa é iterrompida
imeditamente sem fazer verificações desnecessárias.
*/

//////////////////////// Sistema Editor de Texto /////////////////////////////
//Do EditTxt

/////////////////////////// Sistema de Planilha //////////////////////////////
//Do SistPlan

//////////////////////// Definido Vari veis do Sistema ///////////////////////
//Do VrvlDsc

//////////////////////// Exibindo Cont£do de Vari veis ///////////////////////
//Do ExibCont

/////////////////////// Procdimentos e Fun‡äes Primarios /////////////////////
//Do PFPrimar

//////////////////////// Entrada de Dados por Tabela /////////////////////////
//Do EDTabela

///////////////////// Entrada de Dados por Janela-Di logo ////////////////////
//Do JanlDial

////////////////////////// Navegador de Disco R¡gido /////////////////////////
//Do NavegDR

///////////////////////// Sistema de Bamco de Dados //////////////////////////
//Do SistemBD

///////////////////////// Sistema de Sa¡da de Dados //////////////////////////
//Do SistemSD

///////////////////////////// Interfece de Menu //////////////////////////////
//Do InterMen


/////////////////// Defini‡Æo do Ambiente de Sistema /////////////////////////

//SetCancel( .F.)
Clear TypeAhead
Set Cursor Off
Set ScoreBoard Off
Set Confirm On
Set Century On
Set Date British
ReadInsert(.T.)


/////////////////// Vari veis do Sistema Salvos em Disco /////////////////////

            // Bancos de Dados abertos

ARQ_ATUAL := 0
_NAA := 0
Private ArqCam_m := {}


            // Relat¢rio

NumDispSaid := PortSaid := PortSaid_V := 1
NomArquRlt := ""
ColPapel := 82
LinPapel := 68
ImprPagina := ImprData := ImprNumReg := "L"
MargDireit := MargEsquer := MargSuper := MargInfer := 1
FormContin := .T.
AlinhTitul := "C"

            // Resolu‡äes e Cores tela

ENTR_COR_FUN      := "  W+/G   "
JANE_COR_FUN      := "  W+/BG  "
JanelAvis_Cor     := "  W+/RB  "
SECUN_COR         := "   B/W   "
N_FOC_ENTR_COR    := " GR+/W   "
COR_MENU_ENTR_FOC := "  W+/N   "
PRIM_LET_COR      := "  G+/B   "
ResolAtual := 3


            // Tipos Variados

IDSistema := ""
RegisLicen := Nil
TipoLicen := 8
DiretProgam := GetEnv( "BDG")
DiretOrigem := ""
SisConAce := .F.
CpSCaminho := "A:\"
LargInd := 5

//<-1////////////////// Carregando Vari veis do Disco ////////////////////////

If Empty( DiretProgam)

    DiretProgam = "\"+ CurDir() +"\"
EndIf
If File( DiretProgam +"Sistema.Cnf")

    CarregVar( DiretProgam)
Else

    SalvVar( DiretProgam)
EndIf
/*/
    DiretProgam = "D:\"+ CurDir() +"\"
    ? DiretProgam
    Inkey( 0)
    SalvVar( DiretProgam)
*/
If Right( DiretProgam, 1) # "\"

    DiretProgam += "\"
EndIf

/////////////////////// Configurando Anbiente do Sistema /////////////////////

Private ResolTela := { 25, 33, 43, 50 }
 _PequCInt := .F.
CorOriginal := SetColor()

Private semana[7]
semana[1] :="Dom."
semana[2] :="Seg."
semana[3] :="Ter."
semana[4] :="Quar."
semana[5] :="Quin."
semana[6] :="Sex."
semana[7] :="Sab."

Private DriveOpc[ 15, 1 ]
DriveOpc[ 1, 1 ] := "A:"
DriveOpc[ 2, 1 ] := "B:"
DriveOpc[ 3, 1 ] := "C:"
DriveOpc[ 4, 1 ] := "D:"
DriveOpc[ 5, 1 ] := "E:"
DriveOpc[ 6, 1 ] := "F:"
DriveOpc[ 7, 1 ] := "G:"
DriveOpc[ 8, 1 ] := "H:"
DriveOpc[ 9, 1 ] := "I:"
DriveOpc[ 10, 1 ] := "J:"
DriveOpc[ 11, 1 ] := "K:"
DriveOpc[ 12, 1 ] := "L:"
DriveOpc[ 13, 1 ] := "M:"
DriveOpc[ 14, 1 ] := "N:"
DriveOpc[ 15, 1 ] := "O:"

UsuarSist := ""
NivAcesUs := 0

Private ListaFunc := {}, ;
    Precedenc := {}
AAdd( ListaFunc, {"Somar",    "Somar(",    .F.})
AAdd( ListaFunc, {"Media",    "Media(",    .F.})
AAdd( ListaFunc, {"Vincular", "Vincular(", .F.})
AAdd( ListaFunc, {"Se",       "Se(",       .T.})
AAdd( ListaFunc, {"Absol",    "Abs(",      .T.})
AAdd( ListaFunc, {"Inteiro",  "Int(",      .T.})
AAdd( ListaFunc, {"Logar",    "Log(",      .T.})
AAdd( ListaFunc, {"Expon",    "Exp(",      .T.})
AAdd( ListaFunc, {"RaizQ",    "SqRt(",     .T.})
AAdd( ListaFunc, {"Data",     "Data(",     .T.})
TotFunc := Len( ListaFunc)
AAdd( Precedenc, ".NOT.!")
AAdd( Precedenc, ".OR.")
AAdd( Precedenc, ".AND.")
AAdd( Precedenc, "<=<>=#!=")
AAdd( Precedenc, "+-")
AAdd( Precedenc, "*/%")
AAdd( Precedenc, "**^")
TotPreced := Len( Precedenc)

Private PortaImpr_V := { "LPT1", "LPT2", "LPT3", "COM1", "COM2" }

If RegisLicen = Nil

    RegisLicen = RegistroLU()
EndIf
If Autenticac()

    SalvVar( DiretProgam)
EndIf

///////////////////////////////// Sub-rotinas ////////////////////////////////

    // Janela_dialogo
    Public ContarObjet := 0, ;
        Objetos_MP := {}, ;
        RETORNO_OBJETO := {}, ;
        MenDial := {}, ;
        vNUM_MEN := {}

    // Entrada de Dados por Tabela
    Public FormTab_MP := {}, ;
        _VED

    // Auterar Cursor
    Public INSERT := .T.

////////////////////////// Rotina Principal //////////////////////////////////

Cls
SetMode( ResolTela[ ResolAtual], 80)

DEF_MEN()
UltItemEscol := 1
Do While .T.

    If SisConAce
        AcessSistem()
    EndIf

    Cls
    Escolhas := ExibaMenu( 00,00, UltItemEscol )
    ItemEscol := SubStr( Escolhas, 1, AT( ".", Escolhas ) )
    Escolhas := SubStr( Escolhas, AT( ".", Escolhas ) +1, Len(Escolhas) )
    UltItemEscol := Val(Left( ItemEscol, Len(ItemEscol) -1 ) )
//<-2
    If ItemEscol == "1." .And. If( SisConAce, NivAcesUs >= 1, .T.)

If ARQ_ATUAL = 0
Item_janela( "P", 1, "Nenhum entrada selecionado." )
Item_janela( "P", 4, "CONFIRMA", 13 )
Janela_dialogo( 5,10 , 2 )
Else
Set Default to (ArqCam_m[ ARQ_ATUAL, 1 ])
Do Case
Case !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE" )
Item_janela( "P", 1, "> BANCO DE DADOS INEXISTENTE <" )
Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE" )
Item_janela( "P", 4, "CONFIRMA", 13 )
Janela_dialogo( 5,10 , 4 )

Case !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
Item_janela( "P", 1, "> ARQUIVO DE FORMATAۂO INEXISTENTE <" )
Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
Item_janela( "P", 4, "CONFIRMA", 13 )
Janela_dialogo( 5,10 , 4 )

OtherWise
                Do ENTRADAS
                Opcao1()
EndCase
Set Default to
EndIf
//<-3
    ElseIf ItemEscol == "2." .And. If( SisConAce, NivAcesUs >= 1, .T.)
        Do BANCDADO
        Opcao2()
//<-4
    ElseIf ItemEscol == "3." .And. If( SisConAce, NivAcesUs = 5, .T.)
        ItemEscol := SubStr( Escolhas, 1, AT( ".", Escolhas ) )

If ARQ_ATUAL = 0
Item_janela(    , 1, "Nenhum Banco de Dados Escolhida.")
Item_janela( "P", 4, "CONFIRMADO", 13 )
Janela_dialogo( 10,10 , 2 )

        Else
            Set Default to (ArqCam_m[ ARQ_ATUAL, 1 ])

            If !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE" )
                Item_janela( "P", 1, "> BANCO DE DADOS INEXISTENTE <" )
                Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
                Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE" )
                Item_janela( "P", 1, "Pode cria-los em ARQUIVO\ALTERAR\CAMPOS." )
                Item_janela( "P", 4, "CONFIRMADO", 13 )
                Janela_dialogo( 5,10 , 5 )

            ElseIf !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
                Item_janela( "P", 1, "> ARQUIVO DE FORMATA€ÇO INEXISTENTE <" )
                Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
                Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
                Item_janela( "P", 1, "Pode cria-los em ARQUIVO\ALTERAR\CAMPOS." )
                Item_janela( "P", 4, "CONFIRMADO", 13 )
                Janela_dialogo( 5,10 , 5 )

            Else

                Select 1
                Use (ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE") Alias BDE

                Select 2
                Use (ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM") Alias FRM
                Do REGISTRO
                Opcao3()
            EndIf

        EndIf
//<-5
    ElseIf ItemEscol == "4." .And. If( SisConAce, NivAcesUs >= 4, .T.)
    ItemEscol := SubStr( Escolhas, 1, AT( ".", Escolhas ) )

If ARQ_ATUAL = 0
Item_janela( "P", 1, "Nenhum arquivo selecionado." )
Item_janela( "P", 4, "CONFIRMADO", 13 )
Janela_dialogo( 5,10 , 2 )
Else
Set Default to (ArqCam_m[ ARQ_ATUAL, 1 ])

If !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
Item_janela( "P", 1, "> ARQUIVO DE FORMATAۂO INEXISTENTE <" )
Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
Item_janela( "P", 1, "Pode cria-los em ARQUIVO\ALTERAR\CAMPOS." )
Item_janela( "P", 4, "CONFIRMADO", 13 )
Janela_dialogo( 5,10 , 5 )
Else

Select 1
Use ( ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" ) Alias FRM
                Do FORMENTR
                Opcao4()
EndIf
EndIf
//<-6
    ElseIf ItemEscol == "5." .And. If( SisConAce, NivAcesUs >= 2, .T.)
        ItemEscol := SubStr( Escolhas, 1, AT( ".", Escolhas ) )

If ARQ_ATUAL = 0
Item_janela(    , 1, "Nenhum Banco de Dados Escolhido.")
Item_janela( "P", 4, "CONFIRMAR", 13 )
Janela_dialogo( 10,10 , 2 )
Else
Set Default to (ArqCam_m[ ARQ_ATUAL, 1 ])

If !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE" )
Item_janela( "P", 1, "> BANCO DE DADOS INEXISTENTE <" )
Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE(.FRM)" )
Item_janela( "P", 1, "Pode cria-los em ARQUIVO\ALTERAR\CAMPOS." )
Item_janela( "P", 4, "CONFIRMADO", 13 )
Janela_dialogo( 5,10 , 5 )

ElseIf !File( ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM" )
Item_janela( "P", 1, "> ARQUIVO DE FORMATAۂO INEXISTENTE <" )
Item_janela( "P", 1, "Diret¢rio: "+ ArqCam_m[ ARQ_ATUAL, 1 ] )
Item_janela( "P", 1, "Arquivo: "+ ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE(.FRM)" )
Item_janela( "P", 1, "Pode cria-los em ARQUIVO\ALTERAR\CAMPOS." )
Item_janela( "P", 4, "CONFIRMADO", 13 )
Janela_dialogo( 5,10 , 5 )

Else

Select 1
                Use (ArqCam_m[ ARQ_ATUAL, 2 ] +".BDE") Alias BDE
Set Deleted On

Select 2
                Use (ArqCam_m[ ARQ_ATUAL, 2 ] +".FRM") Alias FRM

                Do RELATORI
                Opcao5()
EndIf

EndIf
//<-7
    ElseIf ItemEscol == "6." .And. If( SisConAce, NivAcesUs = 5, .T.)
        ItemEscol := SubStr( Escolhas, 1, AT( ".", Escolhas ) )
        Do ARQUIVOS
        Opcao6()
//<-8
    ElseIf ItemEscol == "7." .And. If( SisConAce, NivAcesUs >= 4, .T.)
ItemEscol := SubStr( Escolhas, 1, AT( ".", Escolhas ) )
        Do SistConf
        Opcao7()

    ElseIf ItemEscol == "8."
        Setcolor( CorOriginal)
        Cls
        Quit

EndIf
Close All
EndDo


//<-9
Procedure DEF_MEN()

Public MENU :={}

nivel0 := 1
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
    "ENTRADA", ;
    1, ;
    "InclusÆo de registros" )

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
        "BANCO_DE_DADOS", ;
        1, ;
        "" )

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
"REGISTRO", ;
1, ;
"Copia, move, apaga ou ordena registros", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".1.", ;
                "MANUNTEN€ÇO", ;
                1, ;
"", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".2.", ;
"ORDENAR", ;
1, ;
                "Ordena resgitros e otimiza entrada", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".3.", ;
                "DESFAZER", ;
1, ;
                "Desfaz a otimiza‡Æo", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".4.", ;
                "PESQUISA", ;
                1, ;
                "Otimiza‡Æo da pesquisa", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".5.", ;
                "LIXEIRA", ;
1, ;
                "Retira ou recupera registros apagados", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".6.", ;
"RETORNAR", ;
1, ;
"Vai p/ menu anterior", ;
)

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
            "FORMATA€ÇO", ;
1, ;
            "Formata a entrada registros" )
    ItemMenu( AllTrim(Str( nivel0 )) +".1.", ;
                "CAMPOS", ;
1, ;
                "" )
    ItemMenu( AllTrim(Str( nivel0 )) +".2.", ;
                "FàRMULAS", ;
                3, ;
                "" )
    ItemMenu( AllTrim(Str( nivel0 )) +".3.", ;
                "MENU", ;
                2, ;
                "Cria menu apartir banco de dados(BDE)" )
    ItemMenu( AllTrim(Str( nivel0 )) +".4.", ;
                "ACESSO", ;
                1, ;
                "Controle de acesso ao campo" )
    ItemMenu( AllTrim(Str( nivel0 )) +".5.", ;
"RETORNAR", ;
1, ;
                "Vai p/ menu anterior" )

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
"RELATORIO", ;
3, ;
"Listagem e Entrada", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".1.", ;
                "IMPRIMIR", ;
                1, ;
                "", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".2.", ;
                "MALA_DIRETA", ;
                1, ;
                "", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".3.", ;
                "CAMPOS", ;
                2, ;
                "Define quais campos serÆo impressos", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".4.", ;
                "CONFIGURA€ÇO", ;
                2, ;
                "Configura, o dispotivo de saida, papel, etc...", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".5.", ;
"RETORNAR", ;
1, ;
"Vai p/ menu anterior", ;
)

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
            "ARQUIVO", ;
1, ;
            "Manipula Arquivos e Banco de Dado", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".1.", ;
"CRIAR", ;
1, ;
                "", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".2.", ;
"ALTERAR", ;
1, ;
                "", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".3.", ;
                "ABRIR", ;
2, ;
                "", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".4.", ;
                "CàPIA_DE_SEGURAN€A", ;
                3, ;
                "", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".5.", ;
                "TRANSPORTAR", ;
                1, ;
                "", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".6.", ;
"RETORNAR", ;
1, ;
                "Vai p/ menu anterior" )

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
            "SISTEMA", ;
            2, ;
            "Configra‡Æo personalizada e Infor‡äes sobre o programa", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".1.", ;
"COR", ;
1, ;
"Defini‡Æo de cores", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".2.", ;
"TELA", ;
1, ;
"Dimen‡Æo da tela", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".3.", ;
                "DIRETàRIO", ;
                1, ;
                "Define diret¢rio de uso do sistena", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".4.", ;
"DRIVE", ;
                2, ;
"Inclui ou Exclui dirves dipom¡veis", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".5.", ;
                "ACESSO", ;
                1, ;
                "Restringe o acesso usando senha", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".6.", ;
                "AJUDA", ;
                2, ;
                "Listagem na tela fun‡äes de f¢rmulas e teclas", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".7.", ;
                "INFORMA€ÇO", ;
                1, ;
                "Informa‡Æo sobre produtor do programa", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".8.", ;
                "REGISTRO", ;
                2, ;
                "Informa‡Æo sobre registro do programa", ;
)
    ItemMenu( AllTrim(Str( nivel0 )) +".9.", ;
"RETORNAR", ;
                1, ;
"Vai p/ menu anterior", ;
)

nivel0++
ItemMenu( AllTrim(Str( nivel0 )) +".", ;
"SAIR", ;
1, ;
"Terminar a execussao deste programa", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".1.", ;
"SIM", ;
1, ;
"", ;
)
ItemMenu( AllTrim(Str( nivel0 )) +".2.", ;
"NÇO", ;
1, ;
"", ;
)

Return


//<-10
Procedure SistContAces( OpcaoSCA)
    Local Listar

If OpcaoSCA = 1

    NomeRespon := Space( 40)
    SenhaAcesso := SenhAcess2 := Space( 20)
    EntradaFoco := 1
    Listar := .T.
    SenhaValida := .F.
    Altura := 8
    Largura := 42
    LinhaInical := (MaxRow() - Altura) /2
    ColunInical := (MaxCol() - Largura) /2

    TelaFundo := SaveScreen( LinhaInical,ColunInical , ;
        LinhaInical + Altura -1,ColunInical + Largura -1)
    @ LinhaInical,ColunInical , ;
        LinhaInical + Altura -1,ColunInical + Largura -1 Box "         " ;
        Color JANE_COR_FUN
    @ LinhaInical,ColunInical To ;
        LinhaInical + Altura -1,ColunInical + Largura -1 Double ;
        Color JANE_COR_FUN
    @ LinhaInical +1,ColunInical +1 ;
        Say "Nome do respons vel pela seguran‡a:" Color SECUN_COR
    @ LinhaInical +2,ColunInical +1 ;
        Say NomeRespon Color N_FOC_ENTR_COR
    @ LinhaInical +3,ColunInical +1 ;
        Say "N¡vel de acesso: 5" Color SECUN_COR
    @ LinhaInical +4,ColunInical +1  ;
        Say "Senha: " Color SECUN_COR
    @ LinhaInical +4,ColunInical +8 ;
        Say SenhaAcesso Color N_FOC_ENTR_COR
    @ LinhaInical +5,ColunInical +1;
        Say "Confirmar senha: " Color SECUN_COR
    @ LinhaInical +5,ColunInical +18 ;
        Say SenhAcess2  Color N_FOC_ENTR_COR
    @ LinhaInical +6,ColunInical +1;
        Say " COMFIRMAR " Color N_FOC_ENTR_COR
    @ LinhaInical +6,ColunInical +14 ;
        Say " CANSELAR " Color N_FOC_ENTR_COR

    Do While .T.

        If Listar

            If EntradaFoco = 1
                @ LinhaInical +2,ColunInical +1 Say NomeRespon ;
                    Color COR_MENU_ENTR_FOC
                SetPos( LinhaInical +2,ColunInical +1)
                Set Cursor On

            ElseIf EntradaFoco = 2
                @ LinhaInical +4,ColunInical +8 Say Space( Len( SenhaAcesso));
                    Color COR_MENU_ENTR_FOC
                TamanhDigit := Len( RTrim( SenhaAcesso))

                If TamanhDigit > 0
                    @ LinhaInical +4,ColunInical +8 Say Replicate( "*", ;
                        TamanhDigit) Color COR_MENU_ENTR_FOC
                EndIf

                SetPos( LinhaInical +4,ColunInical +8)
                Set Cursor On

            ElseIf EntradaFoco = 3
                @ LinhaInical +5,ColunInical +18 Say Space( Len( SenhAcess2));
                    Color COR_MENU_ENTR_FOC
                TamanhDigit := Len( RTrim( SenhAcess2))

                If TamanhDigit > 0
                    @ LinhaInical +5,ColunInical +18 Say Replicate( "*", ;
                        TamanhDigit) Color COR_MENU_ENTR_FOC
                EndIf

                SetPos( LinhaInical +5,ColunInical +18)
                Set Cursor On
               
            ElseIf EntradaFoco = 4
                Set Cursor Off
                @ LinhaInical +6,ColunInical +1 Say "[COMFIRMAR]" ;
                    Color COR_MENU_ENTR_FOC
       
            ElseIf EntradaFoco = 5
                Set Cursor Off
                @ LinhaInical +6,ColunInical +14 Say "[CANSELAR]" ;
                    Color COR_MENU_ENTR_FOC

            EndIf
       
        EndIf
//<-11////////////////////////////////////////////////////////////////////////
        Tecla := Inkey( 0)
//////////////////////////////////////////////////////////////////////////////
        If Listar

            If EntradaFoco = 1
                @ LinhaInical +2,ColunInical +1 Say NomeRespon ;
                    Color N_FOC_ENTR_COR

            ElseIf EntradaFoco = 2
                @ LinhaInical +4,ColunInical +8 Say Space( Len( SenhaAcesso));
                    Color N_FOC_ENTR_COR
                TamanhDigit := Len( RTrim( SenhaAcesso))

                If TamanhDigit > 0
                    @ LinhaInical +4,ColunInical +8 Say Replicate( "*", ;
                        TamanhDigit) Color N_FOC_ENTR_COR
                EndIf

            ElseIf EntradaFoco = 3
                @ LinhaInical +5,ColunInical +18 Say Space( Len( SenhAcess2));
                    Color N_FOC_ENTR_COR
                TamanhDigit := Len( RTrim( SenhAcess2))

                If TamanhDigit > 0
                    @ LinhaInical +5,ColunInical +18 Say Replicate( "*", ;
                        TamanhDigit) Color N_FOC_ENTR_COR
                EndIf

            ElseIf EntradaFoco = 4
                @ LinhaInical +6,ColunInical +1 Say " COMFIRMAR " ;
                    Color N_FOC_ENTR_COR
       
            ElseIf EntradaFoco = 5
                @ LinhaInical +6,ColunInical +14 Say " CANSELAR " ;
                    Color N_FOC_ENTR_COR

            EndIf
       
        EndIf

        If Tecla = 27
            EntradaFoco := 5

        ElseIf Tecla = 9
            EntradaFoco := 4

        ElseIf Tecla = 5 .Or. Tecla = 19
            Listar := .T.
            EntradaFoco--

            If EntradaFoco < 1
                EntradaFoco := 5
            EndIf

        ElseIf Tecla = 4 .Or. Tecla = 24
            Listar := .T.
            EntradaFoco++

            If EntradaFoco > 5
                EntradaFoco := 1
            EndIf

        EndIf
           
        If EntradaFoco = 1 .And. (Tecla >= 32 .And. Tecla <= 126 .Or. ;
                Tecla = 13 .Or. Tecla = 7 .Or. Tecla = 1 .Or. Tecla = 6 .Or.;
                Tecla = 22)
                // [ ], ... ,[~], [Enter], [Del], [Home], [End] ou [Insert]
            Listar := .T.

            If Tecla <> 13
                KeyBoard Chr( Tecla)
            EndIf

            @ LinhaInical +2,ColunInical +1 Get NomeRespon ;
                Color COR_MENU_ENTR_FOC
Read
            @ LinhaInical +2,ColunInical +1 Say NomeRespon ;
               Color N_FOC_ENTR_COR

            If LastKey() = 13

                If !Empty( NomeRespon)
                    EntradaFoco++
                Else
                    Item_janela( "P", 1, "  - NÆo ‚ permitido nome em branco.")
                    Item_janela( "P", 4, "COMFIRMAR", 13)
                    Janela_dialogo( 05,20 , 2)
                EndIf

            EndIf

ElseIf EntradaFoco = 2 .And. Tecla >= 32 .And. Tecla <= 126
            Listar := .T.
            SenhaAcesso := Space( 20)
            SenhaAcesso := EntradaSenha( LinhaInical +4,ColunInical +8, ;
                Stuff( SenhaAcesso, 1, 1, Chr( Tecla)), 2)

            If SenhaAcesso = Nil
                SenhaAcesso := Space( 20)

            ElseIf Len( RTrim( SenhaAcesso)) < 4
                Item_janela( "P", 1, " <<<<<<<<<< Senha inv lida! >>>>>>>>>>>>> ")
                Item_janela( "P", 1, "")
                Item_janela( "P", 1, "  - Digite a senha maior que 3 caracteres.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 5)

            ElseIf Empty( NomeRespon)
                Item_janela( "P", 1, "  - NÆo ‚ permitido nome em branco.")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 2)

            Else
                EntradaFoco++
                SenhaValida := .T.
            EndIf

ElseIf EntradaFoco = 3 .And. Tecla >= 32 .And. Tecla <= 126
            Listar := .T.
            SenhAcess2 := Space( 20)
            SenhAcess2 := EntradaSenha( LinhaInical +5,ColunInical +18, ;
                Stuff( SenhAcess2, 1, 1, Chr( Tecla)), 2)

            If SenhAcess2 = Nil
                SenhAcess2 := Space( 20)
            Else

                If SenhaAcesso = SenhAcess2
                    EntradaFoco++
                Else
                    Item_janela( "P", 1, "<<< Senha nÆo confirmada! >>>")
                    Item_janela( "P", 1, "")
                    Item_janela( "P", 1, "  - Digite a senha novamente.")
                    Item_janela( "P", 1, "")
                    Item_janela( "P", 4, "COMFIRMAR", 13)
                    Janela_dialogo( 05,20 , 5)
                    EntradaFoco--
                    SenhaValida := .F.
                EndIf

            EndIf

        ElseIf EntradaFoco = 4 .And. (Tecla = 13 .Or. Tecla = 32)

            If SenhaValida
                RestScreen( LinhaInical,ColunInical , ;
                    LinhaInical + Altura -1,ColunInical + Largura -1, ;
                    TelaFundo)
                Exit
            Else
                Item_janela( "P", 1, "<<<<<< Senha inv lida! >>>>>>")
                Item_janela( "P", 1, "")
                Item_janela( "P", 1, "  - Digite a senha novamente.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 5)
                EntradaFoco := 2
            EndIf
       
        ElseIf EntradaFoco = 5 .And. (Tecla = 13 .Or. Tecla = 32)
RestScreen( LinhaInical,ColunInical , ;
LinhaInical + Altura -1,ColunInical + Largura -1, ;
TelaFundo)
Return

EndIf

    EndDo
//<-12
    DriveDest := "A"
    OBJETO_EM_FOCO := 10

    Do While .T.

        Item_janela( "P", 1, " - Um Disco Chave ser  criado para que o")
        Item_janela( "P", 1, "sistema de seguran‡a do programa possa")
        Item_janela( "P", 1, "ser aberto em caso problemas.")
        Item_janela( "P", 1, " - Para maior segran‡a crie um segundo")
        Item_janela( "P", 1, "disco.")
        Item_janela( "P", 1, "")
        Item_janela( "P", 1, "  - Ensira um disco no drive ")
        Item_janela(    , 2, "", DriveDest, 1, "A" )
        Item_janela(    , 1, ":.")
        Item_janela( "P", 4, "COMFIRMAR", 13)
        Item_janela(    , 4, "CANSELAR", 27)
        Janela_dialogo( 5,15 , OBJETO_EM_FOCO)

        If TeclaSJ_p = 13 .Or. TeclaSJ_p = 9

            If OBJETO_EM_FOCO = 2
                DriveDest := RETORNO_OBJETO[2]
                OBJETO_EM_FOCO := 4

            ElseIf RETORNO_OBJETO[TotObjet_p -1] = 13 .Or. TeclaSJ_p = 9

                If FCreate ( DriveDest +":\ChavDisc.IDS", 0) <> -1
                    Close
                    Set Default to (DriveDest +":\")
                    IDSistema2 := IDSistema
                    Save All Like IDSistema2 to ChavDisc.IDS
                    Release All Like IDSistema2
                    Set Default to (DiretProgam)

                    If !File( "Usuario.Dat")
                        Create StructDat
                        Append Blank
                        Replace Field_name With "Senha", ;
                                Field_type With "C", ;
                                Field_len  With 20, ;
                                Field_dec  With 0
                        Append Blank
                        Replace Field_name With "Nome", ;
                                Field_type With "C", ;
                                Field_len  With 40, ;
                                Field_dec  With 0
                        Append Blank
                        Replace Field_name With "NivelAces", ;
                                Field_type With "N", ;
                                Field_len  With 1, ;
                                Field_dec  With 0
                        Close
                        Create Usuario.Dat From StructDat
                        Erase (DiretProgam +"StructDat.DBF")
                        Append Blank
                        Field -> Senha := SenhaAcesso
                        Field -> Nome := NomeRespon
                        Field -> NivelAces := 5
                        Close
                    EndIf
               
                    SisConAce := .T.
                    UsuarSist := NomeRespon
                    NivAcesUs := 5
                    SalvVar( DiretProgam)
                    Set Default to
                    Exit
                Else
                    Item_janela(    , 1, ">>>> Disco NÇO Acess¡vel. <<<<")
                    Item_janela( "P", 4, "COMFIRMAR", 13)
                    Janela_dialogo( 5,15 , 2)
                    OBJETO_EM_FOCO := TotObjet_p -1
                EndIf

            ElseIf RETORNO_OBJETO[TotObjet_p] = 27
                Exit

            EndIf

        ElseIf TeclaSJ_p = 27
            OBJETO_EM_FOCO := TotObjet_p
           
        EndIf

    EndDo
//<-13
ElseIf OpcaoSCA = 2

    Set Default to (DiretProgam)
    Close All
    If !File( "Usuario.Dat")

        Item_janela(    , 1, ">>>> Escolha Criar primeiro. <<<<")
        Item_janela( "P", 4, "COMFIRMAR", 13)
        Janela_dialogo( 5,15 , 2)
        Return
    EndIf
    Use Usuario.Dat
   
    NomeUsuari := Space( 40)
    _NivelAces := 0
    SenhaAcesso := SenhAcess2 := Space( 20)
    EntradaFoco := 1
    Listar := .T.
    Altura := 8
    Largura := 42
    LinhaInical := (MaxRow() - Altura) /2
    ColunInical := (MaxCol() - Largura) /2

    EmtradValid := 0
    CodigoErro := 0
    Private MensagErro := {}
        AAdd( MensagErro, "<<<< NÆo ‚ permitido campo em branco! >>>>")
        AAdd( MensagErro, "<<<< Nome j  existemte! >>>>")
        AAdd( MensagErro, "<<<< N¡vel de acesso inexistente! >>>>")
        AAdd( MensagErro, "<<<< Senha inv lida! >>>>")
        AAdd( MensagErro, "<<<< Senha nÆo confirmada! >>>>")

    TelaFundo := SaveScreen( 00,00 , MaxRow(),MaxCol())

    SaidaTela( MaxRow(),"C", "Cadastramento de us rios do sistema.", SECUN_COR)
    @ LinhaInical,ColunInical , ;
        LinhaInical + Altura -1,ColunInical + Largura -1 Box "         " ;
        Color JANE_COR_FUN
    @ LinhaInical,ColunInical To ;
        LinhaInical + Altura -1,ColunInical + Largura -1 Double ;
        Color JANE_COR_FUN
    @ LinhaInical +1,ColunInical +1 ;
        Say "Nome do usu rio:" Color SECUN_COR
    @ LinhaInical +2,ColunInical +1 ;
        Say NomeUsuari Color N_FOC_ENTR_COR
    @ LinhaInical +3,ColunInical +1 ;
        Say "N¡vel de acesso(0-5): " Color SECUN_COR
    @ LinhaInical +3,ColunInical +23 ;
        Say Transform ( _NivelAces, "9") Color N_FOC_ENTR_COR
    @ LinhaInical +4,ColunInical +1  ;
        Say "Senha: " Color SECUN_COR
    @ LinhaInical +4,ColunInical +8 ;
        Say SenhaAcesso Color N_FOC_ENTR_COR
    @ LinhaInical +5,ColunInical +1;
        Say "Confirmar senha: " Color SECUN_COR
    @ LinhaInical +5,ColunInical +18 ;
        Say SenhAcess2  Color N_FOC_ENTR_COR
    @ LinhaInical +6,ColunInical +1;
        Say " CONFIRMAR " Color N_FOC_ENTR_COR
    @ LinhaInical +6,ColunInical +13;
        Say " CANSELAR " Color N_FOC_ENTR_COR

    Do While .T.

        If Listar

            If EntradaFoco = 1
                @ LinhaInical +2,ColunInical +1 Say NomeUsuari ;
                    Color COR_MENU_ENTR_FOC
                SetPos( LinhaInical +2,ColunInical +1)
                Set Cursor On

            ElseIf EntradaFoco = 2
                @ LinhaInical +3,ColunInical +23 ;
                    Say Transform ( _NivelAces, "9") Color COR_MENU_ENTR_FOC
                SetPos( LinhaInical +3,ColunInical +23)
                Set Cursor On

            ElseIf EntradaFoco = 3
                @ LinhaInical +4,ColunInical +8 Say Space( Len( SenhaAcesso));
                    Color COR_MENU_ENTR_FOC
                TamanhDigit := Len( RTrim( SenhaAcesso))

                If TamanhDigit > 0
                    @ LinhaInical +4,ColunInical +8 Say Replicate( "*", ;
                        TamanhDigit) Color COR_MENU_ENTR_FOC
                EndIf

                SetPos( LinhaInical +4,ColunInical +8)
                Set Cursor On

            ElseIf EntradaFoco = 4
                @ LinhaInical +5,ColunInical +18 Say Space( Len( SenhAcess2));
                    Color COR_MENU_ENTR_FOC
                TamanhDigit := Len( RTrim( SenhAcess2))

                If TamanhDigit > 0
                    @ LinhaInical +5,ColunInical +18 Say Replicate( "*", ;
                        TamanhDigit) Color COR_MENU_ENTR_FOC
                EndIf

                SetPos( LinhaInical +5,ColunInical +18)
                Set Cursor On
               
            ElseIf EntradaFoco = 5
                Set Cursor Off
                @ LinhaInical +6,ColunInical +1 Say "[CONFIRMAR]" ;
                    Color COR_MENU_ENTR_FOC

            ElseIf EntradaFoco = 6
                Set Cursor Off
                @ LinhaInical +6,ColunInical +13 Say "[CANSELAR]" ;
                    Color COR_MENU_ENTR_FOC

            EndIf
       
        EndIf
//<-14////////////////////////////////////////////////////////////////////////
        Tecla := Inkey( 0)
//////////////////////////////////////////////////////////////////////////////
        If Listar

            If EntradaFoco = 1
                @ LinhaInical +2,ColunInical +1 Say NomeUsuari ;
                    Color N_FOC_ENTR_COR

            ElseIf EntradaFoco = 2
                @ LinhaInical +3,ColunInical +23 ;
                    Say Transform ( _NivelAces, "9") Color N_FOC_ENTR_COR

            ElseIf EntradaFoco = 3
                @ LinhaInical +4,ColunInical +8 Say Space( Len( SenhaAcesso));
                    Color N_FOC_ENTR_COR
                TamanhDigit := Len( RTrim( SenhaAcesso))

                If TamanhDigit > 0
                    @ LinhaInical +4,ColunInical +8 Say Replicate( "*", ;
                        TamanhDigit) Color N_FOC_ENTR_COR
                EndIf

            ElseIf EntradaFoco = 4
                @ LinhaInical +5,ColunInical +18 Say Space( Len( SenhAcess2));
                    Color N_FOC_ENTR_COR
                TamanhDigit := Len( RTrim( SenhAcess2))

                If TamanhDigit > 0
                    @ LinhaInical +5,ColunInical +18 Say Replicate( "*", ;
                        TamanhDigit) Color N_FOC_ENTR_COR
                EndIf

            ElseIf EntradaFoco = 5
                @ LinhaInical +6,ColunInical +1 Say " CONFIRMAR " ;
                    Color N_FOC_ENTR_COR

            ElseIf EntradaFoco = 6
                @ LinhaInical +6,ColunInical +13 Say " CANSELAR " ;
                    Color N_FOC_ENTR_COR
            EndIf
       
        EndIf
        If Tecla = 13

            If SenhaAcesso = SenhAcess2

                Append Blank
                Field -> Senha := SenhAcess2
                Field -> Nome := NomeUsuari
                Field -> NivelAces := _NivelAces
                CodigoErro := 0
                Exit          
            Else

                CodigoErro := 5
                Item_janela( "P", 1, MensagErro[ CodigoErro ])
                Item_janela( "P", 1, "")
                Item_janela( "P", 1, "  - Digite a senha novamente.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 5)
                EntradaFoco = 3
            EndIf
        ElseIf Tecla = 27

            Exit
        ElseIf Tecla = 5 .Or. Tecla = 19
            Listar := .T.
            EntradaFoco--

            If EntradaFoco < 1
                EntradaFoco := 6
            EndIf

        ElseIf Tecla = 4 .Or. Tecla = 24
            Listar := .T.
            EntradaFoco++

            If EntradaFoco > 6
                EntradaFoco := 1
            EndIf

        EndIf
        If EntradaFoco = 1 .And. (Tecla >= 32 .And. Tecla <= 126 .Or. ;
                Tecla = 13 .Or. Tecla = 7 .Or. Tecla = 1 .Or. Tecla = 6 .Or.;
                Tecla = 22)
                // [ ], ... ,[~], [Enter], [Del], [Home], [End] ou [Insert]

                           
            CodigoErro := EmtradValid := 0
            Listar := .T.

            If Tecla <> 13
                KeyBoard Chr( Tecla)
            EndIf

            @ LinhaInical +2,ColunInical +1 Get NomeUsuari ;
                Color COR_MENU_ENTR_FOC
            Read
            @ LinhaInical +2,ColunInical +1 Say NomeUsuari ;
                Color N_FOC_ENTR_COR

            If LastKey() = 13

                If Empty( NomeUsuari)
                    CodigoErro := 1
                    Item_janela( "P", 1, MensagErro[ CodigoErro ])
                    Item_janela( "P", 4, "COMFIRMAR", 13)
                    Janela_dialogo( 05,20 , 2)
                Else
                    Locate For Nome == NomeUsuari

                    If Found()
                        CodigoErro := 2
                        Item_janela( "P", 1, MensagErro[ CodigoErro ])
                        Item_janela( "P", 4, "COMFIRMAR", 13)
                        Janela_dialogo( 05,20 , 2)
                    Else
                        EmtradValid++
                        EntradaFoco++
                    EndIf
                   
                EndIf

            EndIf

        ElseIf EntradaFoco = 2 .And. (Tecla >= 32 .And. Tecla <= 126 .Or. ;
                Tecla = 13)
               
            If CodigoErro > 0 .And. CodigoErro <> 3
                Item_janela( "P", 1, MensagErro[ CodigoErro ])
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 2)
            Else
                Listar := .T.

                If Tecla <> 13
                    KeyBoard Chr( Tecla)
                EndIf

                @ LinhaInical +3,ColunInical +23 Get _NivelAces Picture "9";
                    Color COR_MENU_ENTR_FOC
                Read
                @ LinhaInical +3,ColunInical +23 Say _NivelAces Picture "9";
                    Color N_FOC_ENTR_COR

                If LastKey() = 13

                    If _NivelAces < 0 .Or. _NivelAces > 5
                        CodigoErro := 3
                        Item_janela( "P", 1, MensagErro[ CodigoErro ])
                        Item_janela( "P", 1, "N¡vel v lidos:")
                        Item_janela( "P", 1, "        0 - Suspenso")
                        Item_janela( "P", 1, "        1 - Pesquisa e Listagem")
                        Item_janela( "P", 1, "        2 - Relat¢rio")
                        Item_janela( "P", 1, "        3 - InclusÆo dados")
                        Item_janela( "P", 1, "        4 - Configura‡Æo")
                        Item_janela( "P", 1, "        5 - Carta-Branca")
                        Item_janela( "P", 4, "COMFIRMAR", 13)
                        Janela_dialogo( 05,20 , 9)
                    Else
                        CodigoErro := 0
                        EmtradValid++
                        EntradaFoco++
                    EndIf

                EndIf
           
            EndIf

        ElseIf EntradaFoco = 3 .And. Tecla >= 32 .And. Tecla <= 126
       
            If CodigoErro > 0 .And. CodigoErro <> 4 .And. CodigoErro <> 5
                Item_janela( "P", 1, MensagErro[ CodigoErro ])
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 2)
            Else
Listar := .T.
SenhaAcesso := Space( 20)
SenhaAcesso := EntradaSenha( LinhaInical +4,ColunInical +8, ;
Stuff( SenhaAcesso, 1, 1, Chr( Tecla)), 2)

If SenhaAcesso = Nil
SenhaAcesso := Space( 20)

ElseIf Len( RTrim( SenhaAcesso)) < 4
EntradaFoco := 4
Item_janela( "P", 1, MensagErro[ EntradaFoco ])
Item_janela( "P", 1, "")
Item_janela( "P", 1, "  - Digite a senha maior que 3 caracteres.")
Item_janela( "P", 1, "")
Item_janela( "P", 4, "COMFIRMAR", 13)
Janela_dialogo( 05,20 , 5)

Else
CodigoErro := 0
EmtradValid++
EntradaFoco++
EndIf
           
            EndIf

        ElseIf EntradaFoco = 4 .And. Tecla >= 32 .And. Tecla <= 126

            If EmtradValid < 3
                CodigoErro := 1
                Item_janela( "P", 1, MensagErro[ CodigoErro ])
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 2)

            ElseIf CodigoErro <> 5 .And. CodigoErro <> 0
                Item_janela( "P", 1, MensagErro[ CodigoErro ])
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 2)

            Else          
                Listar := .T.
                SenhAcess2 := Space( 20)
                SenhAcess2 := EntradaSenha( LinhaInical +5,ColunInical +18, ;
                    Stuff( SenhAcess2, 1, 1, Chr( Tecla)), 2)

                If SenhAcess2 = Nil
                    SenhAcess2 := Space( 20)
                Else

                    If SenhaAcesso # SenhAcess2

                        CodigoErro := 5
                        Item_janela( "P", 1, MensagErro[ CodigoErro ])
                        Item_janela( "P", 1, "")
                        Item_janela( "P", 1, "  - Digite a senha novamente.")
                        Item_janela( "P", 1, "")
                        Item_janela( "P", 4, "COMFIRMAR", 13)
                        Janela_dialogo( 05,20 , 5)
                        EntradaFoco--
                    EndIf
                EndIf
            EndIf
        ElseIf EntradaFoco = 5 .And. (Tecla = 13 .Or. Tecla = 32)

            If SenhaAcesso = SenhAcess2

                Append Blank
                Field -> Senha := SenhAcess2
                Field -> Nome := NomeUsuari
                Field -> NivelAces := _NivelAces
                CodigoErro := 0
                Exit          
            Else

                CodigoErro := 5
                Item_janela( "P", 1, MensagErro[ CodigoErro ])
                Item_janela( "P", 1, "")
                Item_janela( "P", 1, "  - Digite a senha novamente.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 5)
                EntradaFoco = 3
            EndIf
        ElseIf EntradaFoco = 6 .And. (Tecla = 13 .Or. Tecla = 32)

            Exit
EndIf

    EndDo
    Close Usuario
    Set Default to
    RestScreen( 00,00 , MaxRow(),MaxCol(), TelaFundo)

//<-15
ElseIf OpcaoSCA = 3

    Set Default to (DiretProgam)
    Close All
    If !File( "Usuario.Dat")

        Item_janela(    , 1, ">>>> Escolha Criar primeiro. <<<<")
        Item_janela( "P", 4, "COMFIRMAR", 13)
        Janela_dialogo( 5,15 , 2)
        OBJETO_EM_FOCO := 2
        Return
    EndIf
    Use Usuario.Dat
   
Private ContTab_M := {}, ;
ContInicCel_M, ;
Mascara_M, ;
        EntrCond_M, ;
ValidDados_M, ;
FormTab_M := {}

AAdd( FormTab_M, { ;
        40, ;
        "Nome", ;
        Space( 40), ;
"E", ;
"", ;
        ".F.", ;
".T.", ;
0, {""}, "", "", "", "" } )

AAdd( FormTab_M, { ;
        11, ;
        "Nivel", ;
        '0', ;
        "C", ;
        "9", ;
".T.", ;
        "_VED >= 0 .And. _VED <= 5", ;
        7, ;
        { "Os n¡veis v lidos sÆo: ", ;
          "         0 - Suspenso", ;
          "         1 - Pesquisa e Listagem", ;
          "         2 - Relat¢rio", ;
          "         3 - InclusÆo de dados", ;
          "         4 - Configura‡Æo", ;
          "         5 - Respons vel"}, ;
 JanelAvis_Cor, SECUN_COR, N_FOC_ENTR_COR, COR_MENU_ENTR_FOC } )

AAdd( FormTab_M, { ;
        8, ;
        "Excluir?", ;
        "N", ;
"C", ;
" !", ;
".T.", ;
        '_VED$"SsNn"', ;
2, ;
        { "As op‡äes v lidas sÆo: ", ;
          "      S - Sim e N - NÆo" }, ;
 JanelAvis_Cor, SECUN_COR, N_FOC_ENTR_COR, COR_MENU_ENTR_FOC } )

    Go Top
Do While !EOF()

        AAdd( ContTab_M, {Nome, NivelAces, "N"} )
Skip
EndDo
    If Len( ContTab_M) > 0

        Tabela( 04,01 , MaxRow() -2,MaxCol() -1, .F. )
    Else

        Item_janela(    , 1, ">>>> Nenhum Us rio cadastrado. <<<<")
        Item_janela( "P", 4, "COMFIRMAR", 13)
        Janela_dialogo( 5,15 , 2)
        Return
    EndIf  
If TeclaSJ_p = 9

        NumLinhMatr := Len( ContTab_M)
        Go Top
        For D1 = 1 to NumLinhMatr

            Field -> NivelAces := ContTab_M[ D1,  2 ]
            If ContTab_M[ D1,  3 ]$"Ss"

                Delete
            EndIf
Skip
Next
        Pack
EndIf
    If LastRec() = 0

        DriveDest := "A"
        OBJETO_EM_FOCO := 3

        Do While .T.

            Item_janela(    , 2, "  - Ensira o disco-chave no drive ", ;
                DriveDest, 1, "A" )
            Item_janela(    , 1, ":.")
            Item_janela( "P", 4, "DESFAZER", 13)
            Item_janela(    , 4, "CANSELAR", 27)
            Janela_dialogo( 5,15 , OBJETO_EM_FOCO)

            If TeclaSJ_p = 13 .Or. TeclaSJ_p = 9

                If OBJETO_EM_FOCO = 2
                    DriveDest := RETORNO_OBJETO[2]
                    OBJETO_EM_FOCO := 4

                ElseIf RETORNO_OBJETO[TotObjet_p -1] = 13 .Or. TeclaSJ_p = 9
                    Set Default to (DriveDest +":\")

                    If File( DriveDest +":\ChavDisc.IDS")
                        Restore From (DriveDest +":\ChavDisc.IDS") AddItive

                        If IDSistema2 == IDSistema
                            Erase (DiretProgam +"Usuario.Dat")
                            IDSistema := DToC( Date()) + Str( Seconds())
                            SisConAce := .F.
                            SalvVar( DiretProgam)
                        Else
                            Item_janela(    , 1, ">>>> Disco-chace inv lido! <<<<")
                            Item_janela( "P", 4, "CONFIRMAR", 13)
                            Janela_dialogo( 5,15 , 2)
                            OBJETO_EM_FOCO := TotObjet_p -1
                        EndIf

                        Release All Like IDSistema2
                        Exit
                    EndIf

                ElseIf RETORNO_OBJETO[TotObjet_p] = 27
                    Exit

                EndIf

            ElseIf TeclaSJ_p = 27
                OBJETO_EM_FOCO := TotObjet_p
           
            EndIf
        EndDo
    EndIf

    Close Usuario
    Set Default to
//<-16
ElseIf OpcaoSCA = 4
    EditarTxt( 03,00 , MaxRow() -1,MaxCol() , DiretProgam, DiretProgam, ;
        "Relatori.Ace", ENTR_COR_FUN +","+ JANE_COR_FUN +","+ SECUN_COR +;
        ","+ N_FOC_ENTR_COR +","+ COR_MENU_ENTR_FOC)

//<-17
ElseIf OpcaoSCA = 5
    DriveDest := "A"
    OBJETO_EM_FOCO := 3

    Do While .T.

        Item_janela(    , 2, "  - Ensira o disco-chave no drive ", ;
            DriveDest, 1, "A" )
        Item_janela(    , 1, ":.")
        Item_janela( "P", 4, "DESFAZER", 13)
        Item_janela(    , 4, "CANSELAR", 27)
        Janela_dialogo( 5,15 , OBJETO_EM_FOCO)

        If TeclaSJ_p = 13 .Or. TeclaSJ_p = 9

            If OBJETO_EM_FOCO = 2
                DriveDest := RETORNO_OBJETO[2]
                OBJETO_EM_FOCO := 4

            ElseIf RETORNO_OBJETO[TotObjet_p -1] = 13 .Or. TeclaSJ_p = 9
                Set Default to (DriveDest +":\")

                If File( DriveDest +":\ChavDisc.IDS")
                    Restore From (DriveDest +":\ChavDisc.IDS") AddItive

                    If IDSistema2 == IDSistema
                        Erase (DiretProgam +"Usuario.Dat")
                        IDSistema := DToC( Date()) + Str( Seconds())
                        SisConAce := .F.
                        SalvVar( DiretProgam)
                    Else
                        Item_janela(    , 1, ">>>> Disco-chace inv lido! <<<<")
                        Item_janela( "P", 4, "CONFIRMAR", 13)
                        Janela_dialogo( 5,15 , 2)
                        OBJETO_EM_FOCO := TotObjet_p -1
                    EndIf

                    Release All Like IDSistema2
                    Exit
                EndIf

            ElseIf RETORNO_OBJETO[TotObjet_p] = 27
                Exit

            EndIf

        ElseIf TeclaSJ_p = 27
            OBJETO_EM_FOCO := TotObjet_p
           
        EndIf
    EndDo
EndIf

Return


//<-18
Procedure AcessSistem()

If NivAcesUs = 0
    Set Default to (DiretProgam)
    Close All
    Use Usuario.Dat

    NomeUsuar := Space( 40)
    SenhaAcesso := Space( 20)
    EntradaFoco := 1
    Listar := .T.
    Altura := 6
    Largura := 42
    LinhaInical := (MaxRow() - Altura) /2
    ColunInical := (MaxCol() - Largura) /2

    TelaFundo := SaveScreen( LinhaInical,ColunInical , ;
        LinhaInical + Altura -1,ColunInical + Largura -1)
    @ LinhaInical,ColunInical , ;
        LinhaInical + Altura -1,ColunInical + Largura -1 Box "         " ;
        Color JANE_COR_FUN
    @ LinhaInical,ColunInical To ;
        LinhaInical + Altura -1,ColunInical + Largura -1 Double ;
        Color JANE_COR_FUN
    @ LinhaInical +1,ColunInical +1 ;
        Say "Nome do usu rio:" Color SECUN_COR
    @ LinhaInical +2,ColunInical +1 ;
        Say NomeUsuar Color N_FOC_ENTR_COR
    @ LinhaInical +3,ColunInical +1  ;
        Say "Senha: " Color SECUN_COR
    @ LinhaInical +3,ColunInical +8 ;
        Say SenhaAcesso Color N_FOC_ENTR_COR
    @ LinhaInical +4,ColunInical +1;
        Say " SAIR " Color N_FOC_ENTR_COR
    @ LinhaInical +4,ColunInical +9;
        Say " ABRIR " Color N_FOC_ENTR_COR

    Do While .T.

        If EntradaFoco = 1
            @ LinhaInical +2,ColunInical +1 Say NomeUsuar ;
                Color COR_MENU_ENTR_FOC
            SetPos( LinhaInical +2,ColunInical +1)
            Set Cursor On

        ElseIf EntradaFoco = 2
            @ LinhaInical +3,ColunInical +8 Say Space( Len( SenhaAcesso));
                Color COR_MENU_ENTR_FOC
            TamanhDigit := Len( RTrim( SenhaAcesso))

            If TamanhDigit > 0
                @ LinhaInical +3,ColunInical +8 Say Replicate( "*", ;
                    TamanhDigit) Color COR_MENU_ENTR_FOC
            EndIf

            SetPos( LinhaInical +3,ColunInical +8)
            Set Cursor On

        ElseIf EntradaFoco = 3
            Set Cursor Off
            @ LinhaInical +4,ColunInical +1;
                Say "[SAIR]" Color COR_MENU_ENTR_FOC

        ElseIf EntradaFoco = 4
            Set Cursor Off
            @ LinhaInical +4,ColunInical +9;
                Say "[ABRIR]" Color COR_MENU_ENTR_FOC

        EndIf
//<-19////////////////////////////////////////////////////////////////////////
        Tecla := Inkey( 0)
//////////////////////////////////////////////////////////////////////////////
        If EntradaFoco = 1
            @ LinhaInical +2,ColunInical +1 Say NomeUsuar ;
                Color N_FOC_ENTR_COR

        ElseIf EntradaFoco = 2
            @ LinhaInical +3,ColunInical +8 Say Space( Len( SenhaAcesso));
                Color N_FOC_ENTR_COR
            TamanhDigit := Len( RTrim( SenhaAcesso))

            If TamanhDigit > 0
                @ LinhaInical +3,ColunInical +8 Say Replicate( "*", ;
                    TamanhDigit) Color N_FOC_ENTR_COR
            EndIf

        ElseIf EntradaFoco = 3
            @ LinhaInical +4,ColunInical +1;
                Say " SAIR " Color N_FOC_ENTR_COR

        ElseIf EntradaFoco = 4
            @ LinhaInical +4,ColunInical +9;
                Say " ABRIR " Color N_FOC_ENTR_COR
           
        EndIf

        If Tecla = 27
            Exit

        ElseIf Tecla = 5 .Or. Tecla = 19
            EntradaFoco--

            If EntradaFoco < 1
                EntradaFoco := 4
            EndIf

        ElseIf Tecla = 4 .Or. Tecla = 24
            EntradaFoco++

            If EntradaFoco > 4
                EntradaFoco := 1
            EndIf

        EndIf
           
        If EntradaFoco = 1 .And. (Tecla >= 32 .And. Tecla <= 126 .Or. ;
                Tecla = 13 .Or. Tecla = 7 .Or. Tecla = 1 .Or. Tecla = 6 .Or.;
                Tecla = 22)
                // [ ], ... ,[~], [Enter], [Del], [Home], [End] ou [Insert]

            If Tecla <> 13
                KeyBoard Chr( Tecla)
            EndIf

            @ LinhaInical +2,ColunInical +1 Get NomeUsuar ;
                Color COR_MENU_ENTR_FOC
            Read
            @ LinhaInical +2,ColunInical +1 Say NomeUsuar ;
               Color N_FOC_ENTR_COR

            If Empty( NomeUsuar)
                Item_janela( "P", 1, "  - NÆo ‚ v lido nome em branco.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 3)

            ElseIf LastKey() = 13
                Locate For Nome == NomeUsuar

                If Found()
                    EntradaFoco++
                Else
                    Item_janela( "P", 1, "<<<<<<<<< Usu rio nÆo cadastrado! >>>>>>>>>")
                    Item_janela( "P", 4, "COMFIRMAR", 13)
                    Janela_dialogo( 05,20 , 2)
                EndIf

            EndIf

        ElseIf EntradaFoco = 2 .And. Tecla >= 32 .And. Tecla <= 126
            Listar := .T.
            SenhaAcesso := Space( 20)
            SenhaAcesso := EntradaSenha( LinhaInical +3,ColunInical +8, ;
                Stuff( SenhaAcesso, 1, 1, Chr( Tecla)), 2)

            If SenhaAcesso = Nil
                SenhaAcesso := Space( 20)

            ElseIf Empty( NomeUsuar)
                Item_janela( "P", 1, "  - NÆo ‚ v lido nome em branco.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 3)

            ElseIf Len( RTrim( SenhaAcesso)) < 4
                Item_janela( "P", 1, "<<<<<<<<<<< Senha inv lida! >>>>>>>>>>>>>>")
                Item_janela( "P", 1, "")
                Item_janela( "P", 1, "  - Digite a senha maior que 3 caracteres.")
                Item_janela( "P", 1, "")
                Item_janela( "P", 4, "COMFIRMAR", 13)
                Janela_dialogo( 05,20 , 5)

            Else

                If Senha == SenhaAcesso
                    NivAcesUs := NivelAces
                    UsuarSist := Nome
                    Close Usuario
                    Set Default to
                    RegistAces( DiretProgam, "Relatori.Ace", "A")
                    Return
                Else
                    Item_janela( "P", 1, "<<<<<<<<<< Acesso Negado! >>>>>>>>>>>>>")
                    Item_janela( "P", 4, "COMFIRMAR", 13)
                    Janela_dialogo( 05,20 , 2)
                EndIf

            EndIf

        ElseIf EntradaFoco = 3 .And. (Tecla = 13 .Or. Tecla = 32)
            Exit

        ElseIf EntradaFoco = 4 .And. (Tecla = 13 .Or. Tecla = 32)
            DriveDest := "A"
            OBJETO_EM_FOCO := 3

            Do While .T.

                Item_janela(    , 2, "  - Ensira o disco-chave no drive ", ;
                    DriveDest, 1, "A" )
                Item_janela(    , 1, ":.")
                Item_janela( "P", 4, "ABRIR", 13)
                Item_janela(    , 4, "SAIR", 27)
                Janela_dialogo( 5,15 , OBJETO_EM_FOCO)

                If TeclaSJ_p = 13 .Or. TeclaSJ_p = 9

                    If OBJETO_EM_FOCO = 2
                        DriveDest := RETORNO_OBJETO[2]
                        OBJETO_EM_FOCO := 4

                    ElseIf RETORNO_OBJETO[TotObjet_p -1] = 13 .Or. TeclaSJ_p = 9
                        Set Default to (DriveDest +":\")

                        If File( DriveDest +":\ChavDisc.IDS")
                            Restore From (DriveDest +":\ChavDisc.IDS") AddItive

                            If IDSistema2 == IDSistema
                                UsuarSist := "Carta-Branca"
                                NivAcesUs := 5
                            Else
                                Item_janela(    , 1, ">>>> Disco-chace inv lido! <<<<")
                                Item_janela( "P", 4, "CONFIRMAR", 13)
                                Janela_dialogo( 5,15 , 2)
                                OBJETO_EM_FOCO := TotObjet_p -1
                            EndIf

                            Release All Like IDSistema2
                            Return
                        EndIf

                        Set Default to

                    ElseIf RETORNO_OBJETO[TotObjet_p] = 27
                        Exit

                    EndIf

                ElseIf TeclaSJ_p = 27
                    Exit
           
                EndIf

            EndDo

        EndIf

    EndDo
    Close Usuario
    Set Default to
Else
    Item_janela( "P", 1, "================ Sistema ABERTO por ================")
    Item_janela( "P", 1, "Usu rio: "+ UsuarSist )
    Item_janela( "P", 1, "N¡vel de acesso: "+ LTrim( Str( NivAcesUs)))
    Item_janela( "P", 1, "")
    Item_janela( "P", 4, "COMTINUAR", 13)
    Item_janela(    , 4, "FECHAR", 1)
    Janela_dialogo( 05,20 , 5)

    If RETORNO_OBJETO[TotObjet_p] = 1
        NivAcesUs := 0
        RegistAces( DiretProgam, "Relatori.Ace", "F")
        AcessSistem()
    EndIf

EndIf

Return

//<-20
Procedure RegistAces( DiretTrab, RotuloArqu, AbertFech)

FimLinha := Chr( 13) + Chr( 10)
IdentArqu := FOpen( DiretTrab + RotuloArqu, 1)
CodigoErro := FError()

If CodigoErro = 2
    IdentArqu := FCreate( DiretTrab + RotuloArqu, 0)

ElseIf CodigoErro <> 0
    Item_janela( "P", 1, ;
        "<<<<< Erro do DOS ("+ LTrim( Str( CodigoErro)) +") >>>>>")
    Item_janela( "P", 4, "COMTINUAR", 13)
    Janela_dialogo( 05,20 , 2)
    Return

EndIf

If AbertFech == "A"

    If FSeek( IdentArqu, 0, 2) = 0
        FWrite( IdentArqu, ("Nome - N¡vel"+ FimLinha))
        FWrite( IdentArqu, ("Aberto - Fechado" + FimLinha))
        FWrite( IdentArqu, FimLinha)
    Else
        FSeek( IdentArqu, -1, 2)
    EndIf

    FWrite( IdentArqu, (RTrim( UsuarSist) +" - "+ LTrim( Str( NivAcesUs)) + ;
        FimLinha))
    FWrite( IdentArqu, (DtoC( Date()) +" "+ Time() +" - "+ FimLinha))

ElseIf AbertFech == "F"
    FSeek( IdentArqu, -3, 2)
    FWrite( IdentArqu, (DtoC( Date()) +" "+ Time() + FimLinha))
    FWrite( IdentArqu, FimLinha)

EndIf

FWrite( IdentArqu, Chr( 26))
FClose( IdentArqu)

Return


//<-21
Function RegistroLU()

Private TeclaSaida := 0, ;
    Listar       := .T., ;
    CompnFocad   := 2, ;
    TituloJanela := " Registro de Licen‡a Uso "

Private TamTitJan := Len( TituloJanela)

Private PertencObj := {{"L", 1, "", Nil, Nil}}
AAdd( PertencObj, {"L", 2, "Registro: ", Space( 20), TamTitJan -3})
AAdd( PertencObj, {"L", 1, "", Nil, Nil})
AAdd( PertencObj, {"L", 3, "CONFIRMAR", 13, 0})
AAdd( PertencObj, {   , 3, "CANSELAR", 27, 0})
TotPertObj := Len( PertencObj)

Private Coordenadas[ TotPertObj, 2]
TLinhas := 1
TColunas := TamTitJan + 8
Coordenadas[ 1, 1 ] = TLinhas
Coordenadas[ 1, 2 ] = 1
For D1 = 2 to TotPertObj
       
    If PertencObj[ D1, 1] == "L"

        TLinhas++
        Coordenadas[ D1, 2 ] = 1
    Else
        Coordenadas[ D1, 2 ] = Len( PertencObj[ D1 -1, 3])
        If PertencObj[ D1 -1, 2 ] = 2

            Coordenadas[ D1, 2 ] += PertencObj[ D1 -1, 5]
        ElseIf PertencObj[ D1 -1, 2 ] = 3

            Coordenadas[ D1, 2 ] += PertencObj[ D1 -1, 5] +4
        EndIf
    EndIf
    Coordenadas[ D1, 1 ] = TLinhas
Next

LI := (MaxRow() - TLinhas) /2
CI := (MaxCol() - TColunas) /2
LF := LI + TLinhas +1
CF := CI + TColunas +1

@ LI,CI , LF,CF Box Space( 9) Color JANE_COR_FUN
DispBox( LI,CI , LF,CF , 2, JANE_COR_FUN)
@ LI, CI + (TColunas- TamTitJan) /2 Say TituloJanela Color COR_MENU_ENT_FOC

Do While .T.

    If Listar

        Listar = .F.
        For D1 = 1 to TotPertObj

              If PertencObj[ D1, 2] = 1

                   @ LI + Coordenadas[ D1, 1], CI + Coordenadas[ D1, 2] ;
                        Say PertencObj[ D1, 3] Color SECUN_COR
              ElseIf PertencObj[ D1, 2] = 2

                   @ LI + Coordenadas[ D1, 1], CI + Coordenadas[ D1, 2] ;
                        Say PertencObj[ D1, 3] Color SECUN_COR
                   If D1 = CompnFocad

                        @ LI + Coordenadas[ D1, 1], CI + Coordenadas[ D1, 2] + ;
                            Len( PertencObj[ D1, 3]) ;
                            Say Left( PertencObj[ D1, 4], PertencObj[ D1, 5]) ;
                                Color COR_MENU_ENT_FOC
                   Else
                        @ LI + Coordenadas[ D1, 1], CI + Coordenadas[ D1, 2] + ;
                            Len( PertencObj[ D1, 3]) ;
                            Say Left( PertencObj[ D1, 4], PertencObj[ D1, 5]) ;
                                Color  N_FOC_ENTR_COR
                   EndIf
              ElseIf PertencObj[ D1, 2] = 3

                   If D1 = CompnFocad

                        @ LI + Coordenadas[ D1, 1], CI + Coordenadas[ D1, 2] ;
                              Say "["+ PertencObj[ D1, 3] +"]" ;
                                   Color COR_MENU_ENT_FOC
                   Else

                        @ LI + Coordenadas[ D1, 1], CI + Coordenadas[ D1, 2] ;
                              Say " "+ PertencObj[ D1, 3] +" " ;
                                   Color N_FOC_ENTR_COR
                   EndIf
              EndIf
        Next
    EndIf
    If PertencObj[ CompnFocad, 2] = 2

        SetPos( LI + Coordenadas[ CompnFocad, 1], CI + Coordenadas[ CompnFocad, 2] + ;
            Len( PertencObj[ CompnFocad, 3]))
        Set Cursor On
    ElseIf PertencObj[ CompnFocad, 2] = 3

        SetPos( LI + Coordenadas[ CompnFocad, 1] +1, CI + Coordenadas[ CompnFocad, 2])
        Set Cursor Off
    EndIf

//<-22/////////////////////////////////////////////////////////////////////////
    Tecla := Inkey( 0)
//////////////////////////////////////////////////////////////////////////////
    If PertencObj[ CompnFocad, 2] = 2 .And. ;
            ((Tecla >= 32 .And. Tecla <= 126) .Or. Tecla = 13 .Or. ;
            Tecla = 6 .Or. Tecla = 1 .Or. Tecla = 7 .Or. Tecla = 4)

        Set Cursor On
        If Tecla # 13
       
            Keyboard Chr( Tecla)
        EndIf
        VarivGet := PertencObj[ CompnFocad, 4]
        @ LI + Coordenadas[ CompnFocad, 1], CI + Coordenadas[ CompnFocad, 2] + ;
            Len( PertencObj[ CompnFocad, 3]) ;
            Get VarivGet ;
                Picture "@S"+ LTrim( Str( PertencObj[ CompnFocad, 5])) ;
                Color N_FOC_ENTR_COR
        Read
        PertencObj[ CompnFocad, 4] = VarivGet
        If LastKey() = 13

            Tecla = 4
        EndIf
        Set Cursor Off
    ElseIf PertencObj[ CompnFocad, 2] = 3 .And. (Tecla = 13 .Or. Tecla = 32)

        PertencObj[ CompnFocad, 5] = PertencObj[ CompnFocad, 4]
        Exit
    EndIf
    If Tecla = 4 .Or. Tecla = 24        //[St. p/ Dir.] ou [St. p/ Baix.]

        Listar = .T.
        RolarFoco := CompnFocad
        Do While .T.

            RolarFoco++
            If RolarFoco > TotPertObj

                RolarFoco = 1
            EndIf
            If PertencObj[ RolarFoco, 2 ] # 1 .Or. RolarFoco = CompnFocad

                Exit
            EndIf
        EndDo
        CompnFocad = RolarFoco
    ElseIf Tecla = 5 .Or. Tecla = 19    //[St. p/ Cim.] ou [St. p/ Esqu.]

        Listar = .T.
        RolarFoco := CompnFocad
        Do While .T.

            RolarFoco--
            If RolarFoco < 1

                RolarFoco = TotPertObj
            EndIf
            If PertencObj[ RolarFoco, 2 ] # 1 .Or. RolarFoco = CompnFocad

                Exit
            EndIf
        EndDo
        CompnFocad = RolarFoco
    ElseIf Tecla = 9 .Or. Tecla = 27    //[Tab] ou [Esc]

        TeclaSaida = Tecla
        Exit
    EndIf
EndDo

Return PertencObj[ 2, 4]


//<-23
Function Autenticac()

Private Digito1, Digito2
Private NumerResul := 1
Private TotalCarac := Len( IDSistema)
Private CaracMeio := Int( TotalCarac /2)

If RegisLicen = Nil

    Return .F.
EndIf
_PC1 := 1
_PC2 := TotalCarac
Do While _PC1 <= CaracMeio

    Digito1 = Val( SubStr( IDSistema, _PC1, 1))
    Digito2 = Val( SubStr( IDSistema, _PC2, 1))
    If Digito1 = 0 .And. Digito2 = 0

        NumerResul *= 10
    ElseIf Digito1 <= 1 .Or. Digito2 <= 1

        NumerResul *= Digito1 + Digito2
    Else

        NumerResul += Digito1 ** Digito2
    EndIf
/*/
    ? "CaracMeio <=[", CaracMeio, "]"
    ? "_PC1 <=[", _PC1, "]"
    ? "_PC2 <=[", _PC2, "]"
    ? "Digito1 <=[", Digito1, "]"
    ? "Digito2 <=[", Digito2, "]"
    ? "IDSistema <=[", IDSistema, "]"
    ? "NumerResul <=[", NumerResul, "]"
    ? "--------------------"
    Inkey( 0)
*/
    _PC1++
    _PC2--
EndDo
If Int( TotalCarac /2) # TotalCarac /2

    Digito1 = Val( SubStr( IDSistema, _PC1, 1))
    If Digito1 = 0

        Digito1 = 1
    EndIf
    NumerResul *= Digito1
EndIf
/*/
    MostCont( 1, "IDSistema", IDSistema)
    MostCont( 1, "RegisLicen", RegisLicen)
    MostCont( 1, "NumerResul", NumerResul)
    MostCont( 6, .T.)
*/
If AllTrim( RegisLicen) == AllTrim( Str( NumerResul, 0))

    Return .T.
EndIf

Return .F.
/*
Doações: NOVA CONTA

Contribua depositando $0.50, $1.00, $2.00, $5.00, $10.00, $20.00, $50.00 ou $100.00 na conta:
País: Brasil

Banco: Caixa Econômica Federal (CEF)
Agência: 0014
Conta: 000830215249-6
Tipo de Operação: 013

 Obrigado!
*/