~ chicken-core (chicken-5) 8ebea4a70de449b883f9f973e8d41772eb7bc340


commit 8ebea4a70de449b883f9f973e8d41772eb7bc340
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Wed Feb 11 09:06:06 2015 +1300
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Sun Jul 19 21:12:54 2015 +1200

    Convert the posix unit into a module

diff --git a/README b/README
index f58d5366..84d4e9fc 100644
--- a/README
+++ b/README
@@ -288,6 +288,7 @@
 	|   |       |-- chicken.files.import.so
 	|   |       |-- chicken.lolevel.import.so
 	|   |       |-- chicken.ports.import.so
+	|   |       |-- chicken.posix.import.so
 	|   |       |-- chicken.tcp.import.so
 	|   |       |-- chicken.utils.import.so
 	|   |       |-- csi.import.so
@@ -295,7 +296,6 @@
 	|   |       |-- foreign.import.so
 	|   |       |-- irregex.import.so
 	|   |       |-- modules.db
-	|   |       |-- posix.import.so
 	|   |       |-- setup-api.import.so
 	|   |       |-- setup-api.so
 	|   |       |-- setup-download.import.so
diff --git a/chicken-bug.scm b/chicken-bug.scm
index 926932c0..c0be407c 100644
--- a/chicken-bug.scm
+++ b/chicken-bug.scm
@@ -26,8 +26,9 @@
 
 (require-library posix tcp data-structures utils extras)
 
