Merge changes I40e7f7c1,I6542c6eb

* changes:
  Return to jtry1..jtry10 to save space
  Statically import fail/0 instead of defining new fields
diff --git a/examples/plcafe/Makefile b/examples/plcafe/Makefile
deleted file mode 100644
index 3dd0348..0000000
--- a/examples/plcafe/Makefile
+++ /dev/null
@@ -1,29 +0,0 @@
-################################################################
-#	Makefile for Prolog Cafe
-################################################################
-
-################################################################
-PLJAVAC     = pljavac
-PLJAVACOPTS = -v
-
-PLJAR     = pljar
-PLJAROPTS = -v
-################################################################
-.SUFFIXES:
-.SUFFIXES: .jar .pl $(SUFFIXES)
-
-jar_objects := $(patsubst %.pl,%.jar,$(wildcard *.pl))
-
-.pl.jar:
-	$(PLJAR) $(PLJAROPTS) $@ $<
-	-rm -f -r $*
-
-all: $(jar_objects)
-	$(PLJAVAC) $(PLJAVACOPTS) -cp queens.jar T.java
-
-clean:
-	-rm -f core *~
-
-realclean: clean
-	-rm -f *.jar *.class
-
diff --git a/examples/plcafe/T.java b/examples/plcafe/T.java
deleted file mode 100644
index 42ff7e2..0000000
--- a/examples/plcafe/T.java
+++ /dev/null
@@ -1,62 +0,0 @@
-import com.googlecode.prolog_cafe.lang.*;
-/**
- * A sample program for multi-thread execution.<br>
- * Usage: <br>
- * <pre>
- *       % plcafe -cp queens.jar T
- * </pre>
- *
- * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
- * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
- */
-public class T {
-    public static void main(String args[]) {
-	long t = System.currentTimeMillis();
-	boolean r1 = true;
-	boolean r2 = true;
-	Term a1[] = {new IntegerTerm(10), new VariableTerm()};
-	Term a2[] = {new IntegerTerm(8), new VariableTerm()};
-
-	PrologControl e1 = new PrologControl();
-	PrologControl e2 = new PrologControl();
-	Term v1 = new VariableTerm();
-	Term v2 = new VariableTerm();
-	e1.setPredicate(new PRED_queens_2(), a1);
-	e2.setPredicate(new PRED_queens_2(), a2);
-	System.out.println("Start");
-	e1.start();
-	e2.start();
-	while (r1 || r2) {
-	    try {
-		Thread.sleep(10);
-	    } catch (InterruptedException e) {}
-	    if (r1 && e1.ready()) {
-		r1 = e1.next();
-		if (r1) {
-		    System.out.println("Success1 = " + a1[1]);
-		    e1.cont();
-		} else {
-		    System.out.println("Fail1");
-		}
-	    } else if (r2 && e2.ready()) {
-		r2 = e2.next();
-		if (r2) {
-		    System.out.println("Success2 = " + a2[1]);
-		    e2.cont();
-		} else {
-		    System.out.println("Fail2");
-		}
-	    } else {
-		System.out.println("Waiting");
-		try {
-		    Thread.sleep(100);
-		} catch (InterruptedException e) {}
-	    }
-	}
-	System.out.println("End");
-	long t1 = System.currentTimeMillis();
-	long t2 = t1 - t;
-	System.out.println("time = " + t2 + "msec.");
-	
-    }
-}
diff --git a/examples/plcafe/border_layout.pl b/examples/plcafe/border_layout.pl
deleted file mode 100644
index 80a7dc1..0000000
--- a/examples/plcafe/border_layout.pl
+++ /dev/null
@@ -1,36 +0,0 @@
-%   File   : border_layout.pl
-%   Authors: Mutsunori Banbara (banbara@kobe-u.ac.jp)
-%   Updated: 15 May 2008
-%   Purpose: java.awt.BorderLayout
-%   Usage  :
-%	     % plcafe -cp border_layout.jar
-%	     ?- main.
-
-main :-
-	java_constructor('java.awt.Frame', X),
-	java_get_field('java.awt.Color', blue, Blue),
-	java_get_field('java.awt.Color', white, White),
-	java_method(X, setSize(300,200), _),
-	java_method(X, setBackground(Blue), _),
-	java_method(X, setForeground(White), _),
-	java_method(X, setTitle('Prolog Cafe'), _),
-	java_constructor('java.awt.BorderLayout', Border),
-	java_method(X, setLayout(Border), _),
-	java_get_field('java.awt.Font', 'BOLD', Bold),
-	java_constructor('java.awt.Font'('Helvetica', Bold, 12), F1),
-	java_method(X, setFont(F1), _),
-	java_constructor('java.awt.Button'('A Prolog to Java Translator'), B1),
-	java_constructor('java.awt.Button'('Prolog Cafe'), B2),
-	java_constructor('java.awt.Button'('Prolog'), B3),
-	java_constructor('java.awt.Button'('Java'), B4),
-	java_constructor('java.awt.Button'('produced by M.Banbara and N.Tamura'), B5),
-	java_method(X, add('North',  B1),_),
-	java_method(X, add('Center', B2),_),
-	java_method(X, add('West',   B3),_),
-	java_method(X, add('East',   B4),_),
-	java_method(X, add('South',  B5),_),
-	java_get_field('java.lang.Boolean', 'TRUE', True),
-	java_method(X, setVisible(True), _).
-
-
-
diff --git a/examples/plcafe/frame.pl b/examples/plcafe/frame.pl
deleted file mode 100644
index a77e87a..0000000
--- a/examples/plcafe/frame.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-%   File   : frame.pl
-%   Authors: Mutsunori Banbara (banbara@kobe-u.ac.jp)
-%   Updated: 14 February 2008
-%   Purpose: java.awt.Frame
-%   Usage  :
-%	     % plcafe -cp frame.jar
-%	     ?- main.
-
-main :-
-	java_constructor('java.awt.Frame', X),
-	java_method(X, setSize(200,200), _),
-	java_get_field('java.lang.Boolean', 'TRUE', True),
-	java_method(X, setVisible(True), _).
-
-
-
diff --git a/examples/plcafe/paint.pl b/examples/plcafe/paint.pl
deleted file mode 100644
index a5e88ec..0000000
--- a/examples/plcafe/paint.pl
+++ /dev/null
@@ -1,325 +0,0 @@
-%   File   : paint.pl
-%   Authors: Mutsunori Banbara (banbara@kobe-u.ac.jp)
-%   Updated: 15 May 2008
-%   Purpose: Graphics
-%   Usage  :
-%	     % plcafe -cp paint.jar
-%	     ?- main.
-%         or
-%	     % plcafe -cp paint.jar -t main
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Main
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-main :-
-	start, 
-	repeat,
-	  write('Simple Graphical Examples (bye. to quit)'), nl,
-	  tab(4), write('Example: ex1.'), nl,
-	  tab(4), write('Example: ex2.'), nl,
-	  tab(4), write('Example: ex3.'), nl, nl,
-	  write('|: '), flush_output,
-	  read(Cmd),
-	do(Cmd),
-	!.
-
-do(X) :- var(X), !, fail.
-do(bye)  :- !, stop.
-do(quit) :- !, stop.
-do(end_of_file) :- !, stop.
-do(Cmd) :-
-	statistics(runtime, _),
-	call(Cmd),
-	statistics(runtime, [_,T]),
-	tab(3), write('Time = '), write(T), write(' msec'), nl, nl,
-	fail.
-
-%%% Example 1
-ex1 :- init, ex1(30).
-
-ex1(N) :-
-	integer(N),
-	R is random*255, 
-	G is random*255, 
-	B is random*255, 
-	setColor(rgb(R,G,B)),
-	getCenter(Cx, Cy),
-	for(I, -N, N),
-	    X1 is Cx+I*5,
-	    Y1 is Cy+N*5,
-	    X2 is Cx+N*5,
-	    Y2 is Cy-I*5,
-	    drawLine(X1, Y1, X2, Y2),
-	    A1 is Cx-I*5,
-	    B1 is Cy-N*5,
-	    A2 is Cx-N*5,
-	    B2 is Cy+I*5,
-	    drawLine(A1, B1, A2, B2),
-        fail.
-ex1(_).
-
-%%% Example 2
-ex2 :- init, ex2(6).
-
-ex2(N) :-
-	integer(N),
-	for(I, 1, N),
-	  M is I*5, 
-	  ex1(M),
-        fail.
-ex2(_).
-
-%%% Example 3
-ex3 :- init, ex3(100).
-
-ex3(N) :-
-	integer(N),
-	getCenter(Cx, Cy),
-	R is random*255, 
-	G is random*255, 
-	B is random*255, 
-	setColor(rgb(R,G,B)),
-	for(I, 1, N),
-	    X is round(Cx-I*3/2),
-	    Y is round(Cy-I*3/2),
-	    W is I*3,
-	    H is I*3,
-	    drawOval(X, Y, W, H),
-        fail.	
-ex3(X).
-
-%%% Utilities
-for(I, I, N) :- I =< N.
-for(I, J, N) :- J < N, J1 is J+1, for(I, J1, N).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Start, Init, and Stop
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-:- dynamic current_image/1, current_canvas/1, current_frame/1.
-:- dynamic current_color/2, current_font/3.
-
-start :- start(350, 350), init.
-
-start(Width, Height) :-
-	integer(Width),
-	integer(Height),
-	retractall(current_frame(_)),
-	retractall(current_canvas(_)),
-	retractall(current_image(_)),
-	retractall(current_color(_,_)),
-	retractall(current_font(_,_,_)),
-	java_constructor('java.awt.Frame', Frame),
-	java_constructor('java.awt.BorderLayout', Border),
-	java_method(Frame, setLayout(Border), _),
-	java_method(Frame, setSize(Width,Height), _),
-	java_method(Frame, setTitle('Simple Graphical Examples'), _),
-	java_constructor('java.awt.Canvas', Canvas),
-	java_method(Frame, add('Center', Canvas), _),
-	java_get_field('java.lang.Boolean', 'TRUE', True),
-	java_method(Frame, setVisible(True), _),
-	java_method(Canvas, getWidth,  CW),
-	java_method(Canvas, getHeight, CH),
-	java_method(Canvas, createImage(CW,CH), Image),
-	assertz(current_frame(Frame)),
-	assertz(current_canvas(Canvas)),
-	assertz(current_image(Image)).
-
-init :-
-	setColor(black),
-	setBackground(white),
-	setFont(dialog, italic, 12),
-	getSize(W, H),
-	clearRect(0, 0, W, H).
-
-stop :-
-	current_frame(Frame),
-	java_get_field('java.lang.Boolean', 'FALSE', F),
-	java_method(Frame, setVisible(F), _).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Size
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-getHeight(X) :-
-	current_canvas(C),
-	java_method(C, getHeight, X).
-
-getWidth(X) :-
-	current_canvas(C),
-	java_method(C, getWidth, X).
-
-getCenter(X, Y) :-
-	getWidth(W),
-	getHeight(H),
-	X is (W+1)//2,
-	Y is (H+1)//2.
-
-getSize(X, Y) :- 
-	getWidth(X), 
-	getHeight(Y).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Graphics
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_graphics(Gra, Canvas) :-
-	current_canvas(Canvas),
-	java_method(Canvas, getGraphics, Gra).
-
-get_image_graphics(ImgGra, Image) :-
-	current_image(Image),
-	java_method(Image,  getGraphics, ImgGra).
-
-paint(Function) :-
-	get_graphics(Gra, Canvas),
-	get_image_graphics(ImgGra, Image),
-	java_method(Gra,    Function, _),
-	java_method(ImgGra, Function, _),
-	java_method(Gra,    drawImage(Image,0,0,Canvas), _).
-
-repaint :-
-	get_graphics(Gra, Canvas),
-	get_image_graphics(_, Image),
-	java_method(Gra, drawImage(Image,0,0,Canvas), _).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Drawing Functions
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-clearRect(X, Y, Width, Height) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	paint(clearRect(X,Y,Width,Height)).
-
-drawLine(X1, Y1, X2, Y2) :- 
-	integer(X1), integer(Y1), integer(X2), integer(Y2),
-	paint(drawLine(X1,Y1,X2,Y2)).
-
-drawString(Str, X, Y) :- 
-	atom(Str), integer(X), integer(Y),
-	paint(drawString(Str,X,Y)).
-
-drawOval(X, Y, Width, Height) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	paint(drawOval(X,Y,Width,Height)).
-
-fill3DRect(X, Y, Width, Height, Raise) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	boolean_map(Raise, Bool),	
-	paint(fill3DRect(X,Y,Width,Height,Bool)).
-
-drawRect(X, Y, Width, Height) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	paint(drawRect(X,Y,Width,Height)).
-
-fillRect(X, Y, Width, Height) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	paint(fillRect(X,Y,Width,Height)).
-
-draw3DRect(X, Y, Width, Height, Raise) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	boolean_map(Raise, Bool),	
-	paint(draw3DRect(X,Y,Width,Height,Bool)).
-
-fillOval(X, Y, Width, Height) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	paint(fillOval(X,Y,Width,Height)).
-
-drawArc(X, Y, Width, Height, StartAngle, ArcAngle) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	integer(StartAngle), integer(ArcAngle), 
-	paint(drawArc(X,Y,Width,Height,StartAngle,ArcAngle)).
-
-fillArc(X, Y, Width, Height, StartAngle, ArcAngle) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	integer(StartAngle), integer(ArcAngle), 
-	paint(fillArc(X,Y,Width,Height,StartAngle,ArcAngle)).
-
-drawRoundRect(X, Y, Width, Height, ArcWidth, ArcHeight) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	integer(ArcWidth), integer(ArcHeight),
-	paint(drawRoundRect(X,Y,Width,Height,ArcWidth,ArcHeight)).
-
-fillRoundRect(X, Y, Width, Height, ArcWidth, ArcHeight) :-
-	integer(X), integer(Y), integer(Width), integer(Height),
-	integer(ArcWidth), integer(ArcHeight),
-	paint(fillRoundRect(X,Y,Width,Height,ArcWidth,ArcHeight)).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Color
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-setColor(Co) :- color_map(Co, Obj), !,
-	current_canvas(Canvas),
-	java_method(Canvas, setForeground(Obj), _),
-	retractall(current_color(_,_)),
-	assertz(current_color(Co, Obj)).
-setColor(Co) :- 
-	findall(Co, color(Co), Domain),
-	throw(domain_error(setColor(Co),1,['rgb(R,G,B)'|Domain],Co)).
-
-setBackground(Co) :- color_map(Co, Obj), !,
-	current_canvas(Canvas),
-	java_method(Canvas, setBackground(Obj), _).
-setBackground(Co) :- 
-	findall(Co, color(Co), Domain),
-	throw(domain_error(setBackground(Co),1,['rgb(R,G,B)'|Domain],Co)).
-
-color_map(Co, Obj) :- color(Co),  !, 
-	java_get_field('java.awt.Color', Co, Obj).
-color_map(Co, Obj) :- 
-	Co = rgb(X,Y,Z), 
-	R is round(X), 0 =< R, R =< 255,
-	G is round(Y), 0 =< G, G =< 255,
-	B is round(Z), 0 =< B, B =< 255,
-	!,
-	java_constructor('java.awt.Color'(R,G,B), Obj).
-
-color(black).
-color(blue).
-color(cyan).
-color(darkGray).
-color(gray).
-color(green).
-color(lightGray).
-color(magenta).
-color(orange).
-color(pink).
-color(red).
-color(white).
-color(yellow).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Font
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-setFont(Font, Style, Size) :- font_map(Font, Style, Size, Obj), !,
-	current_canvas(Canvas),
-	java_method(Canvas, setFont(Obj), _),
-	retractall(current_font(_,_,_)),
-	assertz(current_font(Font,Style,Size)).
-setFont(Font, Style, Size) :-
-	findall(F, font(F), Domain),
-	throw(domain_error(setFont(Font, Style, Size),1,Domain,Font)).
-
-font_map(Font, Style, Size, Obj) :- 
-	integer(Size),
-	font(Font, F),
-	font_style(Style, St),
-	java_constructor('java.awt.Font'(F, St, Size), Obj).
-
-font(helvetica,    'Helvetica').
-font(times_roman,  'TimesRoman').
-font(courier,      'Courier').
-font(dialog,       'Dialog').
-font(dialog_input, 'DialogInput').
-
-font_style(plain,  0).
-font_style(bold,   1).
-font_style(italic, 2).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Boolean
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-boolean_map(Bool, Obj) :-
-	boolean(Bool,  B),
-	java_get_field('java.lang.Boolean', B, Obj).
-
-boolean(true,  'TRUE').
-boolean(false, 'FALSE').
-
-%%% END
diff --git a/examples/plcafe/queens.pl b/examples/plcafe/queens.pl
deleted file mode 100644
index 8b21eb1..0000000
--- a/examples/plcafe/queens.pl
+++ /dev/null
@@ -1,31 +0,0 @@
-% File   : queens.pl
-% Updated: 14 February 2008
-% Purpose: N-Queen Puzzle (posed by Franz Nauch, 1850)
-
-queens(N,Qs) :-
-	range(1,N,Ns),
-	queens(Ns,[],Qs).
-
-queens([],Qs,Qs).
-queens(UnplacedQs,SafeQs,Qs) :-
-	select(UnplacedQs,UnplacedQs1,Q),
-	not_attack(SafeQs,Q),
-	queens(UnplacedQs1,[Q|SafeQs],Qs).
-
-not_attack(Xs,X) :-
-	not_attack(Xs,X,1).
-
-not_attack([],_,_) :- !.
-not_attack([Y|Ys],X,N) :-
-	X =\= Y+N, X =\= Y-N,
-	N1 is N+1,
-	not_attack(Ys,X,N1).
-
-select([X|Xs],Xs,X).
-select([Y|Ys],[Y|Zs],X) :- select(Ys,Zs,X).
-
-range(N,N,[N]) :- !.
-range(M,N,[M|Ns]) :-
-	M < N,
-	M1 is M+1,
-	range(M1,N,Ns).
diff --git a/examples/plcafe/thread.pl b/examples/plcafe/thread.pl
deleted file mode 100644
index 0c15dd1..0000000
--- a/examples/plcafe/thread.pl
+++ /dev/null
@@ -1,84 +0,0 @@
-%   File   : thread.pl
-%   Authors: Naoyuki Tamura (tamura@kobe-u.ac.jp)
-%            Mutsunori Banbara (banbara@kobe-u.ac.jp)
-%   Updated: 26 May 2008
-%   Purpose: Multi-thread execution
-%   Usage  :
-%	     % plcafe -cp queens.jar
-%	     ?- [thread].
-%	     ?- main.
-%         or
-%	     % plcafe -cp thread.jar:queens.jar
-%	     ?- main.
-
-main :-
-	statistics(runtime, _),
-	start,
-	statistics(runtime, [_,T]),
-	write('Time = '), write(T), 
-	write(' msec.'), nl.
-
-start :- 
-	G1 = (queens(10, X), write(X), nl),
-	msg(start1 = G1),
-	start(G1, E1),
-	G2 = (queens(8, Y), write(Y), nl),
-	msg(start2 = G2),
-	start(G2, E2),
-	loop(G1, E1, G2, E2),
-	stop(E1),
-	stop(E2),
-	msg(end).
-
-loop(G1, E1, G2, E2) :-
-	in_failure(E1),
-	in_failure(E2),
-	!.
-loop(G1, E1, G2, E2) :-
-	in_success(E1),
-	!,
-	cont(E1),
-	loop(G1, E1, G2, E2).
-loop(G1, E1, G2, E2) :-
-	in_success(E2),
-	!,
-	cont(E2),
-	loop(G1, E1, G2, E2).
-loop(G1, E1, G2, E2) :-
-	msg(waiting),
-	sleep(5),
-	loop(G1, E1, G2, E2).
-
-msg(Msg) :-
-	write(Msg), nl, flush_output.
-
-%%
-%% Utilities
-%%
-start(G, Engine) :-
-	java_constructor0('com.googlecode.prolog_cafe.lang.PrologControl', Engine),
-	java_method0(Engine, setPredicate(G), _),
-	java_method0(Engine, start, _).
-
-in_success(Engine) :-
-	java_get_field0('java.lang.Boolean', 'TRUE', T),
-	java_method(Engine, in_success, T).
-
-in_failure(Engine) :-
-	java_get_field0('java.lang.Boolean', 'TRUE', T),
-	java_method(Engine, in_failure, T).
-
-ready(Engine) :-
-	java_get_field0('java.lang.Boolean', 'TRUE', T),
-	java_method(Engine, ready, T).
-
-cont(Engine) :- java_method0(Engine, cont, _).
-
-join(Engine) :- java_method0(Engine, join, _).
-
-stop(Engine) :- java_method0(Engine, stop, _).
-
-sleep(N) :- java_method('java.lang.Thread', sleep(N), _).
-
-%result(Engine, Result) :- java_method0(Engine, next, Result).
-
diff --git a/examples/plcafe/thread2.pl b/examples/plcafe/thread2.pl
deleted file mode 100644
index 01280f4..0000000
--- a/examples/plcafe/thread2.pl
+++ /dev/null
@@ -1,66 +0,0 @@
-%   File   : thread2.pl
-%   Authors: Mutsunori Banbara (banbara@kobe-u.ac.jp)
-%            Naoyuki Tamura (tamura@kobe-u.ac.jp)
-%   Updated: 26 May 2008
-%   Purpose: Multi-thread execution
-%   Usage  :
-%	     % plcafe -cp queens.jar
-%	     ?- [thread2].
-%	     ?- main.
-%         or
-%	     % plcafe -cp thread2.jar:queens.jar
-%	     ?- main.
-
-main :-
-	statistics(runtime, _),
-	start,
-	statistics(runtime, [_,T]),
-	write('Time = '), write(T), 
-	write(' msec.'), nl.
-
-start :- 
-	G1 = (queens(10, X), write(X), nl, fail),
-	msg(start1 = G1),
-	start(G1, E1),
-	G2 = (queens(8, Y), write(Y), nl, fail),
-	msg(start2 = G2),
-	start(G2, E2),
-	join(E1),
-	join(E2),
-	stop(E1),
-	stop(E2),
-	msg(end).
-
-msg(Msg) :-
-	write(Msg), nl, flush_output.
-
-%%
-%% Utilities
-%%
-start(G, Engine) :-
-	java_constructor0('com.googlecode.prolog_cafe.lang.PrologControl', Engine),
-	java_method0(Engine, setPredicate(G), _),
-	java_method0(Engine, start, _).
-
-in_success(Engine) :-
-	java_get_field0('java.lang.Boolean', 'TRUE', T),
-	java_method(Engine, in_success, T).
-
-in_failure(Engine) :-
-	java_get_field0('java.lang.Boolean', 'TRUE', T),
-	java_method(Engine, in_failure, T).
-
-ready(Engine) :-
-	java_get_field0('java.lang.Boolean', 'TRUE', T),
-	java_method(Engine, ready, T).
-
-cont(Engine) :- java_method0(Engine, cont, _).
-
-join(Engine) :- java_method0(Engine, join, _).
-
-stop(Engine) :- java_method0(Engine, stop, _).
-
-sleep(N) :- java_method('java.lang.Thread', sleep(N), _).
-
-%result(Engine, Result) :- java_method0(Engine, next, Result).
-