diff options
-rw-r--r-- | src/driver/Makefile.in | 6 | ||||
-rw-r--r-- | src/driver/main.cc | 2 | ||||
-rw-r--r-- | src/driver/utils.cc | 21 | ||||
-rw-r--r-- | src/driver/utils.h | 111 | ||||
-rw-r--r-- | src/include/open-axiom.h | 95 |
5 files changed, 110 insertions, 125 deletions
diff --git a/src/driver/Makefile.in b/src/driver/Makefile.in index b590c513..5ad25526 100644 --- a/src/driver/Makefile.in +++ b/src/driver/Makefile.in @@ -38,6 +38,8 @@ open_axiom_objects = $(open_axiom_SOURCES:.cc=.lo) open_axiom_LDADD = -L$(builddir)/../lib $(oa_c_libs) +VPATH += $(top_srcdir)/src/include + .PHONY: all all-ax all-driver all: all-ax @@ -57,8 +59,8 @@ stamp: $(bin_PROGRAMS) -DOPENAXIOM_ROOT_DIRECTORY="\"$(open_axiom_installdir)\"" \ $(axiom_includes) $< -utils.lo: utils.h -main.lo: utils.h +utils.lo: open-axiom.h +main.lo: open-axiom.h open-axiom$(EXEEXT): $(open_axiom_objects) $(CXXLINK) -o $@ $(open_axiom_objects) $(open_axiom_LDADD) diff --git a/src/driver/main.cc b/src/driver/main.cc index 1436d42c..2621e1be 100644 --- a/src/driver/main.cc +++ b/src/driver/main.cc @@ -44,7 +44,7 @@ #include <locale.h> #include "cfuns.h" -#include "utils.h" +#include "open-axiom.h" #define OPENAXIOM_GLOBAL_ENV "AXIOM" diff --git a/src/driver/utils.cc b/src/driver/utils.cc index 9bffe781..498e2f4e 100644 --- a/src/driver/utils.cc +++ b/src/driver/utils.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2008-2010, Gabriel Dos Reis. + Copyright (C) 2008-2011, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -35,7 +35,7 @@ #include <string.h> #include <errno.h> #include <stdio.h> -#include "utils.h" +#include "open-axiom.h" namespace OpenAxiom { @@ -53,6 +53,12 @@ namespace OpenAxiom { #define OPENAXIOM_CORE_PATH \ "/bin/" OPENAXIOM_CORE_EXECUTABLE +#define OPENAXIOM_GUI_SUBPATH \ + "/bin/" OPENAXIOM_GUI_EXECUTABLE + +#define OPENAXIOM_GUI_EXECUTABLE \ + "gui" OPENAXIOM_EXEEXT + /* Path to the session manager, relative to OPENAXIOM_ROOT_DIRECTORY, or to the system root directory as specified on command line. */ #define OPENAXIOM_SMAN_PATH \ @@ -144,12 +150,15 @@ get_systemdir(int argc, char* argv[]) /* Return the path to `driver'. */ static const char* -get_driver_name(Driver driver) +get_driver_subpath(Driver driver) { switch (driver) { case sman_driver: return OPENAXIOM_SMAN_PATH; + case gui_driver: + return OPENAXIOM_GUI_SUBPATH; + case script_driver: case compiler_driver: case core_driver: @@ -168,7 +177,7 @@ const char* make_path_for(const char* prefix, Driver driver) { const int prefix_length = strlen(prefix); - const char* prog = get_driver_name(driver); + const char* prog = get_driver_subpath(driver); char* execpath = (char*) malloc(prefix_length + strlen(prog) + 1); strcpy(execpath, prefix); strcpy(execpath + prefix_length, prog); @@ -183,6 +192,7 @@ build_rts_options(Command* command, Driver driver) switch (driver) { case config_driver: case sman_driver: + case gui_driver: case execute_driver: case unknown_driver: break; @@ -241,6 +251,8 @@ build_rts_options(Command* command, Driver driver) #if OPENAXIOM_USE_SMAN # define OPENAXIOM_DEFAULT_DRIVER sman_driver +#elif OPENAXIOM_USE_GUI +# define OPENAXIOM_DEFAULT_DRIVER gui_driver #else # define OPENAXIOM_DEFAULT_DRIVER core_driver #endif @@ -389,6 +401,7 @@ preprocess_arguments(Command* command, int argc, char** argv) switch (driver) { case unknown_driver: case sman_driver: + case gui_driver: command->core.argc += 1; command->core.argv = (char**) malloc((other + 2) * sizeof(char*)); diff --git a/src/driver/utils.h b/src/driver/utils.h deleted file mode 100644 index be31d208..00000000 --- a/src/driver/utils.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - Copyright (C) 2008-2010, Gabriel Dos Reis. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of The Numerical ALgorithms Group Ltd. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef OPENAXIOM_UTILS_INCLUDED -#define OPENAXIOM_UTILS_INCLUDED - -#include "open-axiom.h" -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#ifdef __WIN32__ -# include <windows.h> -#endif - -#include <vector> - -namespace OpenAxiom { - // A list of drivers for OpenAxiom. - enum Driver { - unknown_driver, // unknown driver - null_driver, // do nothing - config_driver, // print out configuration information - sman_driver, // start Superman as master process - core_driver, // start the core system as master process - script_driver, // start the core system in script mode. - compiler_driver, // start the core system in compiler mode. - execute_driver, // Execute a command. - translator_driver, // Start the core system in translator mode. - linker_driver // start the core system in linking mode. - }; - - // A list of runtime support systems for OpenAxiom. - enum Runtime { - unknown_runtime, - gcl_runtime, // GCL-based runtime - sbcl_runtime, // SBCL-based runtime - clisp_runtime, // CLISP-based runtime - ecl_runtime, // ECL-based runtime - clozure_runtime, // Clozure CL-based runtime - bemol_runtime // Bemol-based runtime - }; - - // Command line arguments. - // When non empty, this vector really is of length one more than - // what size() reports, as it is always null-terminated, to comply - // with POSIX-style operating system requirements. - struct Arguments : std::vector<char*> { - explicit Arguments(int n = 0); - int size() const; - void allocate(int); - char* const* data() const; - }; - - // A description of external command to be executed. - struct Command { - Process core; // arguments for actual executable. - Arguments rt_args; // arguments to the base RT, if any. - const char* root_dir; // path to the OpenAxiom system. - const char* exec_path; // path to the program to execute. - Command(); - }; - - const char* get_systemdir(int argc, char*[]); - const char* make_path_for(const char*, Driver); - - // Return a pointer the string value associated with an option. - const char* option_value(const Command*, const char*); - - int execute_core(const Command*, Driver); - void build_rts_options(Command*, Driver); - - Driver preprocess_arguments(Command*, int, char**); - - // Return the length of an array literal. - template<typename T, int N> - inline int length(T(&)[N]) { - return N; - } -} - -#endif /* OPENAXIOM_UTILS_INCLUDED */ diff --git a/src/include/open-axiom.h b/src/include/open-axiom.h index 33be7e97..e230a825 100644 --- a/src/include/open-axiom.h +++ b/src/include/open-axiom.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2007-2010, Gabriel Dos Reis. + Copyright (C) 2007-2011, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -34,6 +34,8 @@ #ifndef OPENAXIOM_included #define OPENAXIOM_included +#include <vector> + #include "openaxiom-c-macros.h" /* Annotation to request C calling convention */ @@ -66,12 +68,12 @@ # include <inttypes.h> #endif -/* The opaque datatype. */ -#ifdef __WIN32__ +#if defined(__WIN32__) # include <windows.h> #endif - -#include <unistd.h> +#if defined(HAVE_UNISTD_H) +# include <unistd.h> +#endif /* Do we have graphics support? */ #ifdef X_DISPLAY_MISSING @@ -116,7 +118,7 @@ namespace OpenAxiom { } /* Internal field separator character. */ -#ifdef __WIN32__ +#if defined(__WIN32__) # define openaxiom_ifs ';' #else # define openaxiom_ifs ':' @@ -136,7 +138,7 @@ namespace OpenAxiom { static inline void openaxiom_sleep(int n) { -#ifdef __WIN32__ +#if defined(__WIN32__) Sleep(n * 1000); #else sleep(n); @@ -147,6 +149,85 @@ namespace OpenAxiom { OPENAXIOM_C_EXPORT int oa_spawn(Process*, SpawnFlags); OPENAXIOM_C_EXPORT const char* oa_concatenate_string(const char*, const char*); + // ------------ + // -- Driver -- + // ------------ + // A list of drivers for OpenAxiom. + enum Driver { + unknown_driver, // unknown driver + null_driver, // do nothing + config_driver, // print out configuration information + sman_driver, // start Superman as master process + gui_driver, // start the GUI interface + core_driver, // start the core system as master process + script_driver, // start the core system in script mode. + compiler_driver, // start the core system in compiler mode. + execute_driver, // Execute a command. + translator_driver, // Start the core system in translator mode. + linker_driver // start the core system in linking mode. + }; + + // ------------- + // -- Runtime -- + // ------------- + // A list of runtime support systems for OpenAxiom. + enum Runtime { + unknown_runtime, + gcl_runtime, // GCL-based runtime + sbcl_runtime, // SBCL-based runtime + clisp_runtime, // CLISP-based runtime + ecl_runtime, // ECL-based runtime + clozure_runtime, // Clozure CL-based runtime + bemol_runtime, // Bemol-based runtime + polyml_runtome // Poly/ML abstract machine-based runtime + }; + + // --------------- + // -- Arguments -- + // --------------- + // Command line arguments. + // When non empty, this vector really is of length one more than + // what size() reports, as it is always null-terminated, to comply + // with POSIX-style operating system requirements. + struct Arguments : std::vector<char*> { + explicit Arguments(int n = 0); + int size() const; + void allocate(int); + char* const* data() const; + }; + + // ------------- + // -- Command -- + // ------------- + // A description of external command to be executed. + struct Command { + Process core; // arguments for actual executable. + Arguments rt_args; // arguments to the base RT, if any. + const char* root_dir; // path to the OpenAxiom system. + const char* exec_path; // path to the program to execute. + Command(); + }; + + const char* get_systemdir(int argc, char*[]); + const char* make_path_for(const char*, Driver); + + // Return a pointer the string value associated with an option. + const char* option_value(const Command*, const char*); + + int execute_core(const Command*, Driver); + void build_rts_options(Command*, Driver); + + Driver preprocess_arguments(Command*, int, char**); + + // Return the length of an array literal. + template<typename T, int N> + inline int length(T(&)[N]) { + return N; + } } #endif /* OPENAXIOM_included */ + +// Local Variables: +// mode: c++ +// End: |