示例#1
0
文件: hash.c 项目: shonma29/eotan
hash_t *hash_create(const size_t max,
		unsigned int (*calc)(const void *, const size_t size),
		int (*cmp)(const void *, const void *)) {
	hash_t *h;
	size_t bits = calc_bits(max);
	size_t size;

	bits = (bits < HASH_MIN_BITS)?
			HASH_MIN_BITS:((bits > HASH_MAX_BITS)?
					HASH_MAX_BITS:bits);
	size = primes[bits - HASH_MIN_BITS];
	h = (hash_t*)malloc(sizeof(*h) + size * sizeof(list_t));

	if (h) {
		h->entries = (hash_entry_t*)(malloc(
				max * sizeof(hash_entry_t)));

		if (!(h->entries)) {
			free(h);
			h = NULL;
		}
		else {
			init_list(&(h->spares), h->entries, max);
			h->calc = calc;
			h->cmp = cmp;
			h->size = size;
			h->num = 0;
			h->max = max;
			init_tbl(h->tbl, size);
		}
	}

	return h;
}
示例#2
0
文件: main.c 项目: elbing/apex
void
main(int argc, char *argv[])
{
	char *p, buf[20];

	cmdname = argv[0];
	if (p = getenv("TYPESETTER"))
		typesetter = p;
	while (argc > 1 && argv[1][0] == '-') {
		switch (argv[1][1]) {

		case 'd':
			if (argv[1][2] == '\0') {
				dbg++;
				printf("...\teqn %s\n", version);
			} else {
				lefteq = argv[1][2];
				righteq = argv[1][3];
			}
			break;
		case 's': szstack[0] = gsize = atoi(&argv[1][2]); break;
		case 'p': deltaps = atoi(&argv[1][2]); dps_set = 1; break;
		case 'm': minsize = atoi(&argv[1][2]); break;
		case 'f': strcpy(ftstack[0].name,&argv[1][2]); break;
		case 'e': noeqn++; break;
		case 'T': typesetter = &argv[1][2]; break;
		default:
			fprintf(stderr, "%s: unknown option %s\n", cmdname, argv[1]);
			break;
		}
		argc--;
		argv++;
	}
	settype(typesetter);
	sprintf(buf, "\"%s\"", typesetter);
	install(deftbl, strsave(typesetter), strsave(buf), 0);
	init_tbl();	/* install other keywords in tables */
	curfile = infile;
	pushsrc(File, curfile->fname);
	if (argc <= 1) {
		curfile->fin = stdin;
		curfile->fname = strsave("-");
		getdata();
	} else
		while (argc-- > 1) {
			if (strcmp(*++argv, "-") == 0)
				curfile->fin = stdin;
			else if ((curfile->fin = fopen(*argv, "r")) == NULL)
				ERROR "can't open file %s", *argv FATAL;
			curfile->fname = strsave(*argv);
			getdata();
			if (curfile->fin != stdin)
				fclose(curfile->fin);
		}
	exit(0);
}
示例#3
0
int
eqn(int argc,char **argv) {
	int i, type;

	setfile(argc,argv);
	init_tbl();	/* install keywords in tables */
	while ((type=getline(&in, &insize)) != EOF) {
		eqline = linect;
		if (type == lefteq)
			do_inline();
		else if (*in == '.') {
			char *p;
			printf("%s",in);
			for (p = in + 1; *p == ' ' || *p == '\t'; p++);
			if (!*p || *p != 'E' || p[1] != 'Q') continue;
			for (i=11; i<100; used[i++]=0);
			printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
			printf(".if \\n(.X .nrf 99 \\n(.s\n");
			markline = 0;
			init();
			yyparse();
			if (eqnreg>0) {
				printf(".nr %d \\w'\\*(%d'\n", eqnreg, eqnreg);
				/* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n",	*/
				/*	eqnreg, svargv[ifile], eqline, linect);	*/
				printf(".nr MK %d\n", markline);	/* for -ms macros */
				printf(".if %d>\\n(.v .ne %du\n", eqnht, eqnht);
				printf(".rn %d 10\n", eqnreg);
				if(!noeqn)printf("\\*(10\n");
			}
			printf(".ps \\n(99\n.ft \\n(98\n");
			printf(".EN");
			if (lastchar == EOF) {
				putchar('\n');
				break;
			}
			if (putchar(lastchar) != '\n')
				while (putchar(gtc()) != '\n');
		} else
			printf("%s",in);
	}
	return(0);
}
示例#4
0
文件: hash.c 项目: shonma29/eotan
void hash_clear(hash_t *h) {
	h->num = 0;
	init_list(&(h->spares), h->entries, h->max);
	init_tbl(h->tbl, h->size);
}