File: [local] / OpenXM / src / asir-contrib / packages / src / phc.rr (download)
Revision 1.3, Thu Aug 9 05:11:58 2007 UTC (16 years, 9 months ago) by takayama
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, HEAD, DEB_REL_1_2_3-9 Changes since 1.2: +4 -4
lines
Fixed a bug of reading the result.
|
/* $OpenXM: OpenXM/src/asir-contrib/packages/src/phc.rr,v 1.3 2007/08/09 05:11:58 takayama Exp $ */
/* Old: phc, see Attic */
module phc;
static Phc_proc$
localf init_Phc_proc $
def init_Phc_proc() {
Phc_proc = -1$
}
init_Phc_proc() $
localf find_proc $
localf start $
localf start_unix $
localf start_windows $
localf phc $
localf demo1 $
#define PHCL_FIND_PROC(P) P = getopt(proc);\
if (type(P) == -1) {\
P = find_proc();\
}
def find_proc() {
/*! extern Phc_proc; */
if (Phc_proc == -1) {
A = ox_get_serverinfo();
/* Look for ox_sm1_for_phc. Not yet written */
/* Start sm1 automatically if there is not ox_sm1 */
Phc_proc = start();
}
return(Phc_proc);
}
/* phc */
def start() {
extern Xm_unix;
if (ox_ostype()[0] == "windows" && Xm_unix == 0)
return start_windows(0);
else
return start_unix();
}
def start_unix() {
extern Xm_noX;
/*! extern Phc_proc; */
extern Sm1_lib;
if (Xm_noX) {
P = ox_launch_nox(0,Sm1_lib+"/bin/ox_sm1_phc");
}else{
P = ox_launch(0,Sm1_lib+"/bin/ox_sm1_phc");
}
ox_check_errors(P);
Phc_proc = P;
return(P);
}
def start_windows(U) {
extern Sm1_lib;
extern Xm_noX;
/*! extern Phc_proc; */
extern Xm_use_timer_to_start_server;
extern Xm_debug_on_win_1;
if (!Xm_debug_on_win_1) {
error("The component phc has not yet been implemented on Windows(native).");
}
CPort = generate_port();
SPort = generate_port();
if (U) { /* Test on unix. */
Com = "ox -ox " + Sm1_lib+"/bin/ox_sm1_phc " +
" -data "+ rtostr(SPort) +" -control "+ rtostr(CPort);
Com = "oxlog xterm -iconic -T ox_sm1 -n ox_sm1 -e "+ Com + "& ";
}else{
OpenXM_HOME_WIN = ox_getenv("OpenXM_HOME_WIN");
OpenXM_START_EXE = ox_getenv("OpenXM_START_EXE");
Sm1_lib = OpenXM_HOME_WIN+"/lib/sm1";
Ox_sm1_forAsir = OpenXM_HOME_WIN+"\\lib\\sm1\\bin\\ox_sm1_phc.exe";
F = open_file(Ox_sm1_forAsir);
if (F < 0) {
error("ox_sm1_phc.exe is not existing. Check your installation.");
return(-1);
}
close_file(F);
Com = OpenXM_HOME_WIN+"\\bin\\ox -ox " +
Ox_sm1_forAsir + " " +
" -data "+ rtostr(SPort) +" -control "+ rtostr(CPort);
Com = OpenXM_START_EXE+" /MIN "+Com ;
}
print(Com +"\n");
shell(Com);
if (Xm_use_timer_to_start_server) {
print("Waiting for 3 seconds."); sleep(3000);
}else{
purge_stdin(); print("Type in Return to connect to the server.");
get_line();
}
print("Trying to connect to the server...",0)$
CSocket = try_connect("localhost",CPort);
SSocket = try_connect("localhost",SPort);
P = register_server(CSocket,CPort,SSocket,SPort);
print(" Done.");
if (Xm_noX) {
sm1.sm1(P," oxNoX ");
}
ox_check_errors(P);
Phc_proc = P;
return(P);
}
def phc(A) {
PHCL_FIND_PROC(P);
sm1.sm1(P," [(getpid)] extension (universalNumber) dc ");
Pid = ox_pop_cmo(P);
Fname = "tmp.phc.out."+rtostr(Pid);
ox_push_cmo(P,Fname); sm1.sm1(P," /tmp.phc.out set ");
B = map(rtostr,A);
sm1.push(P,B);
sm1.sm1(P," phc ");
C = sm1.pop(P);
/* print(C); */
/* load("./"+Fname); it does not work. */
/* return(Phc); It does not work.*/
print("The detailed output is in the file tmp.output.*")$
print("The answer is obtained by load(@@); Phc; ");
return Fname;
}
def demo1() {
N = 256;
/* From Jan's paper p.7, but it does not have solutions. ??*/
/*
A = [[x1,0,random()%N,random()%N],
[x2,0,random()%N,random()%N],
[0,x3,random()%N,random()%N],
[0,x4,random()%N,random()%N]];
B = [[x1,0,random()%N,random()%N],
[x2,0,random()%N,random()%N],
[0,x3,random()%N,random()%N],
[0,x4,random()%N,random()%N]];
C = [[x1,0,random()%N,random()%N],
[x2,0,random()%N,random()%N],
[0,x3,random()%N,random()%N],
[0,x4,random()%N,random()%N]];
D = [[x1,0,random()%N,random()%N],
[x2,0,random()%N,random()%N],
[0,x3,random()%N,random()%N],
[0,x4,random()%N,random()%N]];
G=[-20948*x3*x1+ 34900*x3*x2+ 24828*x4*x1-22860*x4*x2,
24786*x3*x1+ 30282*x3*x2+ 5255*x4*x1-24101*x4*x2,
27682*x3*x1-26248*x3*x2-8928*x4*x1+ 9000*x4*x2,
-14585*x3*x1-3666*x3*x2+ 37796*x4*x1-16341*x4*x2];
*/
A = [[1,0,random()%N,random()%N],
[0,1,random()%N,random()%N],
[x1,x3,random()%N,random()%N],
[x2,x4,random()%N,random()%N]];
B = [[1,0,random()%N,random()%N],
[0,1,random()%N,random()%N],
[x1,x3,random()%N,random()%N],
[x2,x4,random()%N,random()%N]];
C = [[1,0,random()%N,random()%N],
[0,1,random()%N,random()%N],
[x1,x3,random()%N,random()%N],
[x2,x4,random()%N,random()%N]];
D = [[1,0,random()%N,random()%N],
[0,1,random()%N,random()%N],
[x1,x3,random()%N,random()%N],
[x2,x4,random()%N,random()%N]];
E = [det(newmat(4,4,A)),det(newmat(4,4,B)),
det(newmat(4,4,C)),det(newmat(4,4,D))];
print(E);
phc(E);
}
endmodule;
end$