[BACK]Return to mi.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

File: [local] / OpenXM_contrib2 / asir2000 / engine / mi.c (download)

Revision 1.1.1.1 (vendor branch), Fri Dec 3 07:39:08 1999 UTC (24 years, 5 months ago) by noro
Branch: NORO
CVS Tags: RELEASE_20000124, RELEASE_1_1_2, ASIR2000
Changes since 1.1: +0 -0 lines

Imported asir2000 as OpenXM_contrib2/asir2000.

/* $OpenXM: OpenXM_contrib2/asir2000/engine/mi.c,v 1.1.1.1 1999/12/03 07:39:08 noro Exp $ */
#include "ca.h"

extern int current_mod;

void addmi(a,b,c)
MQ a,b;
MQ *c;
{
	if ( !current_mod )
		error("addmi : invalid modulus");
	if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
		error("addmi : invalid argument");
	addmq(current_mod,a,b,c);
}

void submi(a,b,c)
MQ a,b;
MQ *c;
{
	if ( !current_mod )
		error("submi : invalid modulus");
	if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
		error("submi : invalid argument");
	submq(current_mod,a,b,c);
}

void mulmi(a,b,c)
MQ a,b;
MQ *c;
{
	if ( !current_mod )
		error("mulmi : invalid modulus");
	if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
		error("mulmi : invalid argument");
	mulmq(current_mod,a,b,c);
}

void divmi(a,b,c)
MQ a,b;
MQ *c;
{
	if ( !current_mod )
		error("divmi : invalid modulus");
	if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
		error("divmi : invalid argument");
	divmq(current_mod,a,b,c);
}

void chsgnmi(a,c)
MQ a,*c;
{
	if ( !current_mod )
		error("chsgnmi : invalid modulus");
	if ( a && NID(a) != N_M )
		error("chsgnmi : invalid argument");
	submq(current_mod,0,a,c);
}

void pwrmi(a,b,c)
MQ a;
Q b;
MQ *c;
{
	if ( !current_mod )
		error("pwrmi : invalid modulus");
	if ( a && NID(a) != N_M )
		error("pwrmi : invalid argument");
	pwrmq(current_mod,a,b,c);
}

int cmpmi(a,b)
MQ a,b;
{
	int c;

	if ( !current_mod )
		error("cmpmi : invalid modulus");
	if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
		error("cmpmi : invalid argument");
	if ( !a )
		if ( !b )
			return 0;
		else
			return CONT(b) < 0;
	else
		if ( !b )
			return CONT(a) > 0;
		else {
			c = CONT(a)-CONT(b);
			if ( c % current_mod )
				return c > 0;
			else
				return 0;
		}
}