Dados gerais

Interface: CfgManager
Arquivos: cfgmanager.h
Última atualização: 01/06/2003
Autor: Luiz Henrique Shigunov
Informações

Descrição
Funções para o sistema

0x00 - CloseGroup - Fecha um grupo
0x01 - EnumGroup - Enumera os grupos
0x02 - EnumKey - Enumera as chaves
0x03 - GetValue - Obtém o valor de uma chave

0x04 - OpenGroup - Abre um grupo
0x05 - OpenGroupIndex - Abre um grupo
0x06 - SetSystemFile - Define o arquivo que deve ser usado para o grupo /system

Descrição

Esta página descreve a interface CfgManager que trata do acesso às configurações do sistema, centralizando e padronizando esse acesso.

As configurações do sistema são armazenadas em chaves e essas chaves são organizadas em grupos. Cada chave tem um valor associado a ela que pode ser lido em vários formatos diferentes (string, número hexadecimal, etc).

Para que o valor de uma chave possa ser lido, o grupo onde a chave se encontra tem que ser aberto com a função OpenGroup, o valor lido com GetValue e depois o grupo deve ser fechado com CloseGroup.

Um grupo é localizado através de seu caminho que é formado assim: /arquivo/interface ou módulo/grupo. Por exemplo: /system/SysModManager/modules ou /system/SysModManager/modules/sysmodmanager.

Funções para o sistema

Estas funções são de uso exclusivo dos módulos do sistema.

0x00 - CloseGroup

Sintaxe

int CfgManager_CloseGroup(CfgManager_Group *group);

Propriedades

Descrição

Esta função fecha o grupo group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.

Grupos devem ficar abertos somente pelo tempo necessário.

Valor de retorno

0x01 - EnumGroup

Sintaxe

int CfgManager_EnumGroup(CfgManager_Group *group, unsigned int index, char *name, unsigned int *nameSize);

Propriedades

Descrição

Esta função enumera os grupos de group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.

index é o índice do grupo a ser obtido e deve ser 0 para a primeira vez que a função for chamada e incrementado nas chamadas seguintes. Os grupos podem ser retornados em qualquer ordem.

name é a área de memória que vai receber o nome do grupo, incluindo o caracter de finalização 0. Somente o nome do grupo é copiado e não todo o caminho.

Ao chamar a função, nameSize deve ter o tamanho da área de memória apontada por name e no retorno terá a quantidade de caracteres escritos em name, não incluindo o caracter de finalização 0.

Valor de retorno

0x02 - EnumKey

Sintaxe

int CfgManager_EnumKey(CfgManager_Group *group, unsigned int index, char *name, unsigned int *nameSize);

Propriedades

Descrição

Esta função enumera as chaves do grupo group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.

index é o índice da chave a ser obtida e deve ser 0 para a primeira vez que a função for chamada e incrementado nas chamadas seguintes. As chaves podem ser retornadas em qualquer ordem.

name é a área de memória que vai receber o nome da chave, incluindo o caracter de finalização 0. Somente o nome da chave é copiado e não todo o caminho.

Ao chamar a função, nameSize deve ter o tamanho da área de memória apontada por name e no retorno terá a quantidade de caracteres escritos em name, não incluindo o caracter de finalização 0.

Valor de retorno

0x03 - GetValue

Sintaxe

int CfgManager_GetValue(CfgManager_Group *group, const char *key, int type, void *buf, unsigned int *bufSize);

Propriedades

Descrição

Esta função obtém o valor da chave key do grupo group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.

type diz o tipo de dado a ser lido e pode ser:

buf é a área de memória que vai receber o valor da chave.

Ao chamar a função, bufSize deve ter o tamanho da área de memória apontada por buf e no retorno terá a quantidade de bytes escritos em buf.

Valor de retorno

0x04 - OpenGroup

Sintaxe

CfgManager_Group *CfgManager_OpenGroup(CfgManager_Group *base, const char *path);

Propriedades

Descrição

Esta função abre o grupo path usando base, que deve ter sido aberto com OpenGroup ou OpenGroupIndex, como base. Se base for NULL, a raiz será usada.

path é sensível à letras maiúscula e minúscula, os nomes só podem ter letras (a-z, A-Z), números (0-9) ou sublinhado (_) e é estruturado da seguinte forma: /arquivo/interface ou módulo/grupo. Por exemplo: /system/SysModManager/modules ou apenas modules se base for usado.

Todo arquivo de configuração fica no diretório /system/config/.

A idéia por trás do uso de uma base é que um módulo pode abrir por exemplo /system/SysModManager/modules e depois abrir outros grupos a partir dessa base. Isso torna o processo de abertura dos grupos mais rápido, já que menos caminho precisa ser analisado e procurado.

Valor de retorno

0x05 - OpenGroupIndex

Sintaxe

CfgManager_Group *CfgManager_OpenGroupIndex(CfgManager_Group *base, unsigned int index);

Propriedades

Descrição

Esta função abre o grupo index usando base, que deve ter sido aberto com OpenGroup ou OpenGroupIndex, como base. Se base for NULL, a raiz será usada.

index é o índice do grupo a ser aberto e deve ser 0 para a primeira vez que a função for chamada e incrementado nas chamadas seguintes. Os grupos podem ser abertos em qualquer ordem.

Esta função simplifica e acelera a abertura dos grupos. Sem esta função, EnumGroup e depois OpenGroup teriam que ser usadas.

Valor de retorno

0x06 - SetSystemFile

Sintaxe

int CfgManager_SetSystemFile(void *file, unsigned int size);

Propriedades

Descrição

Esta função define o arquivo que deve ser usado para o grupo /system que contém as configurações do sistema. Esse grupo deve estar disponível logo no início do processo de iniciação.

file é onde os dados do arquivo estão e size é a quantidade de dados do arquivo.

Os dados em file devem ser copiados para outra área de memória para poderem ser usados.

Valor de retorno