[BACK]Return to phc.rr CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / packages / src

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$