core: Expose command line.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 3 Jan 2017 22:41:11 +0000 (23:41 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 4 Jan 2017 08:16:18 +0000 (09:16 +0100)
* mes.c (scm_symbol_argv): New symbol
  (main): Use it to add argv to environment.
* module/mes/base.mes (command-line): New function.

mes.c
module/mes/base.mes

diff --git a/mes.c b/mes.c
index a506102f6386ab11336628bd024c0a608ae5c230..3d7be3e3e9845b56407bf3b0e6f7044e6026721a 100644 (file)
--- a/mes.c
+++ b/mes.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * Mes --- Maxwell Equations of Software
- * Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
  *
  * This file is part of Mes.
  *
@@ -102,6 +102,7 @@ scm scm_symbol_primitive_load = {SYMBOL, "primitive-load"};
 scm scm_symbol_read_input_file = {SYMBOL, "read-input-file"};
 scm scm_symbol_write = {SYMBOL, "write"};
 scm scm_symbol_display = {SYMBOL, "display"};
+scm scm_symbol_argv = {SYMBOL, "argv"};
 
 scm scm_symbol_mes_version = {SYMBOL, "%version"};
 scm scm_symbol_mes_prefix = {SYMBOL, "%prefix"};
@@ -1020,6 +1021,11 @@ main (int argc, char *argv[])
   SCM program = (argc > 1 && !strcmp (argv[1], "--load"))
     ? bload_env (r0) : load_env (r0);
   if (argc > 1 && !strcmp (argv[1], "--dump")) return dump ();
+
+  SCM lst = cell_nil;
+  for (int i=argc; i; i--) lst = cons (MAKE_STRING (cstring_to_list (argv[i-1])), lst);
+  r0 = acons (cell_symbol_argv, lst, r0);
+
   stderr_ (begin_env (program, r0));
   fputs ("", stderr);
   gc (g_stack);
index 83994495e162e354c171c1b77d670662c6d16944..f3f1ce00ee62ff70f40d0c49c88d2ccde0aba554 100644 (file)
@@ -1,7 +1,7 @@
 ;;; -*-scheme-*-
 
 ;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of Mes.
 ;;;
@@ -42,6 +42,8 @@
 
 (define (identity x) x)
 
+(define (command-line) argv)
+
 (define-macro (or . x)
   (if (null? x) #f
       (if (null? (cdr x)) (car x)