200 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
		
		
			
		
	
	
			200 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 
								 | 
							
								//tabstop=4
							 | 
						||
| 
								 | 
							
								//*****************************************************************************/
							 | 
						||
| 
								 | 
							
								// Project: jpl
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// File:    $Id: JPL.java,v 1.1 2004-08-27 20:27:56 vsc Exp $
							 | 
						||
| 
								 | 
							
								// Date:    $Date: 2004-08-27 20:27:56 $
							 | 
						||
| 
								 | 
							
								// Author:  Fred Dushin <fadushin@syr.edu>
							 | 
						||
| 
								 | 
							
								//          
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Description:
							 | 
						||
| 
								 | 
							
								//    
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// -------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2004 Paul Singleton
							 | 
						||
| 
								 | 
							
								// Copyright (c) 1998 Fred Dushin
							 | 
						||
| 
								 | 
							
								//                    All rights reserved.
							 | 
						||
| 
								 | 
							
								// 
							 | 
						||
| 
								 | 
							
								// This library is free software; you can redistribute it and/or
							 | 
						||
| 
								 | 
							
								// modify it under the terms of the GNU Library Public License
							 | 
						||
| 
								 | 
							
								// as published by the Free Software Foundation; either version 2
							 | 
						||
| 
								 | 
							
								// of the License, or (at your option) any later version.
							 | 
						||
| 
								 | 
							
								// 
							 | 
						||
| 
								 | 
							
								// This library is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								// but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						||
| 
								 | 
							
								// GNU Library Public License for more details.
							 | 
						||
| 
								 | 
							
								//*****************************************************************************/
							 | 
						||
| 
								 | 
							
								package jpl;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import jpl.fli.Prolog;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//----------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
								// JPL
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * The jpl.JPL class contains methods which allow (i) inspection and alteration
							 | 
						||
| 
								 | 
							
								 * of the "default" initialisation arguments (ii) explicit initialisation
							 | 
						||
| 
								 | 
							
								 * (iii) discovery of whether the Prolog engine is already initialised,
							 | 
						||
| 
								 | 
							
								 * and if so, with what arguments.
							 | 
						||
| 
								 | 
							
								 * The Prolog engine must be initialized 
							 | 
						||
| 
								 | 
							
								 * before any queries are made, but this will happen automatically
							 | 
						||
| 
								 | 
							
								 * (upon the first call to a Prolog FLI routine) if it has not already
							 | 
						||
| 
								 | 
							
								 * been done explicitly.
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * <hr><i>
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2004  Paul Singleton<p>
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 1998  Fred Dushin<p>
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * This library is free software; you can redistribute it and/or
							 | 
						||
| 
								 | 
							
								 * modify it under the terms of the GNU Library Public License
							 | 
						||
| 
								 | 
							
								 * as published by the Free Software Foundation; either version 2
							 | 
						||
| 
								 | 
							
								 * of the License, or (at your option) any later version.<p>
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * This library is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								 * but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						||
| 
								 | 
							
								 * GNU Library Public License for more details.<p>
							 | 
						||
| 
								 | 
							
								 * </i><hr>
							 | 
						||
| 
								 | 
							
								 * @author  Fred Dushin <fadushin@syr.edu>
							 | 
						||
| 
								 | 
							
								 * @version $Revision: 1.1 $
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								public class JPL {
							 | 
						||
| 
								 | 
							
									protected static final boolean DEBUG = false;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									protected static boolean modeDontTellMe = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// setDTMMode
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Sets the global "dont-tell-me" mode (default value: true).
							 | 
						||
| 
								 | 
							
									 * When 'true', bindings will *not* be returned for any variable (in a Query's goal)
							 | 
						||
| 
								 | 
							
									 * whose name begins with an underscore character (except for "anonymous" variables,
							 | 
						||
| 
								 | 
							
									 * i.e. those whose name comprises just the underscore character, whose bindings are never returned).
							 | 
						||
| 
								 | 
							
									 * When 'false', bindings are returned for *all* variables except anonymous ones;
							 | 
						||
| 
								 | 
							
									 * this mode may be useful when traditional top-level interpreter behaviour is wanted,
							 | 
						||
| 
								 | 
							
									 * e.g. in a Java-based Prolog IDE or debugger.<p>
							 | 
						||
| 
								 | 
							
									 * This method should be regarded as experimental, and may subsequently be deprecated
							 | 
						||
| 
								 | 
							
									 * in favour of some more general mechanism for setting options, perhaps per-Query and
							 | 
						||
| 
								 | 
							
									 * per-call as well as globally.
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @param    dtm	new "dont-tell-me" mode value
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static void setDTMMode( boolean dtm){
							 | 
						||
| 
								 | 
							
										modeDontTellMe = dtm;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// getDefaultInitArgs
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Returns, in an array of String, the sequence of command-line
							 | 
						||
| 
								 | 
							
									 * arguments that would be used if the Prolog engine were to be initialised now.
							 | 
						||
| 
								 | 
							
									 * Returns null if the Prolog VM has already been initialised (in which
							 | 
						||
| 
								 | 
							
									 * case the default init args are irrelevant and the actual init args are of interest)<p>
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @see jpl.JPL#getActualInitArgs
							 | 
						||
| 
								 | 
							
									 * @return   current default initialisation arguments, or null if already initialised
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static String[] getDefaultInitArgs() {
							 | 
						||
| 
								 | 
							
										return Prolog.get_default_init_args();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// setDefaultInitArgs
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Specifies, in an array of String, the sequence of command-line
							 | 
						||
| 
								 | 
							
									 * arguments that should be used if the Prolog engine is subsequently initialised.<p>
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @param   args	new default initialization arguments
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static void setDefaultInitArgs(String[] args) {
							 | 
						||
| 
								 | 
							
										Prolog.set_default_init_args(args);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// getActualInitArgs
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Returns, in an array of String, the sequence of command-line
							 | 
						||
| 
								 | 
							
									 * arguments that were actually used when the Prolog engine was formerly initialised.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * This method returns null if the Prolog engine has not yet been initialised,
							 | 
						||
| 
								 | 
							
									 * and thus may be used to test this condition.
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @return   actual initialization arguments
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static String[] getActualInitArgs() {
							 | 
						||
| 
								 | 
							
										return Prolog.get_actual_init_args();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// init
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Initializes the Prolog engine, using the String argument
							 | 
						||
| 
								 | 
							
									 * parameters passed.  This method need be called only if you want to both
							 | 
						||
| 
								 | 
							
									 * (i) initialise the Prolog engine with parameters other than the default ones
							 | 
						||
| 
								 | 
							
									 * and (ii) force initialisation to occur
							 | 
						||
| 
								 | 
							
									 * (rather than allow it to occur automatically at the first query).
							 | 
						||
| 
								 | 
							
									 * For parameter options, consult your local
							 | 
						||
| 
								 | 
							
									 * Prolog documentation.  The parameter values are passed directly
							 | 
						||
| 
								 | 
							
									 * to initialization routines for the Prolog environment.<p>
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * This method must be called before making any queries.
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @param   args   Initialization parameter list
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static boolean init(String[] args) {
							 | 
						||
| 
								 | 
							
										return Prolog.set_default_init_args(args) && init();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// init
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Initialises the Prolog engine using the current default initialisation parameters,
							 | 
						||
| 
								 | 
							
									 * and returns 'true' (or 'false' if already initialised).
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static boolean init() {
							 | 
						||
| 
								 | 
							
										return Prolog.initialise();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// halt
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Terminates the Prolog session.<p>
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * <b>Note.</b>  This method calls the FLI halt() method with a
							 | 
						||
| 
								 | 
							
									 * status of 0, but the halt method currently is a no-op in SWI.
							 | 
						||
| 
								 | 
							
									 * @deprecated
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static void halt() {
							 | 
						||
| 
								 | 
							
										Prolog.halt(0);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// a static reference to the current Version
							 | 
						||
| 
								 | 
							
									private static final Version version_ = new Version();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// version
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Returns (as a Version) an identification of this version of JPL.
							 | 
						||
| 
								 | 
							
									 * @return the running version of JPL.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static Version version() {
							 | 
						||
| 
								 | 
							
										return version_;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//------------------------------------------------------------------/
							 | 
						||
| 
								 | 
							
									// version_string
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Returns a String (eg "3.0.0-alpha") identifying this version of JPL.
							 | 
						||
| 
								 | 
							
									 * @return a String (eg "3.0.0-alpha") identifying this version of JPL.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public static String version_string() {
							 | 
						||
| 
								 | 
							
										return version_.major + "." + version_.minor + "." + version_.patch + "-" + version_.status;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static void main(String[] args) {
							 | 
						||
| 
								 | 
							
										System.out.println(version_string());
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//345678901234567890123456789012346578901234567890123456789012345678901234567890
							 |