⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp.c

📁 早期freebsd实现
💻 C
字号:
#ifndef lintstatic char sccsid[] = 	"@(#)mp.c	2.1 88/08/15 4.0 RPCSRC Copyr 1988 Sun Micro";#endif/* * Sun RPC is a product of Sun Microsystems, Inc. and is provided for * unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part.  Users * may copy or modify Sun RPC without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. *  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. *  * Sun RPC is provided with no support and without any obligation on the * part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. *  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC * OR ANY PART THEREOF. *  * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. *  * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California  94043 *//* * These routines add hexadecimal functionality to the multiple-precision * library. */#include <stdio.h>#include <mp.h>void mfree();/* * Convert hex digit to binary value */static intxtoi(c)	char c;{	if (c >= '0' && c <= '9') {		return(c - '0');	} else if (c >= 'a' && c <= 'f') {		return(c - 'a' + 10);	} else {		return(-1);	}}/* * Convert hex key to MINT key */MINT *xtom(key)	char *key;{	int digit;	MINT *m = itom(0);	MINT *d;	MINT *sixteen; 	sixteen = itom(16);	for (; *key; key++) {		digit = xtoi(*key);		if (digit < 0) {			return(NULL);		}		d = itom(digit);		mult(m,sixteen,m);		madd(m,d,m);		mfree(d);	}	mfree(sixteen);	return(m);}static charitox(d)	short d;{	d &= 15;	if (d < 10) {		return('0' + d);	} else {		return('a' - 10 + d);	}}/* * Convert MINT key to hex key */char *mtox(key)	MINT *key;{	MINT *m = itom(0);	MINT *zero = itom(0);	short r;	char *p;	char c;	char *s;	char *hex;	int size;#define BASEBITS	(8*sizeof(short) - 1) 	if (key->len >= 0) {		size = key->len;	} else {		size = -key->len;	}	hex = malloc((unsigned) ((size * BASEBITS + 3)) / 4 + 1);	if (hex == NULL) {		return(NULL);	}	move(key,m);	p = hex;	do {		sdiv(m,16,m,&r);		*p++ = itox(r);	} while (mcmp(m,zero) != 0);	mfree(m);	mfree(zero); 	*p = 0;	for (p--, s = hex; s < p; s++, p--) {		c = *p;		*p = *s;		*s = c;	}	return(hex);}/* * Deallocate a multiple precision integer */voidmfree(a)	MINT *a;{	xfree(a);	free((char *)a);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -