content: //
  // Copyright (c) 2009, Jean-Claude Beaudoin
  // All rights reserved by the author.
  //
  // Permission is hereby granted, free of charge, to any person
  // obtaining a copy of this software and associated documentation
  // files (the "Software"), to deal in the Software without
  // restriction, including without limitation the rights to use, copy,
  // modify, merge, publish, distribute, sublicense, and/or sell copies
  // of the Software, and to permit persons to whom the Software is
  // furnished to do so, subject to the following conditions:
  //
  // The above copyright notice and this permission notice shall be
  // included in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  // DEALINGS IN THE SOFTWARE.
  //
  
  class ReplFromJava
  {
      public static native int read();
      public static native int eval(int ref) throws EndOfReplException,
  						  EvalAbortedException;
      public static native int print(int ref);
      public static native void prompt(String prompt);
  
      public static void repl()
      {
  	for (;;)
  	    {
  		int valueRead = 0;
  		int evalResult = 0;
  		int printResult = 0;
  
  		// Throwable foo = new cl_j.LispCondition(0);
  
  		try {
  		    prompt("ReplFromJava> ");
  		    valueRead = read();
  		    evalResult = eval(valueRead);
  		    printResult = print(evalResult);
  		} catch (EndOfReplException ex) {
  		    System.out.println("Lisp said: " + ex.getMessage());
  		    break;
  		} catch (EvalAbortedException ex) {
  		    prompt("; ReplFromJava: Evaluation aborted.");
  		} finally {
  
  		    LispRef.freeRef(valueRead);
  		    LispRef.freeRef(evalResult);
  		    LispRef.freeRef(printResult);
  		    // System.out.println("\nDone finally.");
  		}
  	    }
      }
  }