Merge branch 'master' of git://factorcode.org/git/factor
commit
b6fdf66f29
|
@ -1,4 +1,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
|
||||||
#if defined(__FreeBSD__)
|
#if defined(__FreeBSD__)
|
||||||
#define BSD
|
#define BSD
|
||||||
|
@ -165,6 +166,8 @@ int main() {
|
||||||
//grovel(fflags_t);
|
//grovel(fflags_t);
|
||||||
grovel(ssize_t);
|
grovel(ssize_t);
|
||||||
|
|
||||||
|
grovel(size_t);
|
||||||
|
grovel(struct kevent);
|
||||||
#ifdef UNIX
|
#ifdef UNIX
|
||||||
unix_types();
|
unix_types();
|
||||||
unix_constants();
|
unix_constants();
|
||||||
|
|
|
@ -278,7 +278,7 @@ DEFER: copy-tree-into
|
||||||
prepend-path ;
|
prepend-path ;
|
||||||
|
|
||||||
: temp-directory ( -- path )
|
: temp-directory ( -- path )
|
||||||
"resource:temp" dup make-directories ;
|
"temp" resource-path dup make-directories ;
|
||||||
|
|
||||||
: temp-file ( name -- path )
|
: temp-file ( name -- path )
|
||||||
temp-directory prepend-path ;
|
temp-directory prepend-path ;
|
||||||
|
|
|
@ -13,6 +13,12 @@ IN: builder
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
! : cd ( path -- ) current-directory set ;
|
||||||
|
|
||||||
|
: cd ( path -- ) set-current-directory ;
|
||||||
|
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
: prepare-build-machine ( -- )
|
: prepare-build-machine ( -- )
|
||||||
builds make-directory
|
builds make-directory
|
||||||
builds cd
|
builds cd
|
||||||
|
|
|
@ -20,21 +20,15 @@ IN: builder.release
|
||||||
"boot.x86.32.image"
|
"boot.x86.32.image"
|
||||||
"boot.x86.64.image"
|
"boot.x86.64.image"
|
||||||
"boot.macosx-ppc.image"
|
"boot.macosx-ppc.image"
|
||||||
|
"boot.linux-ppc.image"
|
||||||
"vm"
|
"vm"
|
||||||
"temp"
|
"temp"
|
||||||
"logs"
|
"logs"
|
||||||
".git"
|
".git"
|
||||||
".gitignore"
|
".gitignore"
|
||||||
"Makefile"
|
"Makefile"
|
||||||
"cp_dir"
|
|
||||||
"unmaintained"
|
"unmaintained"
|
||||||
"misc/target"
|
"build-support"
|
||||||
"misc/wordsize"
|
|
||||||
"misc/wordsize.c"
|
|
||||||
"misc/macos-release.sh"
|
|
||||||
"misc/source-release.sh"
|
|
||||||
"misc/windows-release.sh"
|
|
||||||
"misc/version.sh"
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
|
@ -70,7 +70,7 @@ USE: unix
|
||||||
[
|
[
|
||||||
setup-priority
|
setup-priority
|
||||||
setup-redirection
|
setup-redirection
|
||||||
current-directory get cd
|
current-directory get resource-path cd
|
||||||
dup pass-environment? [
|
dup pass-environment? [
|
||||||
dup get-environment set-os-envs
|
dup get-environment set-os-envs
|
||||||
] when
|
] when
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
USING: alien.c-types io.backend io.files io.windows kernel
|
USING: alien.c-types io.backend io.files io.windows kernel
|
||||||
math windows windows.kernel32 combinators.cleave
|
math windows windows.kernel32 combinators.cleave
|
||||||
windows.time calendar combinators math.functions
|
windows.time calendar combinators math.functions
|
||||||
sequences namespaces words symbols ;
|
sequences namespaces words symbols combinators.lib
|
||||||
|
io.nonblocking destructors ;
|
||||||
IN: io.windows.files
|
IN: io.windows.files
|
||||||
|
|
||||||
SYMBOLS: +read-only+ +hidden+ +system+
|
SYMBOLS: +read-only+ +hidden+ +system+
|
||||||
|
@ -93,3 +94,41 @@ M: windows-nt-io file-info ( path -- info )
|
||||||
|
|
||||||
M: windows-nt-io link-info ( path -- info )
|
M: windows-nt-io link-info ( path -- info )
|
||||||
file-info ;
|
file-info ;
|
||||||
|
|
||||||
|
: file-times ( path -- timestamp timestamp timestamp )
|
||||||
|
[
|
||||||
|
normalize-pathname open-existing dup close-always
|
||||||
|
"FILETIME" <c-object>
|
||||||
|
"FILETIME" <c-object>
|
||||||
|
"FILETIME" <c-object>
|
||||||
|
[ GetFileTime win32-error=0/f ] 3keep
|
||||||
|
[ FILETIME>timestamp >local-time ] 3apply
|
||||||
|
] with-destructors ;
|
||||||
|
|
||||||
|
: (set-file-times) ( handle timestamp/f timestamp/f timestamp/f -- )
|
||||||
|
[ timestamp>FILETIME ] 3apply
|
||||||
|
SetFileTime win32-error=0/f ;
|
||||||
|
|
||||||
|
: set-file-times ( path timestamp/f timestamp/f timestamp/f -- )
|
||||||
|
#! timestamp order: creation access write
|
||||||
|
[
|
||||||
|
>r >r >r
|
||||||
|
normalize-pathname open-existing dup close-always
|
||||||
|
r> r> r> (set-file-times)
|
||||||
|
] with-destructors ;
|
||||||
|
|
||||||
|
: set-file-create-time ( path timestamp -- )
|
||||||
|
f f set-file-times ;
|
||||||
|
|
||||||
|
: set-file-access-time ( path timestamp -- )
|
||||||
|
>r f r> f set-file-times ;
|
||||||
|
|
||||||
|
: set-file-write-time ( path timestamp -- )
|
||||||
|
>r f f r> set-file-times ;
|
||||||
|
|
||||||
|
M: windows-nt-io touch-file ( path -- )
|
||||||
|
[
|
||||||
|
normalize-pathname
|
||||||
|
maybe-create-file over close-always
|
||||||
|
[ drop ] [ f now dup (set-file-times) ] if
|
||||||
|
] with-destructors ;
|
||||||
|
|
|
@ -23,12 +23,12 @@ TUPLE: CreateProcess-args
|
||||||
|
|
||||||
: default-CreateProcess-args ( -- obj )
|
: default-CreateProcess-args ( -- obj )
|
||||||
CreateProcess-args construct-empty
|
CreateProcess-args construct-empty
|
||||||
0 >>dwCreateFlags
|
|
||||||
"STARTUPINFO" <c-object>
|
"STARTUPINFO" <c-object>
|
||||||
"STARTUPINFO" heap-size over set-STARTUPINFO-cb >>lpStartupInfo
|
"STARTUPINFO" heap-size over set-STARTUPINFO-cb >>lpStartupInfo
|
||||||
"PROCESS_INFORMATION" <c-object> >>lpProcessInformation
|
"PROCESS_INFORMATION" <c-object> >>lpProcessInformation
|
||||||
TRUE >>bInheritHandles
|
TRUE >>bInheritHandles
|
||||||
current-directory get >>lpCurrentDirectory ;
|
0 >>dwCreateFlags
|
||||||
|
current-directory get normalize-pathname >>lpCurrentDirectory ;
|
||||||
|
|
||||||
: call-CreateProcess ( CreateProcess-args -- )
|
: call-CreateProcess ( CreateProcess-args -- )
|
||||||
{
|
{
|
||||||
|
|
|
@ -58,7 +58,8 @@ M: win32-file close-handle ( handle -- )
|
||||||
] with-destructors ;
|
] with-destructors ;
|
||||||
|
|
||||||
: open-pipe-r/w ( path -- handle )
|
: open-pipe-r/w ( path -- handle )
|
||||||
GENERIC_READ GENERIC_WRITE bitor OPEN_EXISTING 0 open-file ;
|
{ GENERIC_READ GENERIC_WRITE } flags
|
||||||
|
OPEN_EXISTING 0 open-file ;
|
||||||
|
|
||||||
: open-read ( path -- handle length )
|
: open-read ( path -- handle length )
|
||||||
GENERIC_READ OPEN_EXISTING 0 open-file 0 ;
|
GENERIC_READ OPEN_EXISTING 0 open-file 0 ;
|
||||||
|
@ -69,6 +70,24 @@ M: win32-file close-handle ( handle -- )
|
||||||
: (open-append) ( path -- handle )
|
: (open-append) ( path -- handle )
|
||||||
GENERIC_WRITE OPEN_ALWAYS 0 open-file ;
|
GENERIC_WRITE OPEN_ALWAYS 0 open-file ;
|
||||||
|
|
||||||
|
: open-existing ( path -- handle )
|
||||||
|
{ GENERIC_READ GENERIC_WRITE } flags
|
||||||
|
share-mode
|
||||||
|
f
|
||||||
|
OPEN_EXISTING
|
||||||
|
FILE_FLAG_BACKUP_SEMANTICS
|
||||||
|
f CreateFileW dup win32-error=0/f ;
|
||||||
|
|
||||||
|
: maybe-create-file ( path -- handle ? )
|
||||||
|
#! return true if file was just created
|
||||||
|
{ GENERIC_READ GENERIC_WRITE } flags
|
||||||
|
share-mode
|
||||||
|
f
|
||||||
|
OPEN_ALWAYS
|
||||||
|
0 CreateFile-flags
|
||||||
|
f CreateFileW dup win32-error=0/f
|
||||||
|
GetLastError ERROR_ALREADY_EXISTS = not ;
|
||||||
|
|
||||||
: set-file-pointer ( handle length -- )
|
: set-file-pointer ( handle length -- )
|
||||||
dupd d>w/w <uint> FILE_BEGIN SetFilePointer
|
dupd d>w/w <uint> FILE_BEGIN SetFilePointer
|
||||||
INVALID_SET_FILE_POINTER = [
|
INVALID_SET_FILE_POINTER = [
|
||||||
|
|
|
@ -32,5 +32,5 @@ IN: crypto
|
||||||
! ! #! Cryptographically secure random number using Blum-Blum-Shub 256
|
! ! #! Cryptographically secure random number using Blum-Blum-Shub 256
|
||||||
! [ log2 1+ random-bits ] keep dupd >= [ -1 shift ] when ;
|
! [ log2 1+ random-bits ] keep dupd >= [ -1 shift ] when ;
|
||||||
|
|
||||||
M: blum-blum-shub random-32 ( bbs -- r )
|
M: blum-blum-shub random-32* ( bbs -- r )
|
||||||
;
|
;
|
||||||
|
|
|
@ -7,5 +7,5 @@ C: <random-dummy> random-dummy
|
||||||
M: random-dummy seed-random ( seed obj -- )
|
M: random-dummy seed-random ( seed obj -- )
|
||||||
(>>i) ;
|
(>>i) ;
|
||||||
|
|
||||||
M: random-dummy random-32 ( obj -- r )
|
M: random-dummy random-32* ( obj -- r )
|
||||||
[ dup 1+ ] change-i drop ;
|
[ dup 1+ ] change-i drop ;
|
||||||
|
|
|
@ -16,11 +16,11 @@ IN: random.mersenne-twister.tests
|
||||||
[ f ] [ 1234 [ make-100-randoms make-100-randoms = ] test-rng ] unit-test
|
[ f ] [ 1234 [ make-100-randoms make-100-randoms = ] test-rng ] unit-test
|
||||||
|
|
||||||
[ 1333075495 ] [
|
[ 1333075495 ] [
|
||||||
0 [ 1000 [ drop random-generator get random-32 drop ] each random-generator get random-32 ] test-rng
|
0 [ 1000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
[ 1575309035 ] [
|
[ 1575309035 ] [
|
||||||
0 [ 10000 [ drop random-generator get random-32 drop ] each random-generator get random-32 ] test-rng
|
0 [ 10000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ PRIVATE>
|
||||||
M: mersenne-twister seed-random ( mt seed -- )
|
M: mersenne-twister seed-random ( mt seed -- )
|
||||||
init-mt-seq >>seq drop ;
|
init-mt-seq >>seq drop ;
|
||||||
|
|
||||||
M: mersenne-twister random-32 ( mt -- r )
|
M: mersenne-twister random-32* ( mt -- r )
|
||||||
dup [ seq>> ] [ i>> ] bi
|
dup [ seq>> ] [ i>> ] bi
|
||||||
dup mt-n < [ drop 0 pick mt-generate ] unless
|
dup mt-n < [ drop 0 pick mt-generate ] unless
|
||||||
new-nth mt-temper
|
new-nth mt-temper
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.c-types kernel math namespaces sequences
|
USING: alien.c-types kernel math namespaces sequences
|
||||||
io.backend ;
|
io.backend io.binary ;
|
||||||
IN: random
|
IN: random
|
||||||
|
|
||||||
SYMBOL: random-generator
|
SYMBOL: random-generator
|
||||||
|
@ -12,11 +12,14 @@ HOOK: os-crypto-random-32 io-backend ( -- r )
|
||||||
HOOK: os-random-32 io-backend ( -- r )
|
HOOK: os-random-32 io-backend ( -- r )
|
||||||
|
|
||||||
GENERIC: seed-random ( tuple seed -- )
|
GENERIC: seed-random ( tuple seed -- )
|
||||||
GENERIC: random-32 ( tuple -- r )
|
GENERIC: random-32* ( tuple -- r )
|
||||||
GENERIC: random-bytes* ( tuple n -- bytes )
|
GENERIC: random-bytes* ( tuple n -- bytes )
|
||||||
|
|
||||||
M: object random-bytes* ( tuple n -- byte-array )
|
M: object random-bytes* ( tuple n -- byte-array )
|
||||||
[ drop random-32 ] with map >c-uint-array ;
|
[ drop random-32* ] with map >c-uint-array ;
|
||||||
|
|
||||||
|
M: object random-32* ( tuple -- n )
|
||||||
|
4 random-bytes* le> ;
|
||||||
|
|
||||||
: random-bytes ( n -- r )
|
: random-bytes ( n -- r )
|
||||||
[
|
[
|
||||||
|
|
|
@ -26,4 +26,3 @@ M: windows-cryptographic-rng random-bytes* ( tuple n -- bytes )
|
||||||
dup f f PROV_RSA_AES CRYPT_NEWKEYSET
|
dup f f PROV_RSA_AES CRYPT_NEWKEYSET
|
||||||
CryptAcquireContextW win32-error=0/f *void*
|
CryptAcquireContextW win32-error=0/f *void*
|
||||||
<windows-crypto-context> ;
|
<windows-crypto-context> ;
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,13 @@ C-STRUCT: kevent
|
||||||
;
|
;
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
: EVFILT_READ -1 ; inline
|
||||||
|
: EVFILT_WRITE -2 ; inline
|
||||||
|
: EVFILT_AIO -3 ; inline ! attached to aio requests
|
||||||
|
: EVFILT_VNODE -4 ; inline ! attached to vnodes
|
||||||
|
: EVFILT_PROC -5 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_SIGNAL -6 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_TIMER -7 ; inline ! timers
|
||||||
|
: EVFILT_NETDEV -8 ; inline ! Mach ports
|
||||||
|
: EVFILT_FS -9 ; inline ! Filesystem events
|
||||||
|
|
|
@ -7,16 +7,6 @@ IN: unix.kqueue
|
||||||
|
|
||||||
FUNCTION: int kqueue ( ) ;
|
FUNCTION: int kqueue ( ) ;
|
||||||
|
|
||||||
: EVFILT_READ -1 ; inline
|
|
||||||
: EVFILT_WRITE -2 ; inline
|
|
||||||
: EVFILT_AIO -3 ; inline ! attached to aio requests
|
|
||||||
: EVFILT_VNODE -4 ; inline ! attached to vnodes
|
|
||||||
: EVFILT_PROC -5 ; inline ! attached to struct proc
|
|
||||||
: EVFILT_SIGNAL -6 ; inline ! attached to struct proc
|
|
||||||
: EVFILT_TIMER -7 ; inline ! timers
|
|
||||||
: EVFILT_MACHPORT -8 ; inline ! Mach ports
|
|
||||||
: EVFILT_FS -9 ; inline ! Filesystem events
|
|
||||||
|
|
||||||
! actions
|
! actions
|
||||||
: EV_ADD HEX: 1 ; inline ! add event to kq (implies enable)
|
: EV_ADD HEX: 1 ; inline ! add event to kq (implies enable)
|
||||||
: EV_DELETE HEX: 2 ; inline ! delete event from kq
|
: EV_DELETE HEX: 2 ; inline ! delete event from kq
|
||||||
|
|
|
@ -11,3 +11,13 @@ C-STRUCT: kevent
|
||||||
;
|
;
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
: EVFILT_READ -1 ; inline
|
||||||
|
: EVFILT_WRITE -2 ; inline
|
||||||
|
: EVFILT_AIO -3 ; inline ! attached to aio requests
|
||||||
|
: EVFILT_VNODE -4 ; inline ! attached to vnodes
|
||||||
|
: EVFILT_PROC -5 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_SIGNAL -6 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_TIMER -7 ; inline ! timers
|
||||||
|
: EVFILT_MACHPORT -8 ; inline ! Mach ports
|
||||||
|
: EVFILT_FS -9 ; inline ! Filesystem events
|
||||||
|
|
|
@ -12,3 +12,11 @@ C-STRUCT: kevent
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
: EVFILT_READ 0 ; inline
|
||||||
|
: EVFILT_WRITE 1 ; inline
|
||||||
|
: EVFILT_AIO 2 ; inline ! attached to aio requests
|
||||||
|
: EVFILT_VNODE 3 ; inline ! attached to vnodes
|
||||||
|
: EVFILT_PROC 4 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_SIGNAL 5 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_TIMER 6 ; inline ! timers
|
||||||
|
: EVFILT_SYSCOUNT 7 ; inline ! Filesystem events
|
||||||
|
|
|
@ -2,13 +2,20 @@ USE: alien.syntax
|
||||||
IN: unix.kqueue
|
IN: unix.kqueue
|
||||||
|
|
||||||
C-STRUCT: kevent
|
C-STRUCT: kevent
|
||||||
{ "ulong" "ident" } ! identifier for this event
|
{ "uint" "ident" } ! identifier for this event
|
||||||
{ "uint" "filter" } ! filter for event
|
{ "short" "filter" } ! filter for event
|
||||||
{ "uint" "flags" } ! action flags for kqueue
|
{ "ushort" "flags" } ! action flags for kqueue
|
||||||
{ "uint" "fflags" } ! filter flag value
|
{ "uint" "fflags" } ! filter flag value
|
||||||
{ "longlong" "data" } ! filter data value
|
{ "int" "data" } ! filter data value
|
||||||
{ "void*" "udata" } ! opaque user data identifier
|
{ "void*" "udata" } ! opaque user data identifier
|
||||||
;
|
;
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
: EVFILT_READ -1 ; inline
|
||||||
|
: EVFILT_WRITE -2 ; inline
|
||||||
|
: EVFILT_AIO -3 ; inline ! attached to aio requests
|
||||||
|
: EVFILT_VNODE -4 ; inline ! attached to vnodes
|
||||||
|
: EVFILT_PROC -5 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_SIGNAL -6 ; inline ! attached to struct proc
|
||||||
|
: EVFILT_TIMER -7 ; inline ! timers
|
||||||
|
|
Loading…
Reference in New Issue