| version 1.4, 2000/12/11 13:53:28 |
version 1.5, 2000/12/12 13:58:21 |
|
|
| /* $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.4 2000/12/11 13:53:28 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); |
control.pushCMO(data); /* BUG: control.pushCMO(data) does not work. |
| |
Use control = super.getControl(); */ |
| control.pushCMO(name); |
control.pushCMO(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); |
| } |
} |
| |
|