

INSTRUCOES DAS BIBLIOTECAS CRIPTAB, FNCODSTR, FNCRIA, E UTILITARIOS
DBF.EXE E _DBF.EXE

(AS BIBLIOTECAS SAO NECESSARIAS PARA UTILIZACAO DO SISTEMA DE CRIPTOGRAFIA 
DE TABELAS DBF)

S uso o SUMMER, portanto se quiserem testar no 5.2 fiquem  vontade, mas 
no sei dizer se vai precisar de adaptaes.

Aviso: At onde testei, este sistema sempre funcionou bem, e uso h anos sem 
problemas, mas aconselho testarem bem antes de encherem de dados importantes,

E aviso: Funciona rapidinho, mas nao  nenhum exemplo de ligeireza, 
principalmente se o tamanho total do registro for muito grande.


Sistema de criptacao de tabelas.
--------------------------------

Detalhes do Funcionamento:

A tabela criptada possui apenas um campo caractere chamado DADOS com
tamanho definido pelo sistema.

Uma vez que a tabela foi criada, o registro fisico #1 contera' os dados dos
"campos" (virtuais), como tipo e tamanho, e a senha para acessar a tabela.
Jamais delete o registro 1 e nunca perca a senha, ou todos os dados
serao perdidos.
Nunca use ZAP na tabela, pois a estrutura virtual da tabela (registro
1) sera' perdida, e nao so' os dados.

Os campos sao virtuais, portanto, seus conteudos nao sao carregados
automaticamente conforme o ponteiro na tabela. E' preciso carregar os
conteudos para as variaveis auxiliares atraves da funcao _ftov, ou para
qualquer variavel atraves da funcao _get.

Outros comando como select, pack, go bottom, etc, use normalmente.
Index pode ser usado com a funcao _get como chave indice, e, nesse caso,
seek tambem usa-se normalmente.

Ate' onde foi testado index e seek e funcionaram bem.

Porem, recomenda-se usar as tabelas criptadas so' com busca sequencial com
_locate, pois, se a intencao de usar este esquema for esconder absolutamente
tudo, usar indexacao pode revelar algumas informacoes atraves de uma
analise em baixo nivel do arquivo NTX.

As funcoes abaixo foram criadas para manipular a tabela.

------------------------------------------------------------------


*************************
LIB: CRIPTAB
*************************


FUNCAO _CREATE  - Cria a tabela.
Ex.: _create(exprc,senha,mat1,mat2,mat3,mat4)
Exprc = nome da tabela
Senha = Senha de acesso a tabela de 6 a 20 bytes. Espacos sao permitidos
na senha, porem, os espacos no final serao cortados.
Mat 1 a 4 = matriz com nomes dos campo,tipos,tamanho e casas decimais.
CUIDADO! Se existir tabela com mesmo nome, sera' apagada.
Nao aceita campo Memo.



FUNCAO _USE     - abre a tabela - Ex: _use([tabx],[alias],senha,[exclusive])
_use abre a tabela normalmente atraves do comando USE/ALIAS, porem
memoriza a senha usada, para usa-la em todas as outras funcoes de acesso
a tabela, e cria os vetores com o header, evitando que o registro 1 header
tenha que ser lido a cada acesso a tabela.
Ult Param Logico opcional = Abre exclusivo (default=.f.)
Se a senha nao conferir, nao abre e retorna .f..

Os vetores criados tambem podem ser usados na programacao se o programador
necessitar. Sao eles:
Exemplo com alias = [CL]
CMP_CL - Vetor com os nomes dos campos 
TIP_CL - Vetor com os tipos dos campos 
TAM_CL - Vetor com os tamanhos dos campos 
DEC_CL - Vetor com os nrs de casas decimais dos campos 



FUNCAO _GOTOP   - Posiciona no primeiro registro logico da tabela.
Equivalente a um GO TOP normal seguido de SKIP se recno()=1.
pois o registro fisico nr 1  o header virtual.



