Monday, November 08, 2010 at 12:07 AM.
system.verbs.traps.Unix.scpt
on scpt (scriptName, paramList) { <<Find the script and call it with the parameter list. It works like XML-RPC and SOAP handlers. The root table is user.unix.scripts. Addresses are dereferenced. Any #security scripts found during the walk are run. All parameters are received as strings -- so your scripts need to take that into account. Also, the result from a command line call usually ends with "\n" (a line feed) -- your scripts will have to add those if appropriate. <<05/09/01; 12:22:46 AM by PBS local (nomad, adrScript); local (adrHandlers = @user.unix.scripts); local (securityList = {}); bundle { //locate the script try { local (s = scriptName, name); nomad = adrHandlers; loop { if typeOf (nomad^) == tabletype { local (adr = @nomad^.["#security"]); if defined (adr^) { securitylist = securitylist + {adr}}}; if sizeof (s) == 0 { break}; name = string.nthField (s, '.', 1); nomad = @nomad^.[name]; if typeof (nomad^) == addresstype { nomad = nomad^}; s = string.delete (s, 1, sizeof (name) + 1)}; adrscript = nomad} else { scriptError ("Can't call " + scriptName + " because the script wasn't found.")}}; bundle { //check in with the #security scripts local (adr); for adr in securitylist { local (t); t.scriptName = scriptName; t.paramList = paramList; callScript (string (adr), {}, @t)}}; local (t); //dummy paramtable new (tableType, @t); return (callScript (string (adrScript), paramList, @t))} //call the script; return the response
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.