From f69cd8c998e4e2fbf28ebb57ae84aced21e80fca Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 27 Mar 2004 05:38:27 +0000 Subject: move to lib --- lib/anbieter.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 lib/anbieter.c (limited to 'lib/anbieter.c') diff --git a/lib/anbieter.c b/lib/anbieter.c new file mode 100644 index 0000000..3a5ce49 --- /dev/null +++ b/lib/anbieter.c @@ -0,0 +1,154 @@ +/* $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_an(AN *, FILE *); /* read header */ +static void rent_an(AN *, FILE *); /* read entries */ +static void resort_an(AN *); + +AN * +tgeb_read_an(char *file) +{ + AN *an; + FILE *fd; + + if (!(fd = fopen(file, "r"))) + err(1, "fopen %s", file); + + if (!(an = malloc(sizeof(AN)))) + err(1, "malloc"); + bzero(an, sizeof(AN)); + + rhdr_an(an, fd); + rent_an(an, fd); + + fclose(fd); + return an; +} + +void +rhdr_an(AN * an, FILE * fd) +{ + int i; + + fread(&an->q, sizeof(an->q), 1, fd); + if (!(an->h = calloc(an->q, sizeof(AN_HDR)))) + err(1, "malloc"); + + fseek(fd, 2, SEEK_SET); + for (i = 0; i < an->q; i++) { + _tgeb_sread(&an->h[i].name, fd); + _tgeb_sread(&an->h[i].mail, fd); + _tgeb_sread(&an->h[i].url, fd); + fread(&an->h[i].off, sizeof(an->h[i].off), 1, fd); + an->h[i].off--; + } + return; +} + +void +rent_an(AN * an, FILE * fd) +{ + int i, j; + + an->e_q = 0; + for (i = 0; i < an->q; i++) { + fseek(fd, an->h[i].off, SEEK_SET); + fread(&an->h[i].q, sizeof(an->h[i].q), 1, fd); + if (!(an->h[i].d = calloc(an->h[i].q, sizeof(AN_D)))) + err(1, "malloc"); + for (j = 0; j < an->h[i].q; j++) { + an->h[i].d[j].h = &an->h[i]; + _tgeb_sread(&an->h[i].d[j].serv, fd); + _tgeb_sread(&an->h[i].d[j].pref, fd); + fread(&an->h[i].d[j].id, + sizeof(an->h[i].d[j].id), 1, fd); + if (an->h[i].d[j].id > an->e_q) + an->e_q = an->h[i].d[j].id; + _tgeb_sread(&an->h[i].d[j].valf, fd); + _tgeb_sread(&an->h[i].d[j].valt, fd); + fread(&an->h[i].d[j].type, + sizeof(an->h[i].d[j].type), 1, fd); + fread(&an->h[i].d[j].mvol, + sizeof(an->h[i].d[j].mvol), 1, fd); + fread(&an->h[i].d[j].bfee, + sizeof(an->h[i].d[j].bfee), 1, fd); + fread(&an->h[i].d[j].afee, + sizeof(an->h[i].d[j].afee), 1, fd); + _tgeb_sread(&an->h[i].d[j].url, fd); + _tgeb_sread(&an->h[i].d[j].url2, fd); + _tgeb_sread(&an->h[i].d[j].phone, fd); + _tgeb_sread(&an->h[i].d[j].mail, fd); + _tgeb_sread(&an->h[i].d[j].x, fd); + fread(&an->h[i].d[j].reg, + sizeof(an->h[i].d[j].reg), 1, fd); + _tgeb_sread(&an->h[i].d[j].rurl, fd); + _tgeb_sread(&an->h[i].d[j].rfax, fd); + } + } + resort_an(an); + return; +} + +void +resort_an(AN * an) +{ + int i, j; + if (!(an->e = calloc(an->e_q, sizeof(AN_D)))) + err(1, "malloc"); + for (i = 0; i < an->q; i++) { + for (j = 0; j < an->h[i].q; j++) { + an->e[an->h[i].d[j].id - 1] = an->h[i].d[j]; + } + } + return; +} + +void +tgeb_free_an(AN * an) +{ + int i, j; + + free(an->e); + for (i = 0; i < an->q; i++) { + for (j = 0; j < an->h[i].q; j++) { + free(an->h[i].d[j].serv); + free(an->h[i].d[j].pref); + free(an->h[i].d[j].valf); + free(an->h[i].d[j].valt); + free(an->h[i].d[j].url); + free(an->h[i].d[j].url2); + free(an->h[i].d[j].phone); + free(an->h[i].d[j].mail); + free(an->h[i].d[j].x); + free(an->h[i].d[j].rurl); + free(an->h[i].d[j].rfax); + } + free(an->h[i].name); + free(an->h[i].mail); + free(an->h[i].url); + free(an->h[i].d); + } + free(an->h); + free(an); + return; +} -- cgit v1.2.3