From 4d429676e2332f7dd8e6da16c72d1bf653c646d1 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Tue, 14 Apr 2009 04:22:57 +0000 Subject: Fix SF/2760560 * driver/utils.h (openaxiom_driver): Add openaxiom_null_driver. Document all of them. * driver/utils.c (print_line): New. (print_version): Print version information. (print_usage): Print option documentation. (openaxiom_preprocess_arguments): Handle --help and --version. * driver/main.c (main): Do nothing for the null driver. * sman/sman.c (process_arguments): Accept long form of options. --- config/openaxiom-c-macros.h.in | 19 ++++++-- src/ChangeLog | 12 +++++ src/driver/main.c | 4 +- src/driver/utils.c | 107 ++++++++++++++++++++++++++++++++--------- src/driver/utils.h | 13 ++--- src/sman/sman.c | 17 ++++--- 6 files changed, 131 insertions(+), 41 deletions(-) diff --git a/config/openaxiom-c-macros.h.in b/config/openaxiom-c-macros.h.in index d96918ce..a7cd9255 100644 --- a/config/openaxiom-c-macros.h.in +++ b/config/openaxiom-c-macros.h.in @@ -1,5 +1,8 @@ /* config/openaxiom-c-macros.h.in. Generated from configure.ac by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* BSD flavour */ #undef BSDplatform @@ -144,15 +147,23 @@ /* SunOS flavour */ #undef SUNplatform -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define for Solaris 2.5.1 so the uint8_t typedef from , - , or is not used. If the typedef was allowed, the + , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T diff --git a/src/ChangeLog b/src/ChangeLog index be6550a2..6682c239 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2009-04-13 Gabriel Dos Reis + + Fix SF/2760560 + * driver/utils.h (openaxiom_driver): Add openaxiom_null_driver. + Document all of them. + * driver/utils.c (print_line): New. + (print_version): Print version information. + (print_usage): Print option documentation. + (openaxiom_preprocess_arguments): Handle --help and --version. + * driver/main.c (main): Do nothing for the null driver. + * sman/sman.c (process_arguments): Accept long form of options. + 2009-04-13 Gabriel Dos Reis Fix SF/2757748 diff --git a/src/driver/main.c b/src/driver/main.c index 6f758cfd..4d83853a 100644 --- a/src/driver/main.c +++ b/src/driver/main.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2008, Gabriel Dos Reis. + Copyright (C) 2008-2009, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -76,6 +76,8 @@ main(int argc, char* argv[]) openaxiom_preprocess_arguments(&command, argc, argv); switch (driver) { + case openaxiom_null_driver: + return 0; /* Bye. */ case openaxiom_core_driver: case openaxiom_script_driver: case openaxiom_compiler_driver: diff --git a/src/driver/utils.c b/src/driver/utils.c index a5a0b7f5..92f89eb5 100644 --- a/src/driver/utils.c +++ b/src/driver/utils.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2008, Gabriel Dos Reis. + Copyright (C) 2008-2009, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -167,6 +167,53 @@ openaxiom_build_rts_options(openaxiom_command* command, #endif +static void print_line(const char* line) { + fputs(line, stdout); + fputc('\n', stdout); +} + +/* Print OpenAxiom version information. */ +static void print_version(void) { + print_line(PACKAGE_STRING); +} + +/* Print OpenAxiom invokation syntax (e.g. options) on standard + output stream. */ + +static void print_usage(void) { + print_line("Usage: open-axiom [options] [file]"); + print_line("General options:"); + print_line(" --help Print this information and exit."); + print_line(" --version Print OpenAxiom version and exit."); + print_line(" --script Execute the file argument as a Spad script."); + print_line(" If specified, this option should be last before file argument."); + print_line(" --compile Invoke the compiler on the file argument."); + print_line(" If specified, this option should be last before file argument."); + print_line(" --server Start the Superman as master process."); + print_line(" --no-server Do not start Superman as master process."); + print_line(""); + print_line("Superman options:"); + print_line(" --no-gui Do not start the Graphics or HyperDoc components."); + print_line(" --graph Start the Graphics component. This option is meaningful"); + print_line(" only if OpenAxiom was built with graphics support."); + print_line(" --no-graph Do not start the Graphics component."); + print_line(" --hyperdoc Start the HyperDoc component. This option is meaningful"); + print_line(" only if OpenAxiom was built with graphics support."); + print_line(" --no-hyperdoc Do not start the HyperDoc component."); + + print_line(""); + print_line("Compiler options:"); + print_line(" --optimize= Set compiler optimization level to , a natural number."); + print_line(""); + print_line("If invoked without options and without an input file " + "OpenAxiom will start as an interative program with Superman" + " as the master process, the majority of uses. If invoked " + "with a file as single argument, OpenAxiom assumes the file is a Spad " + "script and will attempt to execute it as such."); + print_line(""); + print_line("Submit bug report to " PACKAGE_BUGREPORT); +} + /* Determine driver to be used for executing `command'. */ openaxiom_driver openaxiom_preprocess_arguments(openaxiom_command* command, @@ -188,6 +235,16 @@ openaxiom_preprocess_arguments(openaxiom_command* command, driver = openaxiom_script_driver; else if(strcmp(argv[i], "--compile") == 0) driver = openaxiom_compiler_driver; + else if (strcmp(argv[i], "--help") == 0) { + print_usage(); + driver = openaxiom_null_driver; + break; + } + else if (strcmp(argv[i], "--version") == 0) { + print_version(); + driver = openaxiom_null_driver; + break; + } else { if (argv[i][0] == '-') /* Maybe option for the driver. */ @@ -205,30 +262,32 @@ openaxiom_preprocess_arguments(openaxiom_command* command, command->core_argc = other; command->core_argv = argv; - /* If we have a file but not instructed to compiler, assume - we are asked to interpret a script. */ - if (files > 0) - switch (driver) { - case openaxiom_unknown_driver: - case openaxiom_sman_driver: - command->core_argc += 1; - command->core_argv = - (char**) malloc((other + 2) * sizeof(char*)); - command->core_argv[0] = argv[0]; - command->core_argv[1] = "--script"; - for (i = 0; i < other; ++i) - command->core_argv[2 + i] = argv[1 + i]; - driver = openaxiom_script_driver; - break; - default: - /* Driver specified by user. */ - break; + if (driver != openaxiom_null_driver) { + /* If we have a file but not instructed to compiler, assume + we are asked to interpret a script. */ + if (files > 0) + switch (driver) { + case openaxiom_unknown_driver: + case openaxiom_sman_driver: + command->core_argc += 1; + command->core_argv = + (char**) malloc((other + 2) * sizeof(char*)); + command->core_argv[0] = argv[0]; + command->core_argv[1] = "--script"; + for (i = 0; i < other; ++i) + command->core_argv[2 + i] = argv[1 + i]; + driver = openaxiom_script_driver; + break; + default: + /* Driver specified by user. */ + break; + } + else if (driver == openaxiom_unknown_driver) + driver = OPENAXIOM_DEFAULT_DRIVER; + command->core_argv[command->core_argc] = NULL; + + openaxiom_build_rts_options(command, driver); } - else if (driver == openaxiom_unknown_driver) - driver = OPENAXIOM_DEFAULT_DRIVER; - command->core_argv[command->core_argc] = NULL; - - openaxiom_build_rts_options(command, driver); return driver; } diff --git a/src/driver/utils.h b/src/driver/utils.h index fd41434a..30f94912 100644 --- a/src/driver/utils.h +++ b/src/driver/utils.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2008, Gabriel Dos Reis. + Copyright (C) 2008-2009, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -44,11 +44,12 @@ /* A list of drivers for OpenAxiom. */ typedef enum openaxiom_driver { - openaxiom_unknown_driver, - openaxiom_sman_driver, - openaxiom_core_driver, - openaxiom_script_driver, - openaxiom_compiler_driver + openaxiom_unknown_driver, /* unknown driver */ + openaxiom_null_driver, /* do nothing */ + openaxiom_sman_driver, /* start Superman as master process */ + openaxiom_core_driver, /* start the core system as master process */ + openaxiom_script_driver, /* start the core system in script mode. */ + openaxiom_compiler_driver /* start the core system in compiler mode. */ } openaxiom_driver; /* A list of runtime support systems for OpenAxiom. */ diff --git a/src/sman/sman.c b/src/sman/sman.c index 3ef2e346..252778eb 100644 --- a/src/sman/sman.c +++ b/src/sman/sman.c @@ -1,7 +1,7 @@ /* Copyright (c) 1991-2002, The Numerical Algorithms Group Ltd. All rights reserved. - Copyright (C) 2007-2008, Gabriel Dos Reis. + Copyright (C) 2007-2009, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -157,21 +157,25 @@ process_arguments(openaxiom_command* command, int argc,char ** argv) start_clef = 0; else if (strcmp(argv[arg], "-clef") == 0) start_clef = 1; - else if (strcmp(argv[arg], "-gr") == 0) { + else if (strcmp(argv[arg], "-gr") == 0 + || strcmp(argv[arg], "--graph") == 0 ) { if (!OPENAXIOM_HAVE_GRAPHICS) fprintf(stderr, "OpenAxiom was not build with Graphics support.\n"); else start_graphics = 1; } - else if (strcmp(argv[arg], "-nogr") == 0) + else if (strcmp(argv[arg], "-nogr") == 0 + || strcmp(argv[arg], "--no-graph") == 0) start_graphics = 0; - else if (strcmp(argv[arg], "-ht") == 0) { + else if (strcmp(argv[arg], "-ht") == 0 + || strcmp(argv[arg], "--hyperdoc") == 0) { if (!OPENAXIOM_HAVE_GRAPHICS) fprintf(stderr, "OpenAxiom was not build with HyperDoc support.\n"); else start_ht = 1; } - else if (strcmp(argv[arg], "-noht") == 0) + else if (strcmp(argv[arg], "-noht") == 0 + || strcmp(argv[arg], "--no-hyperdoc") == 0) start_ht = 0; else if (strcmp(argv[arg], "-iw") == 0) start_spadclient = 1; @@ -183,7 +187,8 @@ process_arguments(openaxiom_command* command, int argc,char ** argv) start_spadclient = 0; else if (strcmp(argv[arg], "-comp") == 0) ws_path = "$AXIOM/etc/images/comp"; - else if (strcmp(argv[arg], "-nox") == 0) { + else if (strcmp(argv[arg], "-nox") == 0 + || strcmp(argv[arg], "--no-gui") == 0) { use_X = 0; start_local_spadclient = 1; start_spadclient = 0; -- cgit v1.2.3