===================================================================
RCS file: /home/cvs/OpenXM_contrib2/asir2000/lib/primdec_mod,v
retrieving revision 1.3
retrieving revision 1.9
diff -u -p -r1.3 -r1.9
--- OpenXM_contrib2/asir2000/lib/primdec_mod	2003/04/20 07:50:45	1.3
+++ OpenXM_contrib2/asir2000/lib/primdec_mod	2003/04/24 07:54:15	1.9
@@ -1,14 +1,16 @@
+/* $OpenXM: OpenXM_contrib2/asir2000/lib/primdec_mod,v 1.8 2003/04/21 02:02:16 noro Exp $ */
+
 extern Hom,GBTime$
 extern DIVLIST,INTIDEAL,ORIGINAL,ORIGINALDIMENSION,STOP,Trials,REM$
 extern T_GRF,T_INT,T_PD,T_MP$
 extern BuchbergerMinipoly,PartialDecompByLex,ParallelMinipoly$
 extern B_Win,D_Win$
 extern COMMONCHECK_SF,CID_SF$
-extern FFF_LOADED_BY_PRIMDEC_MOD$
-extern GR_LOADED_BY_PRIMDEC_MOD$
+extern LIBRARY_GR_LOADED$
+extern LIBRARY_FFF_LOADED$
 
-if(!FFF_LOADED_BY_PRIMDEC_MOD) load("fff"); else ; FFF_LOADED_BY_PRIMDEC_MOD = 1$
-if(!GR_LOADED_BY_PRIMDEC_MOD) load("gr"); else ; GR_LOADED_BY_PRIMDEC_MOD = 1$
+if(!LIBRARY_FFF_LOADED) load("fff"); else ; LIBRARY_FFF_LOADED = 1$
+if(!LIBRARY_GR_LOADED) load("gr"); else ; LIBRARY_GR_LOADED = 1$
 
 /*==============================================*/
 /*  prime decomposition of ideals over 		*/
@@ -134,7 +136,7 @@ def frobeniuskernel_main(P,VSet,WSet)
 	XSet=append(VSet,WSet);
 	NewOrder=[[0,length(VSet)],[0,length(WSet)]];
 
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 
 	for (I=0;I<NV;I++)
 		{
@@ -168,7 +170,7 @@ def frobeniuskernel_main2(P,VSet,WSet)
 	XSet=append(VSet,WSet);
 	NewOrder=[[0,NV],[0,NV]];
 
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 
 	for (I=0;I<NV;I++)
 		{
@@ -216,7 +218,7 @@ def frobeniuskernel_main4(P,VSet,WSet)
 	XSet=append(VSet,WSet);
 	NewOrder=[[0,NV],[0,NV]];
 
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 
 	for (I=0;I<NV;I++)
 		{
@@ -279,7 +281,7 @@ def frobeniuskernel_main3(P,VSet,WSet)
 
 	NewP=coefficientfrobeniuskernel(P);
 
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 
 	for (I=0;I<NV;I++)
 		{
@@ -342,8 +344,8 @@ def coefficientfrobeniuskernel_main(Poly)
 	Vars=vars(Poly);
 	QP=dp_ptod(Poly,Vars);
 	ANS=0;
-	FOrd=deg(setmod_ff()[1],x);
-	Char=setmod_ff()[0];
+	FOrd=extdeg_ff();
+	Char=characteristic_ff();
 	Pow=Char^(FOrd-1);
 
 	while(QP !=0 )
@@ -1636,7 +1638,7 @@ def separableclosure(CP,TargetVSet,VSet)
 		print("This is not a separable ideal, so we make its separable closure.", 2);
 	}
 	WSet=makecounterpart(TargetVSet);
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 
 	NewP=CP[0];
 	EXPVECTOR=newvect(NVSet);
@@ -1692,7 +1694,7 @@ def convertdivisor(P,TargetVSet,VSet,ExVector)
 
 	NVSet=length(TargetVSet);
 	WSet=makecounterpart(TargetVSet);
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 	Ord=0;
 
 	NewP=P;
@@ -2034,7 +2036,7 @@ def checkseparablepoly(P,V)
 
 def pdivide(F,V)
 	{
-	Char=setmod_ff()[0];
+	Char=characteristic_ff();
 	TestP=P;
 
 	Deg=ideg(TestP,V);
@@ -2082,14 +2084,19 @@ def convertsmallfield(PP,VSet,Ord)
 	{
 	dp_ord(Ord);
 	NVSet=length(VSet);
-	Char=setmod_ff()[0];
-	ExtDeg=deg(setmod_ff()[1],x);
+	Char=characteristic_ff();
+	ExtDeg=extdeg_ff();
 
-	NewV=pg;	
+	NewV=pgpgpgpgpgpgpg;	
 	MPP=map(monic_hc,PP,VSet);
 	MPP=map(sfptopsfp,MPP,NewV);
 
-	MinPoly=subst(setmod_ff()[1],x,NewV);
+	DefPoly=setmod_ff()[1];
+	/* GF(p) case */
+	if ( !DefPoly )
+		return MPP;
+
+	MinPoly=subst(DefPoly,var(DefPoly),NewV);
 	XSet=cons(NewV,VSet);
 
 	Ord1=[[0,1],[Ord,NVSet]];
@@ -2109,7 +2116,7 @@ def checkgaloisorbit(PP,VSet,Ord,Flag)
 	{
 	NPP=length(PP);
 	TmpPP=PP;
-	ExtDeg=deg(setmod_ff()[1],x);
+	ExtDeg=extdeg_ff();
 	
 	ANS=[];
 	BNS=[];