예제 #1
0
/**
 * Selecciona un conjunto de campos de un fichero DBF
 */
void seleccionar(FICHERODBF *ficheroDBF, char **camposArray, int numCamposArray) {
    CABEC_DBF5 *cabecera = _pmalloc(CABEC_DBF5, 1);
    TABLA_LOCALIZ *tablaLocaliz = ficheroDBF->tablaLocaliz;
    FILA_LOCALIZ *campoActualDBF = NULL;
    char *bufferSalida = _pmalloc(char, 40);
    char *campoActualArray = NULL;
    int numCamposDBF  = tablaLocaliz->numCampos;
    int numFilasDBF = cabecera->numRegistros;
    int *arrDesplazam = _pmalloc(int, numCamposArray);
    int *arrLongit = _pmalloc(int, numCamposArray);
    int i, j;
    
    int desplazActual = cabecera->bytePrimerRegistro + 1;
    int longRegistro = cabecera->numBytesRegistro;
    
    numFilasDBF = 5;
    /* printf("Desplazamiento inicial: %i\n", desplazActual); */
    /*memset(arrDesplazam, 0, longArrNum);
    memset(arrLongit, 0, longArrNum);*/
    
    /* Localiza las posiciones de los campos que hay que buscar */
    for(i = 0; i < numCamposArray; i++) {
        campoActualArray = camposArray[i];
        
        for(j = 0; j < numCamposDBF; j++) {
            campoActualDBF = tablaLocaliz->filas + j;
            
            if(!strcmp(campoActualDBF->nombre, campoActualArray)) {
                arrDesplazam[i] = campoActualDBF->direcRel;
                arrLongit[i] = campoActualDBF->longitud;
            }
        }
    }
    
    /* Selecciona los campos que quiere buscar el usuario */
    for(i = 0; i < numFilasDBF; i++) {
        for(j = 0; j < numCamposArray; j++) {
            memcpy(bufferSalida, ficheroDBF->fichero->content + desplazActual + 
                    arrDesplazam[j], arrLongit[j]);
            *(bufferSalida + arrLongit[j]) = 0x00;
            printf("%s\t", bufferSalida);
        }
        
        printf("\n");
        desplazActual += longRegistro;
    }
    
    pfree(bufferSalida);
}
예제 #2
0
파일: isort.c 프로젝트: Distrotech/cdrkit
sort_info *sort_alloc(long size)
{
	sort_info	*ret = _pcalloc(1, sizeof (sort_info));

	ret->vector = NULL;
	ret->sortbegin = -1;
	ret->size = -1;
	ret->maxsize = size;

	ret->head = _pcalloc(65536, sizeof (sort_link *));
	ret->bucketusage = _pmalloc(65536 * sizeof (long));
	ret->revindex = _pcalloc(size, sizeof (sort_link));
	ret->lastbucket = 0;

	return (ret);
}
예제 #3
0
/**
 * Carga de un dbf en memoria y las estructuras necesarias
 * para gestionarlo
 */
FICHERODBF *abrirDBF(char *ruta) {
    FICHERODBF *ficheroDBF = _pmalloc(FICHERODBF, 1);
    char tipoDBF = 0x00;
    
    ficheroDBF->fichero = BF_open(ruta, READING);
    tipoDBF = *(ficheroDBF->fichero->content);
    
    /* Carga la cabecera en función del tipo de DBF */
    switch(tipoDBF) {
        case 0x03:
            ficheroDBF->cabecera = (unsigned char *) malloc(sizeof(CABEC_DBF5));
            memcpy(ficheroDBF->cabecera, ficheroDBF->fichero->content, sizeof(CABEC_DBF5));
            ficheroDBF->tablaLocaliz = componerTablaLocaliz(ficheroDBF);
            break;
            
        default:
            printf("[Error] Archivo DBF no reconocido (%x)\n", tipoDBF);
            BF_close(ficheroDBF->fichero);
            pfree(ficheroDBF);
            break;
    }
	
	return ficheroDBF;
}