FUNCAO _GET     - retorna o valor de um campo especifico
Ex.: x=_get([nome]) ou x=_get([cl->nome]) ou mesmo nome=_get([nome]), pois
como os campos sao virtuais, voce pode usar o mesmo nome do campo como
variavel. Porem, recomenda-se usar as variaveis auxiliares criadas por
_ftov().

_get pode ser usado como chave de indice, inclusive com campos combinados.
Ex.: index on _get([campo]) to arquivo
Ex.: index on _get([nome])+dtos(_get([data])) to arquivo
Porem, com uma ressalva:
Se usarmos a tabela na ordem fisica (sem indices) teremos a certeza que o
registro 1 (header virtual) sera' o primeiro.
Mas se a indexarmos, apesar de no registro 1, _get retornar vazio para 
qualquer tipo de campo, nao e' 100% certo que o header sera' o
primeiro da lista.
Em uma indexacao por valor, por exemplo, um valor negativo vira' antes do zero.
Ou ainda em uma eventual ordenacao decrescente, o header ficaria por ultimo.
Isso em nada afeta o funcionamento das funcoes, ja' que todas buscam o
header na memoria, porem, o programador deve ficar atento, pois caso
aconteca de o header ficar pelo meio, um eventual display de tela tipo
dbedit ou um relatorio, podera' exibir um registro vazio.
Mas sao casos atipicos. Normalmente, em qualquer indexacao, o header ficara'
em primeiro.


FUNCAO _REPLACE - Grava o campo : Ex.: _replace([nome],[Fulano de Tal])


FUNCAO _LOCATE  - Localiza o registro conforme a expressao for e while.
Ex.: _locate([exprfor],[exprwhile])
Sempre inicia a busca a partir do registro corrente.
Retorna .f. se nao encontrou.
A expressao passada e' uma expressao normal podendo usar variaveis, funcoes, etc.
Para incluir um campo na expressao, use a funcao _get.
Ex.: _locate([_get("endereco")="RUA BRASIL"])
Se a exprwhile nao for informada, busca ate o fim do arquivo.


FUNCAO _RECCOUNT
Nr de registros ativos.
Ao contrario do reccount() original, _reccount nao considera os
deletados (se set deleted ON) nem o header.


FUNCAO _FIELD
Ex.: _field(5) 
Retorna o nome do campo numero 5



AS VARIAVEIS AUXILIARES E AS FUNCOES _INIVAR, _FTOV E _VTOF
-----------------------------------------------------------

Como a grande maioria dos programadores usa variaveis auxiliares para edicao dos
campos, nunca editando um campo diretamente, a funcao _INIVAR, _FTOV e _VTOF sao
extremamente uteis.

FUNCAO _INIVAR  - Inicia ou zera as variaveis auxiliares dos campos da area atual.

Nome padrao para as variaveis e': 

Vamos tomar como exemplo uma tabela onde: 
alias = [CL]
campo1=[nome] tipo Caractere tamanho 30
campo2=[estrangeiro] tipo logico
campo3=[idade] tipo numerico

A simples execucao de _inivar() vai criar 3 variaveis PUBLICAS (se ja existirem, 
s as torna vazias). So elas:
CL_NOME com 30 espacos
CL_ESTRANGEIRO com falso
CL_IDADE com zero

Deve-se sempre usar nomes curtos para os aliases j que eles tomam uma parte do nome
da variavel, e ainda assim, deve-se ter cuidado com campos cujos nomes sejam diferentes 
somente no final da palavra.

Por exemplo:
alias=[CL]
campo1=[endereco1]
campo2=[endereco2]

As variaveis auxiliares criadas seriam:

CL_ENDERECO1 e CL_ENDERECO2 que daria conflito de nome pois o CLIPPER s considera o 
nome da variavel com 10 bytes, logo, as duas seriam apenas CL_ENDEREC, deixando o 
programador careca cedo.



