version 1.4, 2001/09/03 07:01:06 |
version 1.5, 2001/10/09 01:36:13 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/gfsn.c,v 1.3 2001/09/03 01:06:40 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/gfspn.c,v 1.4 2001/09/03 07:01:06 noro Exp $ */ |
|
|
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
|
|
UM current_mod_gfsn; |
UM current_mod_gfsn; |
|
|
void setmod_gfsn(p) |
void setmod_gfsn(UM p) |
UM p; |
|
{ |
{ |
current_mod_gfsn = p; |
current_mod_gfsn = p; |
} |
} |
|
|
void getmod_gfsn(up) |
void getmod_gfsn(UM *up) |
UM *up; |
|
{ |
{ |
*up = current_mod_gfsn; |
*up = current_mod_gfsn; |
} |
} |
|
|
void simpgfsn(n,r) |
void simpgfsn(GFSN n,GFSN *r) |
GFSN n; |
|
GFSN *r; |
|
{ |
{ |
UM t,q; |
UM t,q; |
|
|
|
|
|
|
#define NZGFSN(a) ((a)&&(OID(a)==O_N)&&(NID(a)==N_GFSN)) |
#define NZGFSN(a) ((a)&&(OID(a)==O_N)&&(NID(a)==N_GFSN)) |
|
|
void ntogfsn(a,b) |
void ntogfsn(Obj a,GFSN *b) |
Obj a; |
|
GFSN *b; |
|
{ |
{ |
UM t; |
UM t; |
GFS c; |
GFS c; |
|
|
if ( !a || (OID(a)==O_N && NID(a) == N_GFSN) ) |
if ( !a || (OID(a)==O_N && NID(a) == N_GFSN) ) |
*b = (GFSN)a; |
*b = (GFSN)a; |
else if ( OID(a) == O_N && (NID(a) == N_GFS || NID(a) == N_Q) ) { |
else if ( OID(a) == O_N && (NID(a) == N_GFS || NID(a) == N_Q) ) { |
ntogfs((Num)a,&c); |
ntogfs((Obj)a,&c); |
if ( !b ) |
if ( !b ) |
*b = 0; |
*b = 0; |
else { |
else { |
|
|
error("ntogfsn : invalid argument"); |
error("ntogfsn : invalid argument"); |
} |
} |
|
|
void addgfsn(a,b,c) |
void addgfsn(GFSN a,GFSN b,GFSN *c) |
GFSN a,b; |
|
GFSN *c; |
|
{ |
{ |
UM t,q; |
UM t,q; |
GFSN z; |
GFSN z; |
int d; |
int d; |
MQ qq; |
|
|
|
ntogfsn((Obj)a,&z); a = z; ntogfsn((Obj)b,&z); b = z; |
ntogfsn((Obj)a,&z); a = z; ntogfsn((Obj)b,&z); b = z; |
if ( !a ) |
if ( !a ) |
|
|
} |
} |
} |
} |
|
|
void subgfsn(a,b,c) |
void subgfsn(GFSN a,GFSN b,GFSN *c) |
GFSN a,b; |
|
GFSN *c; |
|
{ |
{ |
UM t,q; |
UM t,q; |
GFSN z; |
GFSN z; |
|
|
|
|
extern int up_lazy; |
extern int up_lazy; |
|
|
void mulgfsn(a,b,c) |
void mulgfsn(GFSN a,GFSN b,GFSN *c) |
GFSN a,b; |
|
GFSN *c; |
|
{ |
{ |
UM t,q; |
UM t,q; |
GFSN z; |
GFSN z; |
|
|
} |
} |
} |
} |
|
|
void divgfsn(a,b,c) |
void divgfsn(GFSN a,GFSN b,GFSN *c) |
GFSN a,b; |
|
GFSN *c; |
|
{ |
{ |
GFSN z; |
GFSN z; |
int d; |
int d; |
|
|
} |
} |
} |
} |
|
|
void invgfsn(b,c) |
void invgfsn(GFSN b,GFSN *c) |
GFSN b; |
|
GFSN *c; |
|
{ |
{ |
GFSN z; |
GFSN z; |
int d; |
int d; |
|
|
} |
} |
} |
} |
|
|
void chsgngfsn(a,c) |
void chsgngfsn(GFSN a,GFSN *c) |
GFSN a,*c; |
|
{ |
{ |
GFSN z; |
GFSN z; |
int d; |
int d; |
|
|
} |
} |
} |
} |
|
|
void pwrgfsn(a,b,c) |
void pwrgfsn(GFSN a,Q b,GFSN *c) |
GFSN a; |
|
Q b; |
|
GFSN *c; |
|
{ |
{ |
GFSN z; |
GFSN z; |
UM t,x,y,q; |
UM t,x,y,q; |
|
|
} |
} |
} |
} |
|
|
int cmpgfsn(a,b) |
int cmpgfsn(GFSN a,GFSN b) |
GFSN a,b; |
|
{ |
{ |
GFSN z; |
GFSN z; |
|
|
|
|
return compsfum(BDY(a),BDY(b)); |
return compsfum(BDY(a),BDY(b)); |
} |
} |
|
|
void randomgfsn(r) |
void randomgfsn(GFSN *r) |
GFSN *r; |
|
{ |
{ |
int i,d; |
int d; |
UM t; |
UM t; |
|
|
if ( !current_mod_gfsn ) |
if ( !current_mod_gfsn ) |