void imprimeDiretorio(FILE* bin, int inicioBytes) { Arquivo saida = leStruct(bin, inicioBytes+4); int n = leInt(bin, inicioBytes); printf("#Entradas: %d|\n", n); printf("Nome: %s|\n", saida.nome); printf("Inicio byte: %d|\n", saida.byteInicio); printf("Tamanho: %d|x|\n\n", saida.tamanho); }
//Objetivo: validar numero inteiro //Parametros: referencia ao titulo, min e max //Retorno: numero validado int leValidaInt(char titulo[], int min, int max){ int numero; do{ numero = leInt(titulo); if(numero < min || numero > max){ MSG_ERRO } }while(numero < min || numero > max); return numero; }
// retorna o endereco do bloco da entrada onde deve inserir int insereEntradaPorBloco(int endInicioBloco) { int pos; int NEntradas = leInt(arquivo, endInicioBloco); if (NEntradas > 0) { for (pos = endInicioBloco+4; pos < endInicioBloco + TAM_BLOCO; ) { if (leChar(arquivo, pos) == '\0') { // só decrementa entradas livres do bloco do pai escreveInt(arquivo, NEntradas-1, endInicioBloco, 1); return pos; // ja retorna } else pos += sizeof(Arquivo); } } return 0; }
// retorna endereco do bloco de inicio da entrada ou -1 => pra montar a arvore :) int buscaEnderecoDaEntradaPorBloco(char* entrada, int enderecoBlocoPai, Arquivo* reg) { int numEntradasLivres = leInt(arquivo, enderecoBlocoPai); int pos; int numEntradas = totalArquivo - numEntradasLivres; if (numEntradas > 0) { // começa a busca da entrada depois do inteiro for (pos = enderecoBlocoPai+4; pos < enderecoBlocoPai + TAM_BLOCO; ) { if (leChar(arquivo, pos) == '\0') pos++; else { Arquivo arq = leStruct(arquivo, pos); if (strcmp(entrada, &arq.nome[0]) == 0) { if (reg != NULL) *reg = arq; return arq.byteInicio; } else pos++; } } } return -1; }