inv6.c revision 11a8fa6cb17403e630122ac19b39a323c6e64142
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx/*
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx * Use is subject to license terms.
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx */
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx/* All Rights Reserved */
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx/*
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx * Copyright (c) 1980 Regents of the University of California.
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx * All rights reserved. The Berkeley software License Agreement
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx * specifies the terms and conditions for redistribution.
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx */
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx#pragma ident "%Z%%M% %I% %E% SMI"
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx#include <stdio.h>
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx#include <assert.h>
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhxstatic void putl(long, FILE *);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
0d2f4bc964616a7fec76406480264fcaa2cfbc14ffvoid
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhxwhash(FILE *ft, FILE *fa, FILE *fb, int nhash, int iflong,
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx long *ptotct, int *phused)
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx{
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx char line[100];
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx int hash = 0, hused = 0;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx long totct = 0L;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx int ct = 0;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx long point;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx long opoint = -1;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx int m;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx int k;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx long lp;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx long *hpt;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx int *hfreq = NULL;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hpt = (long *)calloc(nhash+1, sizeof (*hpt));
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx assert(hpt != NULL);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hfreq = (int *)calloc(nhash, sizeof (*hfreq));
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx assert(hfreq != NULL);
0d2f4bc964616a7fec76406480264fcaa2cfbc14ff hpt[0] = 0;
0d2f4bc964616a7fec76406480264fcaa2cfbc14ff lp = 0;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx while (fgets(line, 100, ft)) {
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx totct++;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx sscanf(line, "%d %ld", &k, &point);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx if (hash < k) {
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hused++;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx if (iflong) putl(-1L, fb);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx else putw(-1, fb);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hfreq[hash] = ct;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx while (hash < k) {
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hpt[++hash] = lp;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hfreq[hash] = 0;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx }
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hpt[hash] = lp += iflong ? sizeof (long) : sizeof (int);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx opoint = -1;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx ct = 0;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx }
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx if (point != opoint) {
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx if (iflong)
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx putl(opoint = point, fb);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx else
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx putw((int)(opoint = point), fb);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx lp += iflong ? sizeof (long) : sizeof (int);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx ct++;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx }
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx }
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx if (iflong) putl(-1L, fb);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx else putw(-1, fb);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx while (hash < nhash)
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx hpt[++hash] = lp;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx fwrite(&nhash, sizeof (nhash), 1, fa);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx fwrite(&iflong, sizeof (iflong), 1, fa);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx fwrite(hpt, sizeof (*hpt), nhash, fa);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx fwrite(hfreq, sizeof (*hfreq), nhash, fa);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx *ptotct = totct;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx *phused = hused;
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx}
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhxstatic void
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhxputl(long ll, FILE *f)
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx{
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx putw(ll, f);
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx}
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhxlong
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhxgetl(FILE *f)
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx{
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx return (getw(f));
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx}
516fc7f3e48e25d0375ea3f93ead33ec38bc597bhx