anchor.diff:  -behaviour(gen_server).
   
   % public interface
  --export([job/1]).
  +-export([job/1,send/1]).
   -export([start/0, start/1, start_link/0, start_link/1, stop/0]).
   
   % gen_server exports
  
positive.code:     % Args = "-peer=" ++ atom_to_list(node()),
      Args = "",
      erlang:open_port({spawn, Jnode ++ " " ++ Args ++ " &"},[]),
      undef.
  
  do_job(Spec) ->
      {self(),Spec}.
  
  start_worker(S) ->
      gen_server:start(?MODULE, S#jsrv{worker=yes}, []).
      
  shutdown(S) ->
      {ok, Hostname} = inet:gethostname(),
      {jnode,list_to_atom("jnode@" ++ Hostname)} ! {self(),{die}},
      timer:sleep(100),
      lists:map(fun(W) -> W ! {'STOP'} end, S#jsrv.workers).
  
     
  
negative.code: -define(DEFAULT_N, erlang:system_info(schedulers_online) * 2).
  -define(SRVNAME, ?MODULE).
  -define(STARTSPEC, {local, ?SRVNAME}).
  -define(PEERNAME, jnode).
  -define(PEERSTR, atom_to_list(?PEERNAME)).
  -define(NERLOMSG(Body), {self(), {Body}}).
  
  -record(jsrv, {workers = []
                ,worker  = no
  