From e46bd032393b19e9f52fa2924b9775fc26c37097 Mon Sep 17 00:00:00 2001 From: okuoku Date: Wed, 13 Dec 2017 18:50:42 +0900 Subject: [PATCH] (chibi win32 process-win32): New library Implement Win32 specific process library. Currently the library only provides `exit` procedure. --- Makefile | 3 +++ lib/chibi/win32/process-win32.scm | 7 +++++++ lib/chibi/win32/process-win32.sld | 5 +++++ lib/chibi/win32/process-win32.stub | 5 +++++ lib/scheme/process-context.sld | 4 +++- 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 lib/chibi/win32/process-win32.scm create mode 100644 lib/chibi/win32/process-win32.sld create mode 100644 lib/chibi/win32/process-win32.stub diff --git a/Makefile b/Makefile index e0c22fc7..fbd63c4e 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,7 @@ CHIBI_COMPILED_LIBS = lib/chibi/filesystem$(SO) lib/chibi/weak$(SO) \ lib/chibi/emscripten$(SO) CHIBI_POSIX_COMPILED_LIBS = lib/chibi/process$(SO) lib/chibi/time$(SO) \ lib/chibi/system$(SO) lib/chibi/stty$(SO) lib/chibi/net$(SO) +CHIBI_WIN32_COMPILED_LIBS = lib/chibi/win32/process-win32$(SO) CHIBI_CRYPTO_COMPILED_LIBS = lib/chibi/crypto/crypto$(SO) CHIBI_IO_COMPILED_LIBS = lib/chibi/io/io$(SO) CHIBI_OPT_COMPILED_LIBS = lib/chibi/optimize/rest$(SO) \ @@ -37,6 +38,8 @@ EXTRA_COMPILED_LIBS ?= ifndef EXCLUDE_POSIX_LIBS CHIBI_COMPILED_LIBS += $(CHIBI_POSIX_COMPILED_LIBS) +else +CHIBI_COMPILED_LIBS += $(CHIBI_WIN32_COMPILED_LIBS) endif COMPILED_LIBS = $(CHIBI_COMPILED_LIBS) $(CHIBI_IO_COMPILED_LIBS) \ diff --git a/lib/chibi/win32/process-win32.scm b/lib/chibi/win32/process-win32.scm new file mode 100644 index 00000000..802c5cb4 --- /dev/null +++ b/lib/chibi/win32/process-win32.scm @@ -0,0 +1,7 @@ +(define (exit . code?) + (%exit (if (pair? code?) + (let ((c (car code?))) + (cond ((integer? c) c) + ((eq? #t c) 0) + (else 1))) + 0))) diff --git a/lib/chibi/win32/process-win32.sld b/lib/chibi/win32/process-win32.sld new file mode 100644 index 00000000..c798e035 --- /dev/null +++ b/lib/chibi/win32/process-win32.sld @@ -0,0 +1,5 @@ +(define-library (chibi win32 process-win32) + (import (scheme base)) + (export %exit) + (include-shared "process-win32") + (include "process-win32.scm")) diff --git a/lib/chibi/win32/process-win32.stub b/lib/chibi/win32/process-win32.stub new file mode 100644 index 00000000..a01619ff --- /dev/null +++ b/lib/chibi/win32/process-win32.stub @@ -0,0 +1,5 @@ +;;> An interface to Win32 MSVCRT provided process functions and Win32 APIs + +(c-system-include "stdlib.h") + +(define-c void (%exit exit) (int)) diff --git a/lib/scheme/process-context.sld b/lib/scheme/process-context.sld index 29aab00a..3639b596 100644 --- a/lib/scheme/process-context.sld +++ b/lib/scheme/process-context.sld @@ -1,6 +1,8 @@ (define-library (scheme process-context) - (import (chibi) (srfi 98) (only (chibi process) exit)) + (import (chibi) (srfi 98)) + (cond-expand (windows (import (only (chibi win32 process-win32) exit))) + (else (import (only (chibi process) exit)))) (export get-environment-variable get-environment-variables command-line exit emergency-exit) ;; TODO: Make exit unwind and finalize properly.