146175Sbostic /*- 250986Sbostic * Copyright (c) 1991 The Regents of the University of California. 346175Sbostic * All rights reserved. 446175Sbostic * 546175Sbostic * This code is derived from software contributed to Berkeley by 646175Sbostic * Margo Seltzer. 746175Sbostic * 850986Sbostic * %sccs.include.redist.c% 946175Sbostic */ 1046175Sbostic 1146175Sbostic #ifndef lint 1246175Sbostic char copyright[] = 1350986Sbostic "@(#) Copyright (c) 1991 The Regents of the University of California.\n\ 1446175Sbostic All rights reserved.\n"; 1546175Sbostic #endif /* not lint */ 1646175Sbostic 1746175Sbostic #ifndef lint 18*51078Sbostic static char sccsid[] = "@(#)thash4.c 5.5 (Berkeley) 09/11/91"; 1946175Sbostic #endif /* not lint */ 2046175Sbostic 2150986Sbostic #include <sys/types.h> 2246175Sbostic #include <sys/file.h> 2346175Sbostic #include <sys/timeb.h> 2450986Sbostic #include <stdio.h> 2546175Sbostic #include <errno.h> 2646175Sbostic #include <db.h> 2746175Sbostic 2846175Sbostic #define INITIAL 25000 2946175Sbostic #define MAXWORDS 25000 /* # of elements in search table */ 3046175Sbostic 3146175Sbostic /* Usage: thash pagesize fillfactor file */ 3250985Sbostic char wp1[8192]; 3346175Sbostic char wp2[8192]; 3446175Sbostic main(argc, argv) 3546175Sbostic char **argv; 3646175Sbostic { 3746175Sbostic DBT item, key, res; 3846175Sbostic DB *dbp; 3946175Sbostic HASHINFO ctl; 4046175Sbostic FILE *fp; 4146175Sbostic int stat; 4246175Sbostic time_t t; 4346175Sbostic 4446175Sbostic int i = 0; 4546175Sbostic 4646175Sbostic argv++; 4746175Sbostic ctl.hash = NULL; 4846175Sbostic ctl.bsize = atoi(*argv++); 4946175Sbostic ctl.ffactor = atoi(*argv++); 5046175Sbostic ctl.nelem = atoi(*argv++); 5147253Sbostic ctl.cachesize = atoi(*argv++); 5246175Sbostic ctl.lorder = 0; 53*51078Sbostic if (!(dbp = dbopen( NULL, O_CREAT|O_RDWR, 0400, DB_HASH, &ctl))) { 5446175Sbostic /* create table */ 5546175Sbostic fprintf(stderr, "cannot create: hash table size %d)\n", 5646175Sbostic INITIAL); 5746175Sbostic fprintf(stderr, "\terrno: %d\n", errno); 5846175Sbostic exit(1); 5946175Sbostic } 6046175Sbostic 6146175Sbostic key.data = wp1; 6246175Sbostic item.data = wp2; 6350985Sbostic while ( fgets(wp1, 8192, stdin) && 6446175Sbostic fgets(wp2, 8192, stdin) && 6546175Sbostic i++ < MAXWORDS) { 6646175Sbostic /* 6746175Sbostic * put info in structure, and structure in the item 6846175Sbostic */ 6946175Sbostic key.size = strlen(wp1); 7046175Sbostic item.size = strlen(wp2); 7146175Sbostic 7246175Sbostic /* 7346175Sbostic * enter key/data pair into the table 7446175Sbostic */ 7546175Sbostic if ((dbp->put)(dbp, &key, &item, R_NOOVERWRITE) != NULL) { 7646175Sbostic fprintf(stderr, "cannot enter: key %s\n", 7746175Sbostic item.data); 7846175Sbostic fprintf(stderr, "\terrno: %d\n", errno); 7946175Sbostic exit(1); 8046175Sbostic } 8146175Sbostic } 8246175Sbostic 8346175Sbostic if ( --argc ) { 8446175Sbostic fp = fopen ( argv[0], "r"); 8546175Sbostic i = 0; 8646175Sbostic while ( fgets(wp1, 256, fp) && 8746175Sbostic fgets(wp2, 8192, fp) && 8846175Sbostic i++ < MAXWORDS) { 8946175Sbostic 9046175Sbostic key.size = strlen(wp1); 9150985Sbostic stat = (dbp->get)(dbp, &key, &res, 0); 9246175Sbostic if (stat < 0 ) { 9346175Sbostic fprintf ( stderr, "Error retrieving %s\n", key.data ); 9446175Sbostic fprintf(stderr, "\terrno: %d\n", errno); 9546175Sbostic exit(1); 9646175Sbostic } else if ( stat > 0 ) { 9746175Sbostic fprintf ( stderr, "%s not found\n", key.data ); 9846175Sbostic fprintf(stderr, "\terrno: %d\n", errno); 9946175Sbostic exit(1); 10046175Sbostic } 10146175Sbostic } 10246175Sbostic fclose(fp); 10346175Sbostic } 10446175Sbostic dbp->close(dbp); 10546175Sbostic exit(0); 10646175Sbostic } 107