-(import posix extras
+(import extras
 	chicken.data-structures
+	chicken.posix
 	chicken.tcp
 	chicken.utils)
 
diff --git a/chicken-install.scm b/chicken-install.scm
index 5e8e2188..3c3170fd 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -29,13 +29,14 @@
 
 (module main ()
 
-  (import scheme chicken posix irregex extras)
+  (import scheme chicken irregex extras)
   (import setup-download setup-api)
 
   (import foreign)
   (import chicken.data-structures
 	  chicken.files
 	  chicken.ports
+	  chicken.posix
 	  chicken.utils)
 
   (include "mini-srfi-1.scm")
@@ -49,11 +50,11 @@
       "chicken.files.import.so"
       "chicken.lolevel.import.so"
       "chicken.ports.import.so"
+      "chicken.posix.import.so"
       "chicken.tcp.import.so"
       "chicken.utils.import.so"
       "srfi-1.import.so"
       "srfi-4.import.so"
-      "posix.import.so"
       "extras.import.so"
       "foreign.import.so"
       "csi.import.so"
diff --git a/chicken-profile.scm b/chicken-profile.scm
index 5e340de7..61ec0050 100644
--- a/chicken-profile.scm
+++ b/chicken-profile.scm
@@ -30,7 +30,8 @@
   (uses data-structures
 	posix))
 
-(import chicken.data-structures)
+(import chicken.data-structures
+	chicken.posix)
 
 (include "mini-srfi-1.scm")
 
diff --git a/chicken-status.scm b/chicken-status.scm
index 7d7a8255..a780841a 100644
--- a/chicken-status.scm
+++ b/chicken-status.scm
@@ -30,10 +30,11 @@
 (module main ()
   
   (import scheme chicken foreign)
-  (import posix irregex setup-api extras)
+  (import irregex setup-api extras)
   (import chicken.data-structures
 	  chicken.files
-	  chicken.ports)
+	  chicken.ports
+	  chicken.posix)
 
   (include "mini-srfi-1.scm")
 
diff --git a/chicken-uninstall.scm b/chicken-uninstall.scm
index 39c8ea71..e4e90212 100644
--- a/chicken-uninstall.scm
+++ b/chicken-uninstall.scm
@@ -33,10 +33,11 @@
   
   (import scheme chicken foreign)
   (import setup-api)
-  (import posix irregex)
+  (import irregex)
   (import chicken.data-structures
 	  chicken.files
 	  chicken.ports
+	  chicken.posix
 	  chicken.utils)
 
   (include "mini-srfi-1.scm")
diff --git a/defaults.make b/defaults.make
index 5655bf10..07eca241 100644
--- a/defaults.make
+++ b/defaults.make
@@ -268,8 +268,9 @@ CHICKEN_PROGRAM_OPTIONS += $(if $(PROFILE_OBJECTS),-profile)
 # import libraries
 
 PRIMITIVE_IMPORT_LIBRARIES = chicken srfi-4
-PRIMITIVE_IMPORT_LIBRARIES += posix extras foreign csi irregex
+PRIMITIVE_IMPORT_LIBRARIES += extras foreign csi irregex
 PRIMITIVE_IMPORT_LIBRARIES += setup-api setup-download
+POSIX_IMPORT_LIBRARY = posix
 DYNAMIC_IMPORT_LIBRARIES = data-structures files lolevel ports tcp utils
 
 # targets
@@ -282,7 +283,7 @@ CHICKEN_INSTALL_PROGRAM = $(PROGRAM_PREFIX)chicken-install$(PROGRAM_SUFFIX)
 CHICKEN_UNINSTALL_PROGRAM = $(PROGRAM_PREFIX)chicken-uninstall$(PROGRAM_SUFFIX)
 CHICKEN_STATUS_PROGRAM = $(PROGRAM_PREFIX)chicken-status$(PROGRAM_SUFFIX)
 CHICKEN_BUG_PROGRAM = $(PROGRAM_PREFIX)chicken-bug$(PROGRAM_SUFFIX)
-IMPORT_LIBRARIES = $(PRIMITIVE_IMPORT_LIBRARIES) \
+IMPORT_LIBRARIES = $(PRIMITIVE_IMPORT_LIBRARIES) chicken.$(POSIX_IMPORT_LIBRARY) \
 		   $(foreach lib,$(DYNAMIC_IMPORT_LIBRARIES),chicken.$(lib))
 
 ifdef STATICBUILD
diff --git a/distribution/manifest b/distribution/manifest
index 7525f68c..8edaf0bd 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -246,6 +246,8 @@ chicken.lolevel.import.scm
 chicken.lolevel.import.c
 chicken.ports.import.scm
 chicken.ports.import.c
+chicken.posix.import.scm
+chicken.posix.import.c
 chicken.tcp.import.scm
 chicken.tcp.import.c
 chicken.utils.import.scm
@@ -253,11 +255,9 @@ chicken.utils.import.c
 foreign.import.scm
 foreign.import.c
 srfi-4.import.scm
-posix.import.scm
 extras.import.scm
 irregex.import.scm
 srfi-4.import.c
-posix.import.c
 extras.import.c
 irregex.import.c
 csi.import.scm
diff --git a/modules.scm b/modules.scm
index f0159c22..d6649322 100644
--- a/modules.scm
+++ b/modules.scm
@@ -917,6 +917,7 @@
 (##sys#register-module-alias 'files 'chicken.files)
 (##sys#register-module-alias 'lolevel 'chicken.lolevel)
 (##sys#register-module-alias 'ports 'chicken.ports)
+(##sys#register-module-alias 'posix 'chicken.posix)
 (##sys#register-module-alias 'tcp 'chicken.tcp)
 (##sys#register-module-alias 'utils 'chicken.utils)
 
diff --git a/posix-common.scm b/posix-common.scm
index b0280ba0..70772baa 100644
--- a/posix-common.scm
+++ b/posix-common.scm
@@ -25,7 +25,6 @@
 
 
 (declare 
-  (hide ##sys#stat posix-error check-time-vector ##sys#find-files)
   (foreign-declare #<<EOF
 
 #include <signal.h>
@@ -352,6 +351,9 @@ EOF
 (define fileno/stdout _stdout_fileno)
 (define fileno/stderr _stderr_fileno)
 
+(define open-input-file*)
+(define open-output-file*)
+
 (let ()
   (define (mode inp m loc)
     (##sys#make-c-string
diff --git a/posix.import.scm b/posix.import.scm
deleted file mode 100644
index 8e06dfe7..00000000
--- a/posix.import.scm
+++ /dev/null
@@ -1,248 +0,0 @@
-;;;; posix.import.scm - import library for "posix" module
-;
-; Copyright (c) 2008-2015, The CHICKEN Team
-; 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 author 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 HOLDERS 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.
-
-
-(##sys#register-primitive-module
- 'posix
- '(_exit
-   call-with-input-pipe
-   call-with-output-pipe
-   change-directory
-   change-directory*
-   change-file-mode
-   change-file-owner
-   close-input-pipe
-   close-output-pipe
-   create-directory
-   create-fifo
-   create-pipe
-   create-session
-   create-symbolic-link
-   current-directory
-   current-effective-group-id
-   current-effective-user-id
-   current-effective-user-name
-   get-environment-variables
-   current-group-id
-   current-process-id
-   current-user-id
-   current-user-name
-   delete-directory
-   directory
-   directory?
-   duplicate-fileno
-   errno/2big
-   errno/acces
-   errno/again
-   errno/badf
-   errno/busy
-   errno/child
-   errno/deadlk
-   errno/dom
-   errno/exist
-   errno/fault
-   errno/fbig
-   errno/ilseq
-   errno/intr
-   errno/inval
-   errno/io
-   errno/isdir
-   errno/mfile
-   errno/mlink
-   errno/nametoolong
-   errno/nfile
-   errno/nodev
-   errno/noent
-   errno/noexec
-   errno/nolck
-   errno/nomem
-   errno/nospc
-   errno/nosys
-   errno/notdir
-   errno/notempty
-   errno/notty
-   errno/nxio
-   errno/perm
-   errno/pipe
-   errno/range
-   errno/rofs
-   errno/spipe
-   errno/srch
-   errno/wouldblock
-   errno/xdev
-   fcntl/dupfd
-   fcntl/getfd
-   fcntl/getfl
-   fcntl/setfd
-   fcntl/setfl
-   fifo?
-   file-access-time
-   file-change-time
-   file-creation-mode
-   file-close
-   file-control
-   file-execute-access?
-   file-link
-   file-lock
-   file-lock/blocking
-   file-mkstemp
-   file-modification-time
-   file-open
-   file-owner
-   file-permissions
-   file-position
-   set-file-position!
-   file-read
-   file-read-access?
-   file-select
-   file-size
-   file-stat
-   file-test-lock
-   file-truncate
-   file-type
-   file-unlock
-   file-write
-   file-write-access?
-   fileno/stderr
-   fileno/stdin
-   fileno/stdout
-   find-files
-   get-groups
-   get-host-name
-   glob
-   group-information
-   initialize-groups
-   local-time->seconds
-   local-timezone-abbreviation
-   open-input-file*
-   open-input-pipe
-   open-output-file*
-   open-output-pipe
-   open/append
-   open/binary
-   open/creat
-   open/excl
-   open/fsync
-   open/noctty
-   open/nonblock
-   open/rdonly
-   open/rdwr
-   open/read
-   open/sync
-   open/text
-   open/trunc
-   open/write
-   open/wronly
-   parent-process-id
-   perm/irgrp
-   perm/iroth
-   perm/irusr
-   perm/irwxg
-   perm/irwxo
-   perm/irwxu
-   perm/isgid
-   perm/isuid
-   perm/isvtx
-   perm/iwgrp
-   perm/iwoth
-   perm/iwusr
-   perm/ixgrp
-   perm/ixoth
-   perm/ixusr
-   pipe/buf
-   port->fileno
-   process
-   process*
-   process-execute
-   process-fork
-   process-group-id
-   process-run
-   process-signal
-   process-wait
-   read-symbolic-link
-   regular-file?
-   seconds->local-time
-   seconds->string
-   seconds->utc-time
-   seek/cur
-   seek/end
-   seek/set
-   set-alarm!
-   set-buffering-mode!
-   set-groups!
-   set-root-directory!
-   set-signal-handler!
-   set-signal-mask!
-   setenv
-   signal-handler
-   signal-mask
-   signal-mask!
-   signal-masked?
-   signal-unmask!
-   signal/abrt
-   signal/alrm
-   signal/break
-   signal/chld
-   signal/cont
-   signal/fpe
-   signal/bus
-   signal/hup
-   signal/ill
-   signal/int
-   signal/io
-   signal/kill
-   signal/pipe
-   signal/prof
-   signal/quit
-   signal/segv
-   signal/stop
-   signal/term
-   signal/trap
-   signal/tstp
-   signal/urg
-   signal/usr1
-   signal/usr2
-   signal/vtalrm
-   signal/winch
-   signal/xcpu
-   signal/xfsz
-   signals-list
-   sleep
-   block-device?
-   character-device?
-   fifo?
-   socket?
-   string->time
-   symbolic-link?
-   system-information
-   terminal-name
-   terminal-port?
-   terminal-size
-   time->string
-   unsetenv
-   user-information
-   utc-time->seconds
-   with-input-from-pipe
-   with-output-to-pipe))
diff --git a/posixunix.scm b/posixunix.scm
index 1220a01d..faec6fad 100644
--- a/posixunix.scm
+++ b/posixunix.scm
@@ -29,18 +29,64 @@
   (unit posix)
   (uses scheduler irregex extras files ports)
   (disable-interrupts)
-  (hide group-member _get-groups _ensure-groups posix-error ##sys#terminal-check)
   (not inline ##sys#interrupt-hook ##sys#user-interrupt-hook))
 
-
 ;; these are not available on Windows
 
 (define-foreign-variable _stat_st_blksize unsigned-int "C_statbuf.st_blksize")
 (define-foreign-variable _stat_st_blocks unsigned-int "C_statbuf.st_blocks")
 
-
-;;; common code
-
+(module chicken.posix
+  (_exit call-with-input-pipe call-with-output-pipe change-directory
+   change-directory* change-file-mode change-file-owner close-input-pipe
+   close-output-pipe create-directory create-fifo create-pipe
+   create-session create-symbolic-link current-directory
+   current-effective-group-id current-effective-user-id
+   current-effective-user-name get-environment-variables
+   current-group-id current-process-id current-user-id current-user-name
+   delete-directory directory directory? duplicate-fileno errno/2big
+   errno/acces errno/again errno/badf errno/busy errno/child
+   errno/deadlk errno/dom errno/exist errno/fault errno/fbig errno/ilseq
+   errno/intr errno/inval errno/io errno/isdir errno/mfile errno/mlink
+   errno/nametoolong errno/nfile errno/nodev errno/noent errno/noexec
+   errno/nolck errno/nomem errno/nospc errno/nosys errno/notdir
+   errno/notempty errno/notty errno/nxio errno/perm errno/pipe
+   errno/range errno/rofs errno/spipe errno/srch errno/wouldblock
+   errno/xdev fcntl/dupfd fcntl/getfd fcntl/getfl fcntl/setfd
+   fcntl/setfl fifo? file-access-time file-change-time
+   file-creation-mode file-close file-control file-execute-access?
+   file-link file-lock file-lock/blocking file-mkstemp
+   file-modification-time file-open file-owner file-permissions
+   file-position set-file-position! file-read file-read-access?
+   file-select file-size file-stat file-test-lock file-truncate
+   file-type file-unlock file-write file-write-access? fileno/stderr
+   fileno/stdin fileno/stdout find-files get-groups get-host-name glob
+   group-information initialize-groups local-time->seconds
+   local-timezone-abbreviation open-input-file* open-input-pipe
+   open-output-file* open-output-pipe open/append open/binary open/creat
+   open/excl open/fsync open/noctty open/nonblock open/rdonly open/rdwr
+   open/read open/sync open/text open/trunc open/write open/wronly
+   parent-process-id perm/irgrp perm/iroth perm/irusr perm/irwxg
+   perm/irwxo perm/irwxu perm/isgid perm/isuid perm/isvtx perm/iwgrp
+   perm/iwoth perm/iwusr perm/ixgrp perm/ixoth perm/ixusr pipe/buf
+   port->fileno process process* process-execute process-fork
+   process-group-id process-run process-signal process-wait
+   read-symbolic-link regular-file? seconds->local-time seconds->string
+   seconds->utc-time seek/cur seek/end seek/set set-alarm!
+   set-buffering-mode! set-groups! set-root-directory!
+   set-signal-handler! set-signal-mask! setenv signal-handler
+   signal-mask signal-mask! signal-masked? signal-unmask! signal/abrt
+   signal/alrm signal/break signal/chld signal/cont signal/fpe
+   signal/bus signal/hup signal/ill signal/int signal/io signal/kill
+   signal/pipe signal/prof signal/quit signal/segv signal/stop
+   signal/term signal/trap signal/tstp signal/urg signal/usr1
+   signal/usr2 signal/vtalrm signal/winch signal/xcpu signal/xfsz
+   signals-list sleep block-device? character-device? fifo? socket?
+   string->time symbolic-link? system-information terminal-name
+   terminal-port? terminal-size time->string unsetenv user-information
+   utc-time->seconds with-input-from-pipe with-output-to-pipe)
+
+(import scheme chicken foreign irregex)
 (import chicken.files
 	chicken.ports)
 
@@ -630,6 +676,11 @@ EOF
 
 ;;; Pipes:
 
+(define open-input-pipe)
+(define open-output-pipe)
+(define close-input-pipe)
+(define close-output-pipe)
+
 (let ()
   (define (mode arg) (if (pair? arg) (##sys#slot arg 0) '###text))
   (define (badmode m) (##sys#error "illegal input/output mode specifier" m))
@@ -1057,6 +1108,10 @@ EOF
 (define-foreign-variable _w_ok int "W_OK")
 (define-foreign-variable _x_ok int "X_OK")
 
+(define file-read-access?)
+(define file-write-access?)
+(define file-execute-access?)
+
 (let ()
   (define (check filename acc loc)
     (##sys#check-string filename loc)
@@ -1349,6 +1404,10 @@ EOF
 (define-foreign-variable _f_rdlck int "F_RDLCK")
 (define-foreign-variable _f_unlck int "F_UNLCK")
 
+(define file-lock)
+(define file-lock/blocking)
+(define file-test-lock)
+
 (let ()
   (define (setup port args loc)
     (let-optionals* args ([start 0]
@@ -1753,3 +1812,5 @@ EOF
       (##sys#check-string dir 'set-root-directory!)
       (when (fx< (chroot dir) 0)
         (posix-error #:file-error 'set-root-directory! "unable to change root directory" dir) ) ) ) )
+
+)
diff --git a/posixwin.scm b/posixwin.scm
index 215a095b..27abd49b 100644
--- a/posixwin.scm
+++ b/posixwin.scm
@@ -63,7 +63,7 @@
 
 (declare
   (unit posix)
-  (uses scheduler irregex extras files ports)
+  (uses data-structures scheduler irregex extras files ports)
   (disable-interrupts)
   (hide $quote-args-list $exec-setup $exec-teardown)
   (not inline ##sys#interrupt-hook ##sys#user-interrupt-hook)
@@ -658,10 +658,63 @@ static int set_file_mtime(char *filename, C_word tm)
 EOF
 ) )
 
-
-;;; common code
-
-(import chicken.files
+(define-foreign-variable _stat_st_blksize scheme-object "C_SCHEME_UNDEFINED")
+(define-foreign-variable _stat_st_blocks scheme-object "C_SCHEME_UNDEFINED")
+
+(module chicken.posix
+  (_exit call-with-input-pipe call-with-output-pipe change-directory
+   change-directory* change-file-mode change-file-owner close-input-pipe
+   close-output-pipe create-directory create-fifo create-pipe
+   create-session create-symbolic-link current-directory
+   current-effective-group-id current-effective-user-id
+   current-effective-user-name get-environment-variables
+   current-group-id current-process-id current-user-id current-user-name
+   delete-directory directory directory? duplicate-fileno errno/2big
+   errno/acces errno/again errno/badf errno/busy errno/child
+   errno/deadlk errno/dom errno/exist errno/fault errno/fbig errno/ilseq
+   errno/intr errno/inval errno/io errno/isdir errno/mfile errno/mlink
+   errno/nametoolong errno/nfile errno/nodev errno/noent errno/noexec
+   errno/nolck errno/nomem errno/nospc errno/nosys errno/notdir
+   errno/notempty errno/notty errno/nxio errno/perm errno/pipe
+   errno/range errno/rofs errno/spipe errno/srch errno/wouldblock
+   errno/xdev #;fcntl/dupfd #;fcntl/getfd #;fcntl/getfl #;fcntl/setfd
+   #;fcntl/setfl fifo? file-access-time file-change-time
+   file-creation-mode file-close #;file-control file-execute-access?
+   file-link file-lock file-lock/blocking file-mkstemp
+   file-modification-time file-open file-owner file-permissions
+   file-position set-file-position! file-read file-read-access?
+   file-select file-size file-stat file-test-lock file-truncate
+   file-type file-unlock file-write file-write-access? fileno/stderr
+   fileno/stdin fileno/stdout find-files get-groups get-host-name glob
+   group-information initialize-groups local-time->seconds
+   local-timezone-abbreviation open-input-file* open-input-pipe
+   open-output-file* open-output-pipe open/append open/binary open/creat
+   open/excl open/fsync open/noctty open/nonblock open/rdonly open/rdwr
+   open/read open/sync open/text open/trunc open/write open/wronly
+   parent-process-id perm/irgrp perm/iroth perm/irusr perm/irwxg
+   perm/irwxo perm/irwxu perm/isgid perm/isuid perm/isvtx perm/iwgrp
+   perm/iwoth perm/iwusr perm/ixgrp perm/ixoth perm/ixusr pipe/buf
+   port->fileno process process* process-execute process-fork
+   process-group-id process-run process-signal process-wait
+   read-symbolic-link regular-file? seconds->local-time seconds->string
+   seconds->utc-time seek/cur seek/end seek/set set-alarm!
+   set-buffering-mode! set-groups! set-root-directory!
+   set-signal-handler! set-signal-mask! setenv signal-handler
+   signal-mask signal-mask! signal-masked? signal-unmask! signal/abrt
+   signal/alrm signal/break signal/chld signal/cont signal/fpe
+   #;signal/bus signal/hup signal/ill signal/int signal/io signal/kill
+   signal/pipe signal/prof signal/quit signal/segv signal/stop
+   signal/term signal/trap signal/tstp signal/urg signal/usr1
+   signal/usr2 signal/vtalrm signal/winch signal/xcpu signal/xfsz
+   signals-list sleep block-device? character-device? fifo? socket?
+   string->time symbolic-link? system-information terminal-name
+   terminal-port? terminal-size time->string unsetenv user-information
+   utc-time->seconds with-input-from-pipe with-output-to-pipe)
+
+(import scheme chicken foreign irregex)
+(import chicken.data-structures
+	chicken.extras
+	chicken.files
 	chicken.ports)
 
 (include "posix-common.scm")
@@ -819,6 +872,11 @@ EOF
 
 ;;; Pipes:
 
+(define open-input-pipe)
+(define open-output-pipe)
+(define close-input-pipe)
+(define close-output-pipe)
+
 (let ()
   (define (mode arg) (if (pair? arg) (##sys#slot arg 0) '###text))
   (define (badmode m) (##sys#error "illegal input/output mode specifier" m))
@@ -1017,6 +1075,10 @@ EOF
 (define-foreign-variable _w_ok int "4")
 (define-foreign-variable _x_ok int "2")
 
+(define file-read-access?)
+(define file-write-access?)
+(define file-execute-access?)
+
 (let ()
   (define (check filename acc loc)
     (##sys#check-string filename loc)
@@ -1419,3 +1481,5 @@ EOF
 (define perm/isgid 0)
 (define perm/isuid 0)
 (define perm/isvtx 0)
+
+)
diff --git a/rules.make b/rules.make
index c3a5a53e..618bc804 100644
--- a/rules.make
+++ b/rules.make
@@ -508,6 +508,10 @@ $(foreach lib, $(DYNAMIC_IMPORT_LIBRARIES),\
 $(foreach lib, $(filter-out chicken,$(COMPILER_OBJECTS_1)),\
           $(eval $(call declare-emitted-compiler-import-lib-dependency,$(lib))))
 
+# posix declared manually, as it varies based on POSIXFILE
+.SECONDARY: chicken.posix.import.scm
+chicken.posix.import.scm: $(POSIXFILE).c
+
 chicken.c: chicken.scm mini-srfi-1.scm \
 		chicken.compiler.batch-driver.import.scm \
 		chicken.compiler.c-platform.import.scm \
@@ -575,11 +579,13 @@ chicken-status.c: chicken-status.scm \
 		chicken.data-structures.import.scm \
 		chicken.files.import.scm \
 		chicken.ports.import.scm \
+		chicken.posix.import.scm \
 		setup-api.import.scm
 chicken-install.c: chicken-install.scm \
 		chicken.data-structures.import.scm \
 		chicken.files.import.scm \
 		chicken.ports.import.scm \
+		chicken.posix.import.scm \
 		chicken.utils.import.scm \
 		setup-api.import.scm \
 		setup-download.import.scm
@@ -587,17 +593,20 @@ chicken-uninstall.c: chicken-uninstall.scm \
 		chicken.data-structures.import.scm \
 		chicken.files.import.scm \
 		chicken.ports.import.scm \
+		chicken.posix.import.scm \
 		chicken.utils.import.scm \
 		setup-api.import.scm
 setup-api.c: setup-api.scm \
 		chicken.data-structures.import.scm \
 		chicken.files.import.scm \
 		chicken.ports.import.scm \
+		chicken.posix.import.scm \
 		chicken.utils.import.scm
 setup-download.c: setup-download.scm \
 		chicken.data-structures.import.scm \
 		chicken.files.import.scm \
 		chicken.ports.import.scm \
+		chicken.posix.import.scm \
 		chicken.tcp.import.scm \
 		chicken.utils.import.scm \
 		setup-api.import.scm
@@ -615,7 +624,8 @@ tcp.c: tcp.scm \
 		chicken.ports.import.scm
 utils.c: utils.scm \
 		chicken.data-structures.import.scm \
-		chicken.files.import.scm
+		chicken.files.import.scm \
+		chicken.posix.import.scm
 
 define profile-flags
 $(if $(filter $(basename $(1)),$(PROFILE_OBJECTS)),-profile)
@@ -634,9 +644,9 @@ modules.c: $(SRCDIR)modules.scm $(SRCDIR)common-declarations.scm $(SRCDIR)mini-s
 extras.c: $(SRCDIR)extras.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib)
 posixunix.c: $(SRCDIR)posixunix.scm $(SRCDIR)posix-common.scm $(SRCDIR)common-declarations.scm
-	$(bootstrap-lib) 
+	$(bootstrap-lib) -emit-import-library chicken.posix
 posixwin.c: $(SRCDIR)posixwin.scm $(SRCDIR)posix-common.scm $(SRCDIR)common-declarations.scm
-	$(bootstrap-lib) 
+	$(bootstrap-lib) -emit-import-library chicken.posix
 irregex.c: $(SRCDIR)irregex.scm $(SRCDIR)irregex-core.scm $(SRCDIR)irregex-utils.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib)
 chicken-syntax.c: $(SRCDIR)chicken-syntax.scm $(SRCDIR)common-declarations.scm $(SRCDIR)mini-srfi-1.scm
@@ -720,10 +730,10 @@ dist: distfiles html
 # Jim's `manual-labor' must be installed (just run "chicken-install manual-labor")
 html:
 	$(MAKEDIR_COMMAND) $(MAKEDIR_COMMAND_OPTIONS) $(SRCDIR)manual-html
-	manual-labor $(SRCDIR)manual $(SRCDIR)manual-html
-	$(COPY_COMMAND) $(SRCDIR)chicken.png manual-html
-	$(COPY_COMMAND) $(SRCDIR)manual.css manual-html
-	$(COPY_COMMAND) $(SRCDIR)index.html manual-html
+	#manual-labor $(SRCDIR)manual $(SRCDIR)manual-html
+	#$(COPY_COMMAND) $(SRCDIR)chicken.png manual-html
+	#$(COPY_COMMAND) $(SRCDIR)manual.css manual-html
+	#$(COPY_COMMAND) $(SRCDIR)index.html manual-html
 
 # cleaning up
 
diff --git a/setup-api.scm b/setup-api.scm
index afa2efbc..cb2c3570 100644
--- a/setup-api.scm
+++ b/setup-api.scm
@@ -66,10 +66,11 @@
      setup-error-handling)
   
   (import scheme chicken foreign
-	  irregex posix extras
+	  irregex extras
 	  chicken.data-structures
 	  chicken.files
 	  chicken.ports
+	  chicken.posix
 	  chicken.utils)
 
 (include "mini-srfi-1.scm")
diff --git a/setup-download.scm b/setup-download.scm
index e143cb0d..33c89bda 100644
--- a/setup-download.scm
+++ b/setup-download.scm
@@ -37,10 +37,11 @@
 			temporary-directory)
 
   (import scheme chicken foreign)
-  (import extras irregex posix
+  (import extras irregex
 	  setup-api
 	  chicken.data-structures
 	  chicken.files
+	  chicken.posix
 	  chicken.tcp
 	  chicken.utils)
 
diff --git a/tests/port-tests.scm b/tests/port-tests.scm
index 588a487a..af1c215e 100644
--- a/tests/port-tests.scm
+++ b/tests/port-tests.scm
@@ -1,4 +1,4 @@
-(require-extension data-structures files ports srfi-4 tcp utils)
+(require-extension data-structures files ports posix srfi-4 tcp utils)
 
 (include "test.scm")
 (test-begin)
diff --git a/tests/runtests.sh b/tests/runtests.sh
index eab23d54..b8f712d9 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -39,7 +39,7 @@ for x in setup-api.so setup-api.import.so setup-download.so \
       setup-download.import.so chicken.import.so chicken.lolevel.import.so \
       srfi-4.import.so chicken.data-structures.import.so \
       chicken.ports.import.so chicken.utils.import.so chicken.files.import.so \
-      posix.import.so \
+      chicken.posix.import.so \
       extras.import.so \
       irregex.import.so chicken.tcp.import.so \
       foreign.import.so \
diff --git a/types.db b/types.db
index fbd829cf..3c6b7b6c 100644
--- a/types.db
+++ b/types.db
@@ -1812,232 +1812,232 @@
 
 ;; posix
 
-(_exit (procedure _exit (#!optional fixnum) noreturn))
-(call-with-input-pipe (#(procedure #:enforce) call-with-input-pipe (string (procedure (input-port) . *) #!optional symbol) . *))
-(call-with-output-pipe (#(procedure #:enforce) call-with-output-pipe (string (procedure (input-port) . *) #!optional symbol) . *))
-(change-directory (#(procedure #:clean #:enforce) change-directory (string) string))
-(change-directory* (#(procedure #:clean #:enforce) change-directory* (fixnum) fixnum))
-(change-file-mode (#(procedure #:clean #:enforce) change-file-mode (string fixnum) undefined))
-(change-file-owner (#(procedure #:clean #:enforce) change-file-owner (string fixnum fixnum) undefined))
-(close-input-pipe (#(procedure #:clean #:enforce) close-input-pipe (input-port) fixnum))
-(close-output-pipe (#(procedure #:clean #:enforce) close-output-pipe (output-port) fixnum))
-(create-directory (#(procedure #:clean #:enforce) create-directory (string #!optional *) string))
-(create-fifo (#(procedure #:clean #:enforce) create-fifo (string #!optional fixnum) undefined))
-(create-pipe (procedure create-pipe () fixnum fixnum))
-(create-session (#(procedure #:clean) create-session () fixnum))
-(create-symbolic-link (#(procedure #:clean #:enforce) create-symbolic-link (string string) undefined))
+(chicken.posix#_exit (procedure chicken.posix#_exit (#!optional fixnum) noreturn))
+(chicken.posix#call-with-input-pipe (#(procedure #:enforce) chicken.posix#call-with-input-pipe (string (procedure (input-port) . *) #!optional symbol) . *))
+(chicken.posix#call-with-output-pipe (#(procedure #:enforce) chicken.posix#call-with-output-pipe (string (procedure (input-port) . *) #!optional symbol) . *))
+(chicken.posix#change-directory (#(procedure #:clean #:enforce) chicken.posix#change-directory (string) string))
+(chicken.posix#change-directory* (#(procedure #:clean #:enforce) chicken.posix#change-directory* (fixnum) fixnum))
+(chicken.posix#change-file-mode (#(procedure #:clean #:enforce) chicken.posix#change-file-mode (string fixnum) undefined))
+(chicken.posix#change-file-owner (#(procedure #:clean #:enforce) chicken.posix#change-file-owner (string fixnum fixnum) undefined))
+(chicken.posix#close-input-pipe (#(procedure #:clean #:enforce) chicken.posix#close-input-pipe (input-port) fixnum))
+(chicken.posix#close-output-pipe (#(procedure #:clean #:enforce) chicken.posix#close-output-pipe (output-port) fixnum))
+(chicken.posix#create-directory (#(procedure #:clean #:enforce) chicken.posix#create-directory (string #!optional *) string))
+(chicken.posix#create-fifo (#(procedure #:clean #:enforce) chicken.posix#create-fifo (string #!optional fixnum) undefined))
+(chicken.posix#create-pipe (procedure chicken.posix#create-pipe () fixnum fixnum))
+(chicken.posix#create-session (#(procedure #:clean) chicken.posix#create-session () fixnum))
+(chicken.posix#create-symbolic-link (#(procedure #:clean #:enforce) chicken.posix#create-symbolic-link (string string) undefined))
 
 ;; extra arg for "parameterize" - ugh, what a hack...
-(current-directory (#(procedure #:clean #:enforce) current-directory (#!optional string *) string))
-
-(current-effective-group-id (#(procedure #:clean) current-effective-group-id () fixnum))
-(current-effective-user-id (#(procedure #:clean) current-effective-user-id () fixnum))
-(current-effective-user-name (#(procedure #:clean) current-effective-user-name () string))
-(get-environment-variables (#(procedure #:clean) get-environment-variables () (list-of string)))
-(current-group-id (#(procedure #:clean) current-group-id () fixnum))
-(current-process-id (#(procedure #:clean) current-process-id () fixnum))
-(current-user-id (#(procedure #:clean) current-user-id () fixnum))
-(current-user-name (#(procedure #:clean) current-user-name () string))
-(delete-directory (#(procedure #:clean #:enforce) delete-directory (string #!optional *) string))
-(directory (#(procedure #:clean #:enforce) directory (#!optional string *) (list-of string)))
-(directory? (#(procedure #:clean #:enforce) directory? ((or string fixnum)) boolean))
-(duplicate-fileno (#(procedure #:clean #:enforce) duplicate-fileno (fixnum #!optional fixnum) fixnum))
-(errno/2big fixnum)
-(errno/acces fixnum)
-(errno/again fixnum)
-(errno/badf fixnum)
-(errno/busy fixnum)
-(errno/child fixnum)
-(errno/deadlk fixnum)
-(errno/dom fixnum)
-(errno/exist fixnum)
-(errno/fault fixnum)
-(errno/fbig fixnum)
-(errno/ilseq fixnum)
-(errno/intr fixnum)
-(errno/inval fixnum)
-(errno/io fixnum)
-(errno/isdir fixnum)
-(errno/mfile fixnum)
-(errno/mlink fixnum)
-(errno/nametoolong fixnum)
-(errno/nfile fixnum)
-(errno/nodev fixnum)
-(errno/noent fixnum)
-(errno/noexec fixnum)
-(errno/nolck fixnum)
-(errno/nomem fixnum)
-(errno/nospc fixnum)
-(errno/nosys fixnum)
-(errno/notdir fixnum)
-(errno/notempty fixnum)
-(errno/notty fixnum)
-(errno/nxio fixnum)
-(errno/perm fixnum)
-(errno/pipe fixnum)
-(errno/range fixnum)
-(errno/rofs fixnum)
-(errno/spipe fixnum)
-(errno/srch fixnum)
-(errno/wouldblock fixnum)
-(errno/xdev fixnum)
-(fcntl/dupfd fixnum)
-(fcntl/getfd fixnum)
-(fcntl/getfl fixnum)
-(fcntl/setfd fixnum)
-(fcntl/setfl fixnum)
-(file-access-time (#(procedure #:clean #:enforce) file-access-time ((or string fixnum)) integer))
-(file-change-time (#(procedure #:clean #:enforce) file-change-time ((or string fixnum)) integer))
-(file-close (#(procedure #:clean #:enforce) file-close (fixnum) undefined))
-(file-control (#(procedure #:clean #:enforce) file-control (fixnum fixnum #!optional fixnum) fixnum))
-(file-creation-mode (#(procedure #:clean #:enforce) file-creation-mode (#!optional fixnum) fixnum))
-(file-execute-access? (#(procedure #:clean #:enforce) file-execute-access? (string) boolean))
-(file-link (#(procedure #:clean #:enforce) file-link (string string) undefined))
-(file-lock (#(procedure #:clean #:enforce) file-lock (port #!optional fixnum integer) (struct lock)))
-(file-lock/blocking (#(procedure #:clean #:enforce) file-lock/blocking (port #!optional fixnum integer) (struct lock)))
-(file-mkstemp (#(procedure #:clean #:enforce) file-mkstemp (string) fixnum string))
-(file-modification-time (#(procedure #:clean #:enforce) file-modification-time ((or string fixnum)) integer))
-(file-open (#(procedure #:clean #:enforce) file-open (string fixnum #!optional fixnum) fixnum))
-(file-owner (#(procedure #:clean #:enforce) file-owner ((or string fixnum)) fixnum))
-(file-permissions (#(procedure #:clean #:enforce) file-permissions ((or string fixnum)) fixnum))
-(file-position (#(procedure #:clean #:enforce) file-position ((or port fixnum)) integer))
-(file-read (#(procedure #:clean #:enforce) file-read (fixnum fixnum #!optional *) list))
-(file-read-access? (#(procedure #:clean #:enforce) file-read-access? (string) boolean))
-(file-select (#(procedure #:clean #:enforce) file-select ((or (list-of fixnum) fixnum false) (or (list-of fixnum) fixnum false) #!optional fixnum) * *))
-(file-size (#(procedure #:clean #:enforce) file-size ((or string fixnum)) integer))
-(file-stat (#(procedure #:clean #:enforce) file-stat ((or string fixnum) #!optional *) (vector-of integer)))
-(file-test-lock (#(procedure #:clean #:enforce) file-test-lock (port #!optional fixnum *) boolean))
-(file-truncate (#(procedure #:clean #:enforce) file-truncate ((or string fixnum) integer) undefined))
-(file-type (#(procedure #:clean #:enforce) ((or string fixnum) #!optional * *) symbol))
-(file-unlock (#(procedure #:clean #:enforce) file-unlock ((struct lock)) undefined))
-(file-write (#(procedure #:clean #:enforce) file-write (fixnum * #!optional fixnum) fixnum))
-(file-write-access? (#(procedure #:clean #:enforce) file-write-access? (string) boolean))
-(fileno/stderr fixnum)
-(fileno/stdin fixnum)
-(fileno/stdout fixnum)
-(find-files (#(procedure #:enforce) find-files (string #!rest) list))
-(get-groups (#(procedure #:clean) get-groups () list))
-(get-host-name (#(procedure #:clean) get-host-name () string))
-(glob (#(procedure #:clean #:enforce) glob (#!rest string) list))
-(group-information (#(procedure #:clean #:enforce) group-information (fixnum #!optional *) *))
-(initialize-groups (#(procedure #:clean #:enforce) initialize-groups (string fixnum) undefined))
-(local-time->seconds (#(procedure #:clean #:enforce) local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer))
-(local-timezone-abbreviation (#(procedure #:clean) local-timezone-abbreviation () string))
-(open-input-file* (#(procedure #:clean #:enforce) open-input-file* (fixnum #!optional symbol) input-port))
-(open-input-pipe (#(procedure #:clean #:enforce) open-input-pipe (string #!optional symbol) input-port))
-(open-output-file* (#(procedure #:clean #:enforce) open-output-file* (fixnum #!optional symbol) output-port))
-(open-output-pipe (#(procedure #:clean #:enforce) open-output-pipe (string #!optional symbol) output-port))
-(open/append fixnum)
-(open/binary fixnum)
-(open/creat fixnum)
-(open/excl fixnum)
-(open/fsync fixnum)
-(open/noctty fixnum)
-(open/nonblock fixnum)
-(open/rdonly fixnum)
-(open/rdwr fixnum)
-(open/read fixnum)
-(open/sync fixnum)
-(open/text fixnum)
-(open/trunc fixnum)
-(open/write fixnum)
-(open/wronly fixnum)
-(parent-process-id (#(procedure #:clean) parent-process-id () fixnum))
-(perm/irgrp fixnum)
-(perm/iroth fixnum)
-(perm/irusr fixnum)
-(perm/irwxg fixnum)
-(perm/irwxo fixnum)
-(perm/irwxu fixnum)
-(perm/isgid fixnum)
-(perm/isuid fixnum)
-(perm/isvtx fixnum)
-(perm/iwgrp fixnum)
-(perm/iwoth fixnum)
-(perm/iwusr fixnum)
-(perm/ixgrp fixnum)
-(perm/ixoth fixnum)
-(perm/ixusr fixnum)
-(pipe/buf fixnum)
-(port->fileno (#(procedure #:clean #:enforce) port->fileno (port) fixnum))
-(process (#(procedure #:clean #:enforce) process (string #!optional (list-of string) (list-of string)) input-port output-port fixnum))
-(process* (#(procedure #:clean #:enforce) process* (string #!optional (list-of string) (list-of string)) input-port output-port fixnum *))
-
-(process-execute
- (#(procedure #:clean #:enforce) process-execute (string #!optional (list-of string) (list-of string)) noreturn))
-
-(process-fork (#(procedure #:enforce) process-fork (#!optional (or (procedure () . *) false) *) fixnum))
-
-(process-group-id (#(procedure #:clean #:enforce) process-group-id () fixnum))
-(process-run (#(procedure #:clean #:enforce) process-run (string #!optional (list-of string)) fixnum))
-(process-signal (#(procedure #:clean #:enforce) process-signal (fixnum #!optional fixnum) undefined))
-(process-wait (#(procedure #:clean #:enforce) process-wait (#!optional fixnum *) fixnum fixnum fixnum))
-(read-symbolic-link (#(procedure #:clean #:enforce) read-symbolic-link (string #!optional boolean) string))
-(regular-file? (#(procedure #:clean #:enforce) regular-file? ((or string fixnum)) boolean))
-(seconds->local-time (#(procedure #:clean #:enforce) seconds->local-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
-(seconds->string (#(procedure #:clean #:enforce) seconds->string (#!optional integer) string))
-(seconds->utc-time (#(procedure #:clean #:enforce) seconds->utc-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
-(seek/cur fixnum)
-(seek/end fixnum)
-(seek/set fixnum)
-(set-alarm! (#(procedure #:clean #:enforce) set-alarm! (integer) integer))
-(set-buffering-mode! (#(procedure #:clean #:enforce) set-buffering-mode! (port symbol #!optional fixnum) undefined))
-(set-file-position! (#(procedure #:clean #:enforce) set-file-position! ((or port fixnum) integer #!optional fixnum) undefined))
-(set-groups! (#(procedure #:clean #:enforce) set-groups! ((list-of fixnum)) undefined))
-(set-root-directory! (#(procedure #:clean #:enforce) set-root-directory! (string) undefined))
-(set-signal-handler! (#(procedure #:clean #:enforce) set-signal-handler! (fixnum (or false (procedure (fixnum) . *))) undefined))
-(set-signal-mask! (#(procedure #:clean #:enforce) set-signal-mask! ((list-of fixnum)) undefined))
-(setenv (#(procedure #:clean #:enforce) setenv (string string) undefined))
-(signal-handler (#(procedure #:clean #:enforce) signal-handler (fixnum) (or false (procedure (fixnum) . *))))
-(signal-mask (#(procedure #:clean) signal-mask () fixnum))
-(signal-mask! (#(procedure #:clean #:enforce) signal-mask! (fixnum) undefined))
-(signal-masked? (#(procedure #:clean #:enforce) signal-masked? (fixnum) boolean))
-(signal-unmask! (#(procedure #:clean #:enforce) signal-unmask! (fixnum) undefined))
-(signal/abrt fixnum)
-(signal/alrm fixnum)
-(signal/chld fixnum)
-(signal/cont fixnum)
-(signal/fpe fixnum)
-(signal/hup fixnum)
-(signal/ill fixnum)
-(signal/int fixnum)
-(signal/io fixnum)
-(signal/bus fixnum)
-(signal/kill fixnum)
-(signal/pipe fixnum)
-(signal/prof fixnum)
-(signal/quit fixnum)
-(signal/segv fixnum)
-(signal/stop fixnum)
-(signal/term fixnum)
-(signal/trap fixnum)
-(signal/tstp fixnum)
-(signal/urg fixnum)
-(signal/usr1 fixnum)
-(signal/usr2 fixnum)
-(signal/vtalrm fixnum)
-(signal/winch fixnum)
-(signal/xcpu fixnum)
-(signal/xfsz fixnum)
-(signals-list list)
-(sleep (#(procedure #:clean #:enforce) sleep (fixnum) fixnum))
-(block-device? (#(procedure #:clean #:enforce) block-device? ((or string fixnum)) boolean))
-(character-device? (#(procedure #:clean #:enforce) character-device? ((or string fixnum)) boolean))
-(fifo? (#(procedure #:clean #:enforce) fifo? ((or string fixnum)) boolean))
-(socket? (#(procedure #:clean #:enforce) socket? ((or string fixnum)) boolean))
-(string->time (#(procedure #:clean #:enforce) string->time (string #!optional string) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
-(symbolic-link? (#(procedure #:clean #:enforce) symbolic-link? ((or string fixnum)) boolean))
-(system-information (#(procedure #:clean) system-information () list))
-(terminal-name (#(procedure #:clean #:enforce) terminal-name (port) string))
-(terminal-port? (#(procedure #:clean #:enforce) terminal-port? (port) boolean))
-(terminal-size (#(procedure #:clean #:enforce) terminal-size (port) fixnum fixnum))
-(time->string (#(procedure #:clean #:enforce) time->string ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum) #!optional string) string))
-(unmap-file-from-memory (#(procedure #:clean #:enforce) unmap-file-from-memory ((struct mmap) #!optional fixnum) undefined))
-(unsetenv (#(procedure #:clean #:enforce) unsetenv (string) undefined))
-(user-information (#(procedure #:clean #:enforce) user-information ((or string fixnum) #!optional *) *))
-(utc-time->seconds (#(procedure #:clean #:enforce) utc-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer))
-(with-input-from-pipe (#(procedure #:enforce) with-input-from-pipe (string (procedure () . *) #!optional symbol) . *))
-(with-output-to-pipe (#(procedure #:enforce) with-output-to-pipe (string (procedure () . *) #!optional symbol) . *))
+(chicken.posix#current-directory (#(procedure #:clean #:enforce) chicken.posix#current-directory (#!optional string *) string))
+
+(chicken.posix#current-effective-group-id (#(procedure #:clean) chicken.posix#current-effective-group-id () fixnum))
+(chicken.posix#current-effective-user-id (#(procedure #:clean) chicken.posix#current-effective-user-id () fixnum))
+(chicken.posix#current-effective-user-name (#(procedure #:clean) chicken.posix#current-effective-user-name () string))
+(chicken.posix#get-environment-variables (#(procedure #:clean) chicken.posix#get-environment-variables () (list-of string)))
+(chicken.posix#current-group-id (#(procedure #:clean) chicken.posix#current-group-id () fixnum))
+(chicken.posix#current-process-id (#(procedure #:clean) chicken.posix#current-process-id () fixnum))
+(chicken.posix#current-user-id (#(procedure #:clean) chicken.posix#current-user-id () fixnum))
+(chicken.posix#current-user-name (#(procedure #:clean) chicken.posix#current-user-name () string))
+(chicken.posix#delete-directory (#(procedure #:clean #:enforce) chicken.posix#delete-directory (string #!optional *) string))
+(chicken.posix#directory (#(procedure #:clean #:enforce) chicken.posix#directory (#!optional string *) (list-of string)))
+(chicken.posix#directory? (#(procedure #:clean #:enforce) chicken.posix#directory? ((or string fixnum)) boolean))
+(chicken.posix#duplicate-fileno (#(procedure #:clean #:enforce) chicken.posix#duplicate-fileno (fixnum #!optional fixnum) fixnum))
+(chicken.posix#errno/2big fixnum)
+(chicken.posix#errno/acces fixnum)
+(chicken.posix#errno/again fixnum)
+(chicken.posix#errno/badf fixnum)
+(chicken.posix#errno/busy fixnum)
+(chicken.posix#errno/child fixnum)
+(chicken.posix#errno/deadlk fixnum)
+(chicken.posix#errno/dom fixnum)
+(chicken.posix#errno/exist fixnum)
+(chicken.posix#errno/fault fixnum)
+(chicken.posix#errno/fbig fixnum)
+(chicken.posix#errno/ilseq fixnum)
+(chicken.posix#errno/intr fixnum)
+(chicken.posix#errno/inval fixnum)
+(chicken.posix#errno/io fixnum)
+(chicken.posix#errno/isdir fixnum)
+(chicken.posix#errno/mfile fixnum)
+(chicken.posix#errno/mlink fixnum)
+(chicken.posix#errno/nametoolong fixnum)
+(chicken.posix#errno/nfile fixnum)
+(chicken.posix#errno/nodev fixnum)
+(chicken.posix#errno/noent fixnum)
+(chicken.posix#errno/noexec fixnum)
+(chicken.posix#errno/nolck fixnum)
+(chicken.posix#errno/nomem fixnum)
+(chicken.posix#errno/nospc fixnum)
+(chicken.posix#errno/nosys fixnum)
+(chicken.posix#errno/notdir fixnum)
+(chicken.posix#errno/notempty fixnum)
+(chicken.posix#errno/notty fixnum)
+(chicken.posix#errno/nxio fixnum)
+(chicken.posix#errno/perm fixnum)
+(chicken.posix#errno/pipe fixnum)
+(chicken.posix#errno/range fixnum)
+(chicken.posix#errno/rofs fixnum)
+(chicken.posix#errno/spipe fixnum)
+(chicken.posix#errno/srch fixnum)
+(chicken.posix#errno/wouldblock fixnum)
+(chicken.posix#errno/xdev fixnum)
+(chicken.posix#fcntl/dupfd fixnum)
+(chicken.posix#fcntl/getfd fixnum)
+(chicken.posix#fcntl/getfl fixnum)
+(chicken.posix#fcntl/setfd fixnum)
+(chicken.posix#fcntl/setfl fixnum)
+(chicken.posix#file-access-time (#(procedure #:clean #:enforce) chicken.posix#file-access-time ((or string fixnum)) integer))
+(chicken.posix#file-change-time (#(procedure #:clean #:enforce) chicken.posix#file-change-time ((or string fixnum)) integer))
+(chicken.posix#file-close (#(procedure #:clean #:enforce) chicken.posix#file-close (fixnum) undefined))
+(chicken.posix#file-control (#(procedure #:clean #:enforce) chicken.posix#file-control (fixnum fixnum #!optional fixnum) fixnum))
+(chicken.posix#file-creation-mode (#(procedure #:clean #:enforce) chicken.posix#file-creation-mode (#!optional fixnum) fixnum))
+(chicken.posix#file-execute-access? (#(procedure #:clean #:enforce) chicken.posix#file-execute-access? (string) boolean))
+(chicken.posix#file-link (#(procedure #:clean #:enforce) chicken.posix#file-link (string string) undefined))
+(chicken.posix#file-lock (#(procedure #:clean #:enforce) chicken.posix#file-lock (port #!optional fixnum integer) (struct lock)))
+(chicken.posix#file-lock/blocking (#(procedure #:clean #:enforce) chicken.posix#file-lock/blocking (port #!optional fixnum integer) (struct lock)))
+(chicken.posix#file-mkstemp (#(procedure #:clean #:enforce) chicken.posix#file-mkstemp (string) fixnum string))
+(chicken.posix#file-modification-time (#(procedure #:clean #:enforce) chicken.posix#file-modification-time ((or string fixnum)) integer))
+(chicken.posix#file-open (#(procedure #:clean #:enforce) chicken.posix#file-open (string fixnum #!optional fixnum) fixnum))
+(chicken.posix#file-owner (#(procedure #:clean #:enforce) chicken.posix#file-owner ((or string fixnum)) fixnum))
+(chicken.posix#file-permissions (#(procedure #:clean #:enforce) chicken.posix#file-permissions ((or string fixnum)) fixnum))
+(chicken.posix#file-position (#(procedure #:clean #:enforce) chicken.posix#file-position ((or port fixnum)) integer))
+(chicken.posix#file-read (#(procedure #:clean #:enforce) chicken.posix#file-read (fixnum fixnum #!optional *) list))
+(chicken.posix#file-read-access? (#(procedure #:clean #:enforce) chicken.posix#file-read-access? (string) boolean))
+(chicken.posix#file-select (#(procedure #:clean #:enforce) chicken.posix#file-select ((or (list-of fixnum) fixnum false) (or (list-of fixnum) fixnum false) #!optional fixnum) * *))
+(chicken.posix#file-size (#(procedure #:clean #:enforce) chicken.posix#file-size ((or string fixnum)) integer))
+(chicken.posix#file-stat (#(procedure #:clean #:enforce) chicken.posix#file-stat ((or string fixnum) #!optional *) (vector-of integer)))
+(chicken.posix#file-test-lock (#(procedure #:clean #:enforce) chicken.posix#file-test-lock (port #!optional fixnum *) boolean))
+(chicken.posix#file-truncate (#(procedure #:clean #:enforce) chicken.posix#file-truncate ((or string fixnum) integer) undefined))
+(chicken.posix#file-type (#(procedure #:clean #:enforce) chicken.posix#file-type ((or string fixnum) #!optional * *) symbol))
+(chicken.posix#file-unlock (#(procedure #:clean #:enforce) chicken.posix#file-unlock ((struct lock)) undefined))
+(chicken.posix#file-write (#(procedure #:clean #:enforce) chicken.posix#file-write (fixnum * #!optional fixnum) fixnum))
+(chicken.posix#file-write-access? (#(procedure #:clean #:enforce) chicken.posix#file-write-access? (string) boolean))
+(chicken.posix#fileno/stderr fixnum)
+(chicken.posix#fileno/stdin fixnum)
+(chicken.posix#fileno/stdout fixnum)
+(chicken.posix#find-files (#(procedure #:enforce) chicken.posix#find-files (string #!rest) list))
+(chicken.posix#get-groups (#(procedure #:clean) chicken.posix#get-groups () list))
+(chicken.posix#get-host-name (#(procedure #:clean) chicken.posix#get-host-name () string))
+(chicken.posix#glob (#(procedure #:clean #:enforce) chicken.posix#glob (#!rest string) list))
+(chicken.posix#group-information (#(procedure #:clean #:enforce) chicken.posix#group-information (fixnum #!optional *) *))
+(chicken.posix#initialize-groups (#(procedure #:clean #:enforce) chicken.posix#initialize-groups (string fixnum) undefined))
+(chicken.posix#local-time->seconds (#(procedure #:clean #:enforce) chicken.posix#local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer))
+(chicken.posix#local-timezone-abbreviation (#(procedure #:clean) chicken.posix#local-timezone-abbreviation () string))
+(chicken.posix#open-input-file* (#(procedure #:clean #:enforce) chicken.posix#open-input-file* (fixnum #!optional symbol) input-port))
+(chicken.posix#open-input-pipe (#(procedure #:clean #:enforce) chicken.posix#open-input-pipe (string #!optional symbol) input-port))
+(chicken.posix#open-output-file* (#(procedure #:clean #:enforce) chicken.posix#open-output-file* (fixnum #!optional symbol) output-port))
+(chicken.posix#open-output-pipe (#(procedure #:clean #:enforce) chicken.posix#open-output-pipe (string #!optional symbol) output-port))
+(chicken.posix#open/append fixnum)
+(chicken.posix#open/binary fixnum)
+(chicken.posix#open/creat fixnum)
+(chicken.posix#open/excl fixnum)
+(chicken.posix#open/fsync fixnum)
+(chicken.posix#open/noctty fixnum)
+(chicken.posix#open/nonblock fixnum)
+(chicken.posix#open/rdonly fixnum)
+(chicken.posix#open/rdwr fixnum)
+(chicken.posix#open/read fixnum)
+(chicken.posix#open/sync fixnum)
+(chicken.posix#open/text fixnum)
+(chicken.posix#open/trunc fixnum)
+(chicken.posix#open/write fixnum)
+(chicken.posix#open/wronly fixnum)
+(chicken.posix#parent-process-id (#(procedure #:clean) chicken.posix#parent-process-id () fixnum))
+(chicken.posix#perm/irgrp fixnum)
+(chicken.posix#perm/iroth fixnum)
+(chicken.posix#perm/irusr fixnum)
+(chicken.posix#perm/irwxg fixnum)
+(chicken.posix#perm/irwxo fixnum)
+(chicken.posix#perm/irwxu fixnum)
+(chicken.posix#perm/isgid fixnum)
+(chicken.posix#perm/isuid fixnum)
+(chicken.posix#perm/isvtx fixnum)
+(chicken.posix#perm/iwgrp fixnum)
+(chicken.posix#perm/iwoth fixnum)
+(chicken.posix#perm/iwusr fixnum)
+(chicken.posix#perm/ixgrp fixnum)
+(chicken.posix#perm/ixoth fixnum)
+(chicken.posix#perm/ixusr fixnum)
+(chicken.posix#pipe/buf fixnum)
+(chicken.posix#port->fileno (#(procedure #:clean #:enforce) chicken.posix#port->fileno (port) fixnum))
+(chicken.posix#process (#(procedure #:clean #:enforce) chicken.posix#process (string #!optional (list-of string) (list-of string)) input-port output-port fixnum))
+(chicken.posix#process* (#(procedure #:clean #:enforce) chicken.posix#process* (string #!optional (list-of string) (list-of string)) input-port output-port fixnum *))
+
+(chicken.posix#process-execute
+ (#(procedure #:clean #:enforce) chicken.posix#process-execute (string #!optional (list-of string) (list-of string)) noreturn))
+
+(chicken.posix#process-fork (#(procedure #:enforce) chicken.posix#process-fork (#!optional (or (procedure () . *) false) *) fixnum))
+
+(chicken.posix#process-group-id (#(procedure #:clean #:enforce) chicken.posix#process-group-id () fixnum))
+(chicken.posix#process-run (#(procedure #:clean #:enforce) chicken.posix#process-run (string #!optional (list-of string)) fixnum))
+(chicken.posix#process-signal (#(procedure #:clean #:enforce) chicken.posix#process-signal (fixnum #!optional fixnum) undefined))
+(chicken.posix#process-wait (#(procedure #:clean #:enforce) chicken.posix#process-wait (#!optional fixnum *) fixnum fixnum fixnum))
+(chicken.posix#read-symbolic-link (#(procedure #:clean #:enforce) chicken.posix#read-symbolic-link (string #!optional boolean) string))
+(chicken.posix#regular-file? (#(procedure #:clean #:enforce) chicken.posix#regular-file? ((or string fixnum)) boolean))
+(chicken.posix#seconds->local-time (#(procedure #:clean #:enforce) chicken.posix#seconds->local-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
+(chicken.posix#seconds->string (#(procedure #:clean #:enforce) chicken.posix#seconds->string (#!optional integer) string))
+(chicken.posix#seconds->utc-time (#(procedure #:clean #:enforce) chicken.posix#seconds->utc-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
+(chicken.posix#seek/cur fixnum)
+(chicken.posix#seek/end fixnum)
+(chicken.posix#seek/set fixnum)
+(chicken.posix#set-alarm! (#(procedure #:clean #:enforce) chicken.posix#set-alarm! (integer) integer))
+(chicken.posix#set-buffering-mode! (#(procedure #:clean #:enforce) chicken.posix#set-buffering-mode! (port symbol #!optional fixnum) undefined))
+(chicken.posix#set-file-position! (#(procedure #:clean #:enforce) chicken.posix#set-file-position! ((or port fixnum) integer #!optional fixnum) undefined))
+(chicken.posix#set-groups! (#(procedure #:clean #:enforce) chicken.posix#set-groups! ((list-of fixnum)) undefined))
+(chicken.posix#set-root-directory! (#(procedure #:clean #:enforce) chicken.posix#set-root-directory! (string) undefined))
+(chicken.posix#set-signal-handler! (#(procedure #:clean #:enforce) chicken.posix#set-signal-handler! (fixnum (or false (procedure (fixnum) . *))) undefined))
+(chicken.posix#set-signal-mask! (#(procedure #:clean #:enforce) chicken.posix#set-signal-mask! ((list-of fixnum)) undefined))
+(chicken.posix#setenv (#(procedure #:clean #:enforce) chicken.posix#setenv (string string) undefined))
+(chicken.posix#signal-handler (#(procedure #:clean #:enforce) chicken.posix#signal-handler (fixnum) (or false (procedure (fixnum) . *))))
+(chicken.posix#signal-mask (#(procedure #:clean) chicken.posix#signal-mask () fixnum))
+(chicken.posix#signal-mask! (#(procedure #:clean #:enforce) chicken.posix#signal-mask! (fixnum) undefined))
+(chicken.posix#signal-masked? (#(procedure #:clean #:enforce) chicken.posix#signal-masked? (fixnum) boolean))
+(chicken.posix#signal-unmask! (#(procedure #:clean #:enforce) chicken.posix#signal-unmask! (fixnum) undefined))
+(chicken.posix#signal/abrt fixnum)
+(chicken.posix#signal/alrm fixnum)
+(chicken.posix#signal/chld fixnum)
+(chicken.posix#signal/cont fixnum)
+(chicken.posix#signal/fpe fixnum)
+(chicken.posix#signal/hup fixnum)
+(chicken.posix#signal/ill fixnum)
+(chicken.posix#signal/int fixnum)
+(chicken.posix#signal/io fixnum)
+(chicken.posix#signal/bus fixnum)
+(chicken.posix#signal/kill fixnum)
+(chicken.posix#signal/pipe fixnum)
+(chicken.posix#signal/prof fixnum)
+(chicken.posix#signal/quit fixnum)
+(chicken.posix#signal/segv fixnum)
+(chicken.posix#signal/stop fixnum)
+(chicken.posix#signal/term fixnum)
+(chicken.posix#signal/trap fixnum)
+(chicken.posix#signal/tstp fixnum)
+(chicken.posix#signal/urg fixnum)
+(chicken.posix#signal/usr1 fixnum)
+(chicken.posix#signal/usr2 fixnum)
+(chicken.posix#signal/vtalrm fixnum)
+(chicken.posix#signal/winch fixnum)
+(chicken.posix#signal/xcpu fixnum)
+(chicken.posix#signal/xfsz fixnum)
+(chicken.posix#signals-list list)
+(chicken.posix#sleep (#(procedure #:clean #:enforce) chicken.posix#sleep (fixnum) fixnum))
+(chicken.posix#block-device? (#(procedure #:clean #:enforce) chicken.posix#block-device? ((or string fixnum)) boolean))
+(chicken.posix#character-device? (#(procedure #:clean #:enforce) chicken.posix#character-device? ((or string fixnum)) boolean))
+(chicken.posix#fifo? (#(procedure #:clean #:enforce) chicken.posix#fifo? ((or string fixnum)) boolean))
+(chicken.posix#socket? (#(procedure #:clean #:enforce) chicken.posix#socket? ((or string fixnum)) boolean))
+(chicken.posix#string->time (#(procedure #:clean #:enforce) chicken.posix#string->time (string #!optional string) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
+(chicken.posix#symbolic-link? (#(procedure #:clean #:enforce) chicken.posix#symbolic-link? ((or string fixnum)) boolean))
+(chicken.posix#system-information (#(procedure #:clean) chicken.posix#system-information () list))
+(chicken.posix#terminal-name (#(procedure #:clean #:enforce) chicken.posix#terminal-name (port) string))
+(chicken.posix#terminal-port? (#(procedure #:clean #:enforce) chicken.posix#terminal-port? (port) boolean))
+(chicken.posix#terminal-size (#(procedure #:clean #:enforce) chicken.posix#terminal-size (port) fixnum fixnum))
+(chicken.posix#time->string (#(procedure #:clean #:enforce) chicken.posix#time->string ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum) #!optional string) string))
+(chicken.posix#unmap-file-from-memory (#(procedure #:clean #:enforce) chicken.posix#unmap-file-from-memory ((struct mmap) #!optional fixnum) undefined))
+(chicken.posix#unsetenv (#(procedure #:clean #:enforce) chicken.posix#unsetenv (string) undefined))
+(chicken.posix#user-information (#(procedure #:clean #:enforce) chicken.posix#user-information ((or string fixnum) #!optional *) *))
+(chicken.posix#utc-time->seconds (#(procedure #:clean #:enforce) chicken.posix#utc-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer))
+(chicken.posix#with-input-from-pipe (#(procedure #:enforce) chicken.posix#with-input-from-pipe (string (procedure () . *) #!optional symbol) . *))
+(chicken.posix#with-output-to-pipe (#(procedure #:enforce) chicken.posix#with-output-to-pipe (string (procedure () . *) #!optional symbol) . *))
 
 
 ;; srfi-4
diff --git a/utils.scm b/utils.scm
index a6095487..a68a72a2 100644
--- a/utils.scm
+++ b/utils.scm
@@ -41,9 +41,10 @@
    qs)
 
 (import scheme chicken)
-(import extras foreign irregex posix)
+(import extras foreign irregex)
 (import chicken.data-structures
-	chicken.files)
+	chicken.files
+	chicken.posix)
 
 (include "common-declarations.scm")
 
Trap