FUNCAO _FTOV  - Field to Variable
Preenche as variaveis auxiliares de acordo com o registro corrente.
Cria as variaveis como publicas se nao existirem.
Um simples _ftov() e todas as variaveis auxiliares j estao preenchidas com os valores
dos campos do registro corrente, prontas para a rotina de edio.



FUNCAO _VTOF  - Variable to Field
Grava (replace) todas as variaveis auxiliares no registro corrente.
Um simples _vtof() e todas as variaveis auxiliares sao gravadas no registro corrente,
ou seja, o registro corrente  atualizado de acordo com os valores das variaveis
auxiliares.



*************************
LIB: FNCODSTR
*************************


FUNCAO CODSTR
codifica uma string
1o parametro: numerico: 1 ou -1 (cripta ou decripta)
2o parametro: string a ser criptada
3o parametro: senha
Retorna o resultado (string criptada ou decriptada)
Se a senha for vazia ou so' espacos, retorna a string sem alteracoes.

Essa LIB contem apenas esta funcao, portanto, voce pode troc-la pela sua prpria
funo de criptografia, desde que tenha o mesmo nome e parametros.



*************************
LIB: FNCRIA
*************************


FUNCAO CRIA 
Ex.: cria(exprc,mat1,mat2,mat3,mat4) - cria uma tabela DBF normal vazia.
Exprc = nome do arquivo
Mat 1 a 4 = matriz com nomes dos campo,tipos,tamanho e casas decimais.
CUIDADO! Se existir banco com mesmo nome, sera' apagado.



*********************************
OS UTILITARIOS DBF.EXE E _DBF.EXE
*********************************

Estes utilitarios sao apenas um modo mais rapido de manipular as tabelas fora de seus
sistemas. Sao similares aos ja conhecidos Dclip, dBase, dbfviewer, etc, porem, por serem
mais simples, tambem sao de boa utilidade.

Os 2 possuem funcionamento quase iguais sendo DBF para manipulacao de tabelas normais,
e _DBF para tabelas criptadas, e sao totalmente independentes.

Podem trabalhar diretamente da linha de comando com qualquer tabela ou podem trabalhar 
no modo interativo com tabelas cadastradas.

Cadastre, por exemplo, todas as tabelas que voce possui com seus respectivos arquivos de 
indices, e voce pode reindexar todas ao mesmo tempo com uma linha de comando:

dbf /all /i
ou
_dbf /all senha /i


FUNCIONAMENTO DE DBF.EXE
CADASTRO E MANIPULACAO DE TABELAS NORMAIS (NAO CRIPTADAS)
---------------------------------------------------------

DBF usa uma tabela normal (nao criptada) chamada DBFBANKS.DBF para manter o cadastro de 
todas as suas tabelas e respectivos indices.

Foi desenvolvido em 5.2, e portanto, aceita, no cadastro, clausulas FOR para os indices.

Para visualisar ou alterar o cadastro de suas tabelas normais digite: dbf dbfbanks
Se dbfbanks.dbf nao exisitr, ser criada.

DBF possuI um help, mostrado quando a linha de comando contem algum erro.
Digite por exemplo DBF /? e o help abaixo ser mostrado:


------------------------------------------------------------------------------
Modo Interativo:
---------------
Cadastre os bancos, seus respectivos indices e chaves de indexacao no banco
DBFBANKS, usando o dbase ou digitando DBF DBFBANKS, e entao digite DBF.

Modo Direto:
-----------
Digite DBF [nome-do-DBF ou /all] [/tarefa]

Tarefas: (Ou apenas as iniciais)
/Browse       - Visualiza e edita o banco (default).
/Index        - Apaga e recria os indices. *
/Reindex      - Reorganiza os indices existentes. *
/Pack         - Reindexa e remove registros deletados.
/NotFileIndex - Cria os arquivos de indices que nao forem encontrados. *
/Zap          - Zera o banco de dados eliminando todos os registros.
* So' para bancos cadastrados em DBFBANKS

Digite /all em vez do nome do DBF para executar a tarefa em todos
os bancos cadastrados (incompativel com /browse).

