/* $Id$ */ /* * Copyright (c) 2004 demon * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include static void rhdr_au(AU *, FILE *); /* read header */ static void rent_au(AU *, FILE *); /* read entries */ AU * tgeb_read_au(char *file) { AU *au; FILE *fd; if (!(fd = fopen(file, "r"))) err(1, "fopen %s", file); if (!(au = malloc(sizeof(AU)))) err(1, "malloc"); bzero(au, sizeof(AU)); rhdr_au(au, fd); rent_au(au, fd); fclose(fd); return au; } void rhdr_au(AU * au, FILE * fd) { fread(&au->l, sizeof(au->l), 1, fd); fread(&au->q, sizeof(au->q), 1, fd); return; } void rent_au(AU * au, FILE * fd) { int i, j; if (!(au->d = calloc(au->l, sizeof(AU_D)))) err(1, "malloc"); if (!(au->max = calloc(au->q, sizeof(unsigned short)))) err(1, "malloc"); fseek(fd, 4, SEEK_SET); for (i = 0; i < au->l; i++) { au->d[i].id = calloc(au->q, sizeof(unsigned short)); for (j = 0; j < au->q; j++) { fread(&au->d[i].id[j], sizeof(au->d[i].id[j]), 1, fd); if (au->d[i].id[j] > au->max[j]) au->max[j] = au->d[i].id[j]; } } for (i = 0; i < au->l; i++) { _tgeb_sread(&au->d[i].land, fd); _tgeb_sread(&au->d[i].dial, fd); } return; } void tgeb_free_au(AU * au) { int i; for (i = 0; i < au->l; i++) { free(au->d[i].id); free(au->d[i].land); free(au->d[i].dial); } free(au->d); free(au->max); free(au); return; }