[BACK]Return to ox.k CVS log [TXT][DIR] Up to [local] / OpenXM / src / k097 / lib / ox

Diff for /OpenXM/src/k097/lib/ox/ox.k between version 1.4 and 1.6

version 1.4, 2000/12/11 13:53:28 version 1.6, 2000/12/14 04:35:16
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/k097/lib/ox/ox.k,v 1.3 2000/12/10 11:07:45 takayama Exp $  */  /* $OpenXM: OpenXM/src/k097/lib/ox/ox.k,v 1.5 2000/12/12 13:58:21 takayama Exp $  */
   
 Load_sm1(["ox.sm1",AddString([GetEnv("OpenXM_HOME"),"/lib/sm1/ox.sm1"])],  /* Load_sm1(["ox.sm1",AddString([GetEnv("OpenXM_HOME"),"/lib/sm1/ox.sm1"])],
          "ox.sm1.loaded");           "ox.sm1.loaded"); */
 def void Error(s) {  Load_sm1(["oxasir.sm1",AddString([GetEnv("OpenXM_HOME"),
   sm1(" s error ");            "/lib/sm1/oxasir.sm1"])],
 }           "oxasir.sm1.loaded");
   
 class OXchannel extends Object {  class OXchannel extends Object {
   local channel;    local channel;
   /* Just add a tag. */    /* Just add a tag. */
     def getChannel() {
       return(channel);
     }
   def generate(c) {    def generate(c) {
     this = new();      this = new();
     if (IsArray(c)) {      if (IsArray(c)) {
Line 48  class OXchannel extends Object {
Line 51  class OXchannel extends Object {
   
 class OXcontrol extends Object {  class OXcontrol extends Object {
   local control;    local control;
     def getControl() {
       return(control);
     }
   def generate(c) {    def generate(c) {
      if (Tag(c) != 0) {       if (Tag(c) != 0) {
        control = c;         control = c;
Line 63  class OXcontrol extends Object {
Line 69  class OXcontrol extends Object {
     sm1(" [(oxGetPort1) (localhost)] extension /peer set ");      sm1(" [(oxGetPort1) (localhost)] extension /peer set ");
     sm1(" /data peer 1 get toString def ");      sm1(" /data peer 1 get toString def ");
     s = AddString(      s = AddString(
       ["/home/nobuki/OpenXM/src/oxc/oxc",        [GetEnv("OpenXM_HOME"),
          "/src/oxc/oxc",
        " -c ", pass, " -h "," localhost ", " -p ", data, " -x ",         " -c ", pass, " -h "," localhost ", " -p ", data, " -x ",
        " & "]);         " & "]);
     sm1(" [ (/bin/csh -c \") s (\") ] cat /stmp set ");      sm1(" [ (/bin/csh -c \") s (\") ] cat /stmp set ");
Line 91  class OXcontrol extends Object {
Line 98  class OXcontrol extends Object {
 */  */
   
 class OX extends OXcontrol {  class OX extends OXcontrol {
   local engine;    local engine, engineIDs;
   /* OX.generate(null,"ox_sm1"); */    def getEngine() {
   def generate(control,name) {       return(engine);
     }
     def getEngineIDs() {
        return(engineIDs);
     }
     /* OX.generate("ox_sm1"); or OX.generate("ox_sm1",null) */
     def generate(name,control) {
     local c,e, pass, peer, data, s, stmp, engineID;      local c,e, pass, peer, data, s, stmp, engineID;
       if (Length(Arglist) == 0) {
         name = "ox_sm1";  control = null;
       }
       if (Length(Arglist) == 1) {
         control = null;
       }
     this = new(super.generate(control));      this = new(super.generate(control));
     control = this.control;      control = super.getControl();
     sm1(" [(oxGetPort1) (localhost)] extension /peer set ");      sm1(" [(oxGetPort1) (localhost)] extension /peer set ");
     sm1(" /data peer 1 get def ");      sm1(" /data peer 1 get def ");
     control.pushCMO(data);      /* BUG: control.pushCMO(data) does not work.
     control.pushCMO(name);              Use control = super.getControl(); */
       control.pushCMO([[data],name]);
     control.pushCMD(SM_control_spawn_server);      control.pushCMD(SM_control_spawn_server);
     engineID = control.popCMO();      engineID = control.popCMO();
     print("engineID=");Println(engineID);      print("engineID=");Println(engineID);
     HOGE = control;      if (Tag(engineID) == 257 ) {  /* error object */
          Error("Server could be found.");
       }
       engineIDs = [engineID];
     sm1(" [(oxCreateEngine_RFC_101) peer 0 (Empty) engineID] extension /c set ");      sm1(" [(oxCreateEngine_RFC_101) peer 0 (Empty) engineID] extension /c set ");
     engine = OXchannel.generate(c);      engine = OXchannel.generate(c);
     return(this);      return(this);
   }    }
     def pushCMO(a) {
       engine.channel.pushCMO(a);
     }
     def pushCMD(a) {
       engine.channel.pushCMD(a);
     }
     def popCMO() {
       return(engine.channel.popCMO());
     }
   
     def rpc(func,ar) {
        local n,i,one,comm;
        if (! IsString(func)) {
          Error("The first argument of rpc must be a string.");
        }
        if (! IsArray(ar)) {
          Error("The second argument of rpc must be a list.");
        }
        one = IntegerToSm1Integer(1);
        sm1(" getVlist2 toString /comm set ");
        comm = AddString(["OxVlist=",comm,";"]);
        this.pushCMO(comm);
        this.pushCMD(SM_executeStringByLocalParser);
   
        this.pushCMO("print(OxVlist);");
        this.pushCMD(SM_executeStringByLocalParser);
   
        n = Length(ar);
        for (i=n-1; i>=0; i--) {
          this.pushCMO(ar[i]);
          this.pushCMO(one);
          this.pushCMO("ox_dtop");
          this.pushCMD(SM_executeFunction);
        }
        this.pushCMO(IntegerToSm1Integer(n));
        this.pushCMO(func);
        this.pushCMD(SM_executeFunction);
   
        this.pushCMO(one);
        this.pushCMO("ox_ptod");
        this.pushCMD(SM_executeFunction);
        return(this.popCMO());
     }
   
   }
   
   /*
     Example:
        a = startAsir();
        f = a.rpc("fctr",[x^10-1]);
        Println(f);
   */
   def startAsir() {
     local a,asirpeer;
     a = OX.generate("ox_asir");
     asirpeer = (a.getEngine()).getChannel();
     Println(asirpeer);
     sm1(" [asirpeer oxasirpath.asirlib] loadAsirFile ");
     return(a);
 }  }
   

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.6

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>