Obs.: Tanto no modo direto como no interativo, sempre abre e atualiza
      os indices correspondentes cadastrados em DBFBANKS.DBF.
------------------------------------------------------------------------------



FUNCIONAMENTO DE _DBF.EXE
CADASTRO E MANIPULACAO DE TABELAS CRIPTADAS
---------------------------------------------------------

Este utilitrio  um similar ao dBase para acertos manuais nas tabelas criptadas.

Voce pode manipular suas tabelas criptadas pelo seu sistema usando as funes acima
j explicadas sem necessidade de usar este utilitrio.

Voce s precisar realmente usar este utilitrio para criar a tabela, para alterar a
estrutura da tabela, ou para importar dados de uma tabela normal.

Eventualmente, voce tambem pode usar _DBF para acertos manuais nos dados da tabela.

Assim como no utilitrio DBF explicado acima, se quiser se organizar melhor, voce 
pode manter um cadastro de todas as suas tabelas criptadas. 
_DBF usa uma tabela normal (nao criptada) chamada DBFCRIP.DBF para manter o cadastro de
todas as suas tabelas criptadas e respectivos indices.

Foi desenvolvido em summer, e por isso nao aceita, no cadastro, clausulas FOR para os 
indices.

Para visualisar ou alterar o cadastro de suas tabelas criptadas (que, nao esquea, est 
na tabela normal DBFCRIP) voce pode usar o seu proprio visualisador de DBFs, o dbase, ou 
o proprio DBF (utilitrio explicado acima, sem underline).

Para isso primeiro crie sua tabela DBFCRIP, simplesmente executando _DBF.

Voce ver o help e a tabela DBFCRIP j foi criada.

Se quiser editar a tabela usando o utilitrio DBF, digite DBF DBFCRIP e cadastre
suas tabelas criptadas.

Veja o help de _DBF:

------------------------------------------------------------------------------
Modo Interativo:
Cadastre os bancos, seus respectivos indices e chaves de indexacao no banco
DBFCRIP, usando o dBase, e entao digite _DBF.

Modo Direto:
Digite _DBF [nome-do-DBF] [senha-do-DBF] [/tarefa]

Tarefas: (Ou apenas as iniciais)
/Browse       - Visualiza e edita a tabela (default).
/Index        - Apaga e recria os indices. *
/Reindex      - Reorganiza os indices existentes. *
/Pack         - Reindexa e remove registros deletados.
/NotFileIndex - Cria os arquivos de indices que nao forem encontrados. *
/Zap          - Elimina todos os registros exceto o 1 (Header).
/Modify       - Modifica ou cria a estrutura
/Appendfrom   - Adiciona registros a partir de uma tabela normal.
* So' para bancos cadastrados em DBFCRIP

Digite /all em vez do nome do DBF para executar a tarefa em todos
os bancos cadastrados (incompativel com /browse).

Obs.: Tanto no modo direto como no interativo, sempre abre e atualiza
      os indices correspondentes cadastrados em DBFCRIP.DBF.
------------------------------------------------------------------------------


Portanto, para criar agora sua propria tabela criptada, digite:

_dbf minhatab 123456 /m

Como minhatab.dbf nao existe _dbf pergunta se quer criar, e pronto. 
Crie suas tabelas criptadas.

Depois cadastre as criptadas em DBFCRIP.DBF e as normais em DBFBANKS.DBF se quiser 
organiz-las em um cadastro.

Eu uso DBF /all /i no agendador de tarefas  noite todo dia. So mais de 30 tabelas,
cada uma com de 1 a 5 indices, sendo reorganizadas todo dia, h mais de 10 anos.

Sem contar quando d pau em algum lugar e voce vai l e: dbf tabelapau /i e pronto, 
problema resolvido.


Espero ter ajudado algum atrasado na vida como eu, usando clipper. kkkkkkkkkkkkkkkk



Qualquer duvida estou a disposicao.


Eduardo Pinho
xcaed@yahoo.com.br





