Add preliminaty process-state-as-bytevectors code
This commit is contained in:
parent
5815921625
commit
61935bd866
68
c/env.c
68
c/env.c
|
@ -10,6 +10,9 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <unistd.h> // TODO: Unix only
|
||||||
|
extern char **environ; // TODO: Unix only
|
||||||
|
|
||||||
#include "scheme.h"
|
#include "scheme.h"
|
||||||
|
|
||||||
#define BITSIZEOF(t) (sizeof(t) * CHAR_BIT)
|
#define BITSIZEOF(t) (sizeof(t) * CHAR_BIT)
|
||||||
|
@ -359,17 +362,74 @@ value_t builtin_command_line(value_t *args, uint32_t nargs)
|
||||||
return fl_cons(cmdname, cmdargs);
|
return fl_cons(cmdname, cmdargs);
|
||||||
}
|
}
|
||||||
|
|
||||||
value_t builtin_os_command_line(value_t *args, uint32_t nargs)
|
//
|
||||||
|
|
||||||
|
value_t builtin_os_current_directory_as_bytevector(value_t *args,
|
||||||
|
uint32_t nargs)
|
||||||
{
|
{
|
||||||
(void)args;
|
(void)args;
|
||||||
argcount("os-command-line", nargs, 0);
|
argcount("os-current-directory-as-bytevector", nargs, 0);
|
||||||
|
return string_from_cstr(getcwd(NULL, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
value_t builtin_os_environment_variable_as_bytevector(value_t *args,
|
||||||
|
uint32_t nargs)
|
||||||
|
{
|
||||||
|
argcount("os-environment-variable-as-bytevector", nargs, 1);
|
||||||
|
char *name = tostring(args[0], "os-environment-variable-as-bytevector");
|
||||||
|
const char *value = getenv(name);
|
||||||
|
return value ? string_from_cstr(value) : FL_F;
|
||||||
|
}
|
||||||
|
|
||||||
|
value_t builtin_os_environment_variables_as_bytevectors(value_t *args,
|
||||||
|
uint32_t nargs)
|
||||||
|
{
|
||||||
|
char **varp;
|
||||||
|
const char *var;
|
||||||
|
const char *sep;
|
||||||
|
value_t head, tail, newtail;
|
||||||
|
|
||||||
|
(void)args;
|
||||||
|
argcount("os-environment-variables-as-bytevectors", nargs, 0);
|
||||||
|
head = tail = newtail = FL_NIL;
|
||||||
|
fl_gc_handle(&head);
|
||||||
|
fl_gc_handle(&tail);
|
||||||
|
fl_gc_handle(&newtail);
|
||||||
|
head = tail = fl_cons(FL_NIL, FL_NIL);
|
||||||
|
for (varp = environ; (var = *varp); varp++) {
|
||||||
|
if ((sep = strchr(var, '='))) {
|
||||||
|
newtail = fl_cons(string_from_cstrn(var, sep - var),
|
||||||
|
string_from_cstr(sep + 1));
|
||||||
|
} else {
|
||||||
|
newtail = fl_cons(string_from_cstr(var), FL_NIL);
|
||||||
|
}
|
||||||
|
newtail = fl_cons(newtail, FL_NIL);
|
||||||
|
cdr_(tail) = newtail;
|
||||||
|
tail = newtail;
|
||||||
|
}
|
||||||
|
fl_free_gc_handles(3);
|
||||||
|
return cdr_(head);
|
||||||
|
}
|
||||||
|
|
||||||
|
value_t builtin_os_command_line_as_bytevector(value_t *args, uint32_t nargs)
|
||||||
|
{
|
||||||
|
(void)args;
|
||||||
|
argcount("os-command-line-as-bytevector", nargs, 0);
|
||||||
|
return FL_F;
|
||||||
|
}
|
||||||
|
|
||||||
|
value_t builtin_os_command_line_as_bytevectors(value_t *args, uint32_t nargs)
|
||||||
|
{
|
||||||
|
(void)args;
|
||||||
|
argcount("os-command-line-as-bytevectors", nargs, 0);
|
||||||
return os_command_line;
|
return os_command_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
value_t builtin_os_executable_file(value_t *args, uint32_t nargs)
|
value_t builtin_os_executable_file_as_bytevector(value_t *args,
|
||||||
|
uint32_t nargs)
|
||||||
{
|
{
|
||||||
(void)args;
|
(void)args;
|
||||||
argcount("os-executable-file", nargs, 0);
|
argcount("os-executable-file-as-bytevector", nargs, 0);
|
||||||
char buf[512];
|
char buf[512];
|
||||||
char *exe = get_exename(buf, sizeof(buf));
|
char *exe = get_exename(buf, sizeof(buf));
|
||||||
return exe ? string_from_cstr(exe) : FL_F;
|
return exe ? string_from_cstr(exe) : FL_F;
|
||||||
|
|
|
@ -68,8 +68,6 @@ static struct builtin_procedure builtin_procedures[] = {
|
||||||
{ "command-name", builtin_command_name, UP_2019 },
|
{ "command-name", builtin_command_name, UP_2019 },
|
||||||
{ "command-args", builtin_command_args, UP_2019 },
|
{ "command-args", builtin_command_args, UP_2019 },
|
||||||
{ "command-line", builtin_command_line, UP_2019 },
|
{ "command-line", builtin_command_line, UP_2019 },
|
||||||
{ "os-command-line", builtin_os_command_line, UP_2019 },
|
|
||||||
{ "os-executable-file", builtin_os_executable_file, UP_2019 },
|
|
||||||
|
|
||||||
{ "string?", fl_stringp, SRFI_13 | R7RS_BASE | UP_2019 },
|
{ "string?", fl_stringp, SRFI_13 | R7RS_BASE | UP_2019 },
|
||||||
{ "string-reverse", fl_string_reverse, SRFI_13 | UP_2019 },
|
{ "string-reverse", fl_string_reverse, SRFI_13 | UP_2019 },
|
||||||
|
@ -109,6 +107,19 @@ static struct builtin_procedure builtin_procedures[] = {
|
||||||
{ "set-environment-variable", builtin_set_environment_variable,
|
{ "set-environment-variable", builtin_set_environment_variable,
|
||||||
R7RS_PROCESS_CONTEXT | UP_2019 },
|
R7RS_PROCESS_CONTEXT | UP_2019 },
|
||||||
|
|
||||||
|
{ "os-current-directory-as-bytevector",
|
||||||
|
builtin_os_current_directory_as_bytevector, UP_2019 },
|
||||||
|
{ "os-environment-variable-as-bytevector",
|
||||||
|
builtin_os_environment_variable_as_bytevector, UP_2019 },
|
||||||
|
{ "os-environment-variables-as-bytevectors",
|
||||||
|
builtin_os_environment_variables_as_bytevectors, UP_2019 },
|
||||||
|
{ "os-command-line-as-bytevector", builtin_os_command_line_as_bytevector,
|
||||||
|
UP_2019 },
|
||||||
|
{ "os-command-line-as-bytevectors",
|
||||||
|
builtin_os_command_line_as_bytevectors, UP_2019 },
|
||||||
|
{ "os-executable-file-as-bytevector",
|
||||||
|
builtin_os_executable_file_as_bytevector, UP_2019 },
|
||||||
|
|
||||||
{ "ascii-codepoint?", builtin_ascii_codepoint_p, SRFI_175 | UP_2019 },
|
{ "ascii-codepoint?", builtin_ascii_codepoint_p, SRFI_175 | UP_2019 },
|
||||||
//{ "ascii-bytevector?", builtin_ascii_bytevector_p, SRFI_175 | UP_2019 },
|
//{ "ascii-bytevector?", builtin_ascii_bytevector_p, SRFI_175 | UP_2019 },
|
||||||
{ "ascii-char?", builtin_ascii_char_p, SRFI_175 | UP_2019 },
|
{ "ascii-char?", builtin_ascii_char_p, SRFI_175 | UP_2019 },
|
||||||
|
|
|
@ -1015,8 +1015,13 @@ value_t builtin_script_directory(value_t *args, uint32_t nargs);
|
||||||
value_t builtin_command_name(value_t *args, uint32_t nargs);
|
value_t builtin_command_name(value_t *args, uint32_t nargs);
|
||||||
value_t builtin_command_args(value_t *args, uint32_t nargs);
|
value_t builtin_command_args(value_t *args, uint32_t nargs);
|
||||||
value_t builtin_command_line(value_t *args, uint32_t nargs);
|
value_t builtin_command_line(value_t *args, uint32_t nargs);
|
||||||
value_t builtin_os_command_line(value_t *args, uint32_t nargs);
|
|
||||||
value_t builtin_os_executable_file(value_t *args, uint32_t nargs);
|
value_t builtin_os_current_directory_as_bytevector(value_t *args, uint32_t nargs);
|
||||||
|
value_t builtin_os_environment_variable_as_bytevector(value_t *args, uint32_t nargs);
|
||||||
|
value_t builtin_os_environment_variables_as_bytevectors(value_t *args, uint32_t nargs);
|
||||||
|
value_t builtin_os_command_line_as_bytevector(value_t *args, uint32_t nargs);
|
||||||
|
value_t builtin_os_command_line_as_bytevectors(value_t *args, uint32_t nargs);
|
||||||
|
value_t builtin_os_executable_file_as_bytevector(value_t *args, uint32_t nargs);
|
||||||
|
|
||||||
// env_*.c
|
// env_*.